| ... | @@ -374,22 +374,18 @@ pub const State = struct { | ... | @@ -374,22 +374,18 @@ pub const State = struct { |
| 374 | | 374 | |
| 375 | const Halves = struct { l: u32, r: u32 }; | 375 | const Halves = struct { l: u32, r: u32 }; |
| 376 | | 376 | |
| 377 | fn feistelF(state: State, x: u32) u32 { | | |
| 378 | var r = state.sboxes[0][@truncate(u8, x >> 24)]; | | |
| 379 | r +%= state.sboxes[1][@truncate(u8, x >> 16)]; | | |
| 380 | r ^= state.sboxes[2][@truncate(u8, x >> 8)]; | | |
| 381 | r +%= state.sboxes[3][@truncate(u8, x)]; | | |
| 382 | return r; | | |
| 383 | } | | |
| 384 | | | |
| 385 | fn halfRound(state: State, i: u32, j: u32, n: usize) u32 { | 377 | fn halfRound(state: State, i: u32, j: u32, n: usize) u32 { |
| 386 | return i ^ state.feistelF(j) ^ state.subkeys[n]; | 378 | var r = state.sboxes[0][@truncate(u8, j >> 24)]; |
| | 379 | r +%= state.sboxes[1][@truncate(u8, j >> 16)]; |
| | 380 | r ^= state.sboxes[2][@truncate(u8, j >> 8)]; |
| | 381 | r +%= state.sboxes[3][@truncate(u8, j)]; |
| | 382 | return i ^ r ^ state.subkeys[n]; |
| 387 | } | 383 | } |
| 388 | | 384 | |
| 389 | fn encipher(state: State, halves: *Halves) void { | 385 | fn encipher(state: State, halves: *Halves) void { |
| 390 | halves.l ^= state.subkeys[0]; | 386 | halves.l ^= state.subkeys[0]; |
| 391 | var i: usize = 1; | 387 | comptime var i = 1; |
| 392 | while (i < 16) : (i += 2) { | 388 | inline while (i < 16) : (i += 2) { |
| 393 | halves.r = state.halfRound(halves.r, halves.l, i); | 389 | halves.r = state.halfRound(halves.r, halves.l, i); |
| 394 | halves.l = state.halfRound(halves.l, halves.r, i + 1); | 390 | halves.l = state.halfRound(halves.l, halves.r, i + 1); |
| 395 | } | 391 | } |