| ... | ... | @@ -176,32 +176,6 @@ fn blake2bLong(out: []u8, in: []const u8) void { |
| 176 | 176 | @memcpy(out_slice, out_buf[0..out_slice.len]); |
| 177 | 177 | } |
| 178 | 178 | |
| 179 | | fn initBlocks( |
| 180 | | blocks: *Blocks, |
| 181 | | h0: *H0, |
| 182 | | memory: u32, |
| 183 | | threads: u24, |
| 184 | | ) void { |
| 185 | | var block0: [1024]u8 = undefined; |
| 186 | | var lane: u24 = 0; |
| 187 | | while (lane < threads) : (lane += 1) { |
| 188 | | const j = lane * (memory / threads); |
| 189 | | mem.writeInt(u32, h0[Blake2b512.digest_length + 4 ..][0..4], lane, .little); |
| 190 | | |
| 191 | | mem.writeInt(u32, h0[Blake2b512.digest_length..][0..4], 0, .little); |
| 192 | | blake2bLong(&block0, h0); |
| 193 | | for (&blocks.items[j + 0], 0..) |*v, i| { |
| 194 | | v.* = mem.readInt(u64, block0[i * 8 ..][0..8], .little); |
| 195 | | } |
| 196 | | |
| 197 | | mem.writeInt(u32, h0[Blake2b512.digest_length..][0..4], 1, .little); |
| 198 | | blake2bLong(&block0, h0); |
| 199 | | for (&blocks.items[j + 1], 0..) |*v, i| { |
| 200 | | v.* = mem.readInt(u64, block0[i * 8 ..][0..8], .little); |
| 201 | | } |
| 202 | | } |
| 203 | | } |
| 204 | | |
| 205 | 179 | fn processBlocks( |
| 206 | 180 | blocks: *Blocks, |
| 207 | 181 | time: u32, |
| ... | ... | @@ -529,9 +503,27 @@ pub fn kdf( |
| 529 | 503 | var blocks = try Blocks.initCapacity(allocator, memory); |
| 530 | 504 | defer blocks.deinit(); |
| 531 | 505 | |
| 532 | | _ = blocks.addManyAsSliceAssumeCapacity(memory); |
| 506 | const items = blocks.addManyAsSliceAssumeCapacity(memory); |
| 507 | |
| 508 | var block0: [1024]u8 = undefined; |
| 509 | var lane: u24 = 0; |
| 510 | while (lane < params.p) : (lane += 1) { |
| 511 | const j = lane * (memory / params.p); |
| 512 | mem.writeInt(u32, h0[Blake2b512.digest_length + 4 ..][0..4], lane, .little); |
| 513 | |
| 514 | mem.writeInt(u32, h0[Blake2b512.digest_length..][0..4], 0, .little); |
| 515 | blake2bLong(&block0, &h0); |
| 516 | for (&items[j + 0], 0..) |*v, i| { |
| 517 | v.* = mem.readInt(u64, block0[i * 8 ..][0..8], .little); |
| 518 | } |
| 519 | |
| 520 | mem.writeInt(u32, h0[Blake2b512.digest_length..][0..4], 1, .little); |
| 521 | blake2bLong(&block0, &h0); |
| 522 | for (&items[j + 1], 0..) |*v, i| { |
| 523 | v.* = mem.readInt(u64, block0[i * 8 ..][0..8], .little); |
| 524 | } |
| 525 | } |
| 533 | 526 | |
| 534 | | initBlocks(&blocks, &h0, memory, params.p); |
| 535 | 527 | try processBlocks(&blocks, params.t, memory, params.p, mode, io); |
| 536 | 528 | finalize(&blocks, memory, params.p, derived_key); |
| 537 | 529 | } |