| ... | @@ -176,32 +176,6 @@ fn blake2bLong(out: []u8, in: []const u8) void { | ... | @@ -176,32 +176,6 @@ fn blake2bLong(out: []u8, in: []const u8) void { |
| 176 | @memcpy(out_slice, out_buf[0..out_slice.len]); | 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 | fn processBlocks( | 179 | fn processBlocks( |
| 206 | blocks: *Blocks, | 180 | blocks: *Blocks, |
| 207 | time: u32, | 181 | time: u32, |
| ... | @@ -529,9 +503,27 @@ pub fn kdf( | ... | @@ -529,9 +503,27 @@ pub fn kdf( |
| 529 | var blocks = try Blocks.initCapacity(allocator, memory); | 503 | var blocks = try Blocks.initCapacity(allocator, memory); |
| 530 | defer blocks.deinit(); | 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 | try processBlocks(&blocks, params.t, memory, params.p, mode, io); | 527 | try processBlocks(&blocks, params.t, memory, params.p, mode, io); |
| 536 | finalize(&blocks, memory, params.p, derived_key); | 528 | finalize(&blocks, memory, params.p, derived_key); |
| 537 | } | 529 | } |