diff options
| author | gingerBill <bill@gingerbill.org> | 2023-09-26 13:15:21 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-09-26 13:15:21 +0100 |
| commit | 4c22982732d7dfc2e48f03e03de7b8f6b0fab60c (patch) | |
| tree | f8f2a88afefd65dc2b13d040db9e272890ca8de0 /core/crypto/_blake2/blake2.odin | |
| parent | fb935541c9f8c7bb3f92747a22737a49625d102a (diff) | |
Rename files to not start with `_`
Diffstat (limited to 'core/crypto/_blake2/blake2.odin')
| -rw-r--r-- | core/crypto/_blake2/blake2.odin | 2794 |
1 files changed, 2794 insertions, 0 deletions
diff --git a/core/crypto/_blake2/blake2.odin b/core/crypto/_blake2/blake2.odin new file mode 100644 index 000000000..7b75541e9 --- /dev/null +++ b/core/crypto/_blake2/blake2.odin @@ -0,0 +1,2794 @@ +package _blake2 + +/* + Copyright 2021 zhibog + Made available under the BSD-3 license. + + List of contributors: + zhibog, dotbmp: Initial implementation. + + Implementation of the BLAKE2 hashing algorithm, as defined in <https://datatracker.ietf.org/doc/html/rfc7693> and <https://www.blake2.net/> +*/ + +import "../util" + +BLAKE2S_BLOCK_SIZE :: 64 +BLAKE2S_SIZE :: 32 +BLAKE2B_BLOCK_SIZE :: 128 +BLAKE2B_SIZE :: 64 + +Blake2s_Context :: struct { + h: [8]u32, + t: [2]u32, + f: [2]u32, + x: [BLAKE2S_BLOCK_SIZE]byte, + nx: int, + ih: [8]u32, + padded_key: [BLAKE2S_BLOCK_SIZE]byte, + is_keyed: bool, + size: byte, + is_last_node: bool, + cfg: Blake2_Config, +} + +Blake2b_Context :: struct { + h: [8]u64, + t: [2]u64, + f: [2]u64, + x: [BLAKE2B_BLOCK_SIZE]byte, + nx: int, + ih: [8]u64, + padded_key: [BLAKE2B_BLOCK_SIZE]byte, + is_keyed: bool, + size: byte, + is_last_node: bool, + cfg: Blake2_Config, +} + +Blake2_Config :: struct { + size: byte, + key: []byte, + salt: []byte, + person: []byte, + tree: union{Blake2_Tree}, +} + +Blake2_Tree :: struct { + fanout: byte, + max_depth: byte, + leaf_size: u32, + node_offset: u64, + node_depth: byte, + inner_hash_size: byte, + is_last_node: bool, +} + +BLAKE2S_IV := [8]u32 { + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, +} + +BLAKE2B_IV := [8]u64 { + 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, + 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, + 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, +} + +init :: proc(ctx: ^$T) { + when T == Blake2s_Context { + block_size :: BLAKE2S_BLOCK_SIZE + } else when T == Blake2b_Context { + block_size :: BLAKE2B_BLOCK_SIZE + } + + p := make([]byte, block_size) + defer delete(p) + + p[0] = ctx.cfg.size + p[1] = byte(len(ctx.cfg.key)) + + if ctx.cfg.salt != nil { + when T == Blake2s_Context { + copy(p[16:], ctx.cfg.salt) + } else when T == Blake2b_Context { + copy(p[32:], ctx.cfg.salt) + } + } + if ctx.cfg.person != nil { + when T == Blake2s_Context { + copy(p[24:], ctx.cfg.person) + } else when T == Blake2b_Context { + copy(p[48:], ctx.cfg.person) + } + } + + if ctx.cfg.tree != nil { + p[2] = ctx.cfg.tree.(Blake2_Tree).fanout + p[3] = ctx.cfg.tree.(Blake2_Tree).max_depth + util.PUT_U32_LE(p[4:], ctx.cfg.tree.(Blake2_Tree).leaf_size) + when T == Blake2s_Context { + p[8] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset) + p[9] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 8) + p[10] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 16) + p[11] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 24) + p[12] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 32) + p[13] = byte(ctx.cfg.tree.(Blake2_Tree).node_offset >> 40) + p[14] = ctx.cfg.tree.(Blake2_Tree).node_depth + p[15] = ctx.cfg.tree.(Blake2_Tree).inner_hash_size + } else when T == Blake2b_Context { + util.PUT_U64_LE(p[8:], ctx.cfg.tree.(Blake2_Tree).node_offset) + p[16] = ctx.cfg.tree.(Blake2_Tree).node_depth + p[17] = ctx.cfg.tree.(Blake2_Tree).inner_hash_size + } + } else { + p[2], p[3] = 1, 1 + } + ctx.size = ctx.cfg.size + for i := 0; i < 8; i += 1 { + when T == Blake2s_Context { + ctx.h[i] = BLAKE2S_IV[i] ~ util.U32_LE(p[i * 4:]) + } + when T == Blake2b_Context { + ctx.h[i] = BLAKE2B_IV[i] ~ util.U64_LE(p[i * 8:]) + } + } + if ctx.cfg.tree != nil && ctx.cfg.tree.(Blake2_Tree).is_last_node { + ctx.is_last_node = true + } + if len(ctx.cfg.key) > 0 { + copy(ctx.padded_key[:], ctx.cfg.key) + update(ctx, ctx.padded_key[:]) + ctx.is_keyed = true + } + copy(ctx.ih[:], ctx.h[:]) + copy(ctx.h[:], ctx.ih[:]) + if ctx.is_keyed { + update(ctx, ctx.padded_key[:]) + } +} + +update :: proc "contextless" (ctx: ^$T, p: []byte) { + p := p + when T == Blake2s_Context { + block_size :: BLAKE2S_BLOCK_SIZE + } else when T == Blake2b_Context { + block_size :: BLAKE2B_BLOCK_SIZE + } + + left := block_size - ctx.nx + if len(p) > left { + copy(ctx.x[ctx.nx:], p[:left]) + p = p[left:] + blocks(ctx, ctx.x[:]) + ctx.nx = 0 + } + if len(p) > block_size { + n := len(p) &~ (block_size - 1) + if n == len(p) { + n -= block_size + } + blocks(ctx, p[:n]) + p = p[n:] + } + ctx.nx += copy(ctx.x[ctx.nx:], p) +} + +final :: proc "contextless" (ctx: ^$T, hash: []byte) { + when T == Blake2s_Context { + blake2s_final(ctx, hash) + } + when T == Blake2b_Context { + blake2b_final(ctx, hash) + } +} + +blake2s_final :: proc "contextless" (ctx: ^Blake2s_Context, hash: []byte) { + if ctx.is_keyed { + for i := 0; i < len(ctx.padded_key); i += 1 { + ctx.padded_key[i] = 0 + } + } + + dec := BLAKE2S_BLOCK_SIZE - u32(ctx.nx) + if ctx.t[0] < dec { + ctx.t[1] -= 1 + } + ctx.t[0] -= dec + + ctx.f[0] = 0xffffffff + if ctx.is_last_node { + ctx.f[1] = 0xffffffff + } + + blocks(ctx, ctx.x[:]) + + j := 0 + for s, _ in ctx.h[:(ctx.size - 1) / 4 + 1] { + hash[j + 0] = byte(s >> 0) + hash[j + 1] = byte(s >> 8) + hash[j + 2] = byte(s >> 16) + hash[j + 3] = byte(s >> 24) + j += 4 + } +} + +blake2b_final :: proc "contextless" (ctx: ^Blake2b_Context, hash: []byte) { + if ctx.is_keyed { + for i := 0; i < len(ctx.padded_key); i += 1 { + ctx.padded_key[i] = 0 + } + } + + dec := BLAKE2B_BLOCK_SIZE - u64(ctx.nx) + if ctx.t[0] < dec { + ctx.t[1] -= 1 + } + ctx.t[0] -= dec + + ctx.f[0] = 0xffffffffffffffff + if ctx.is_last_node { + ctx.f[1] = 0xffffffffffffffff + } + + blocks(ctx, ctx.x[:]) + + j := 0 + for s, _ in ctx.h[:(ctx.size - 1) / 8 + 1] { + hash[j + 0] = byte(s >> 0) + hash[j + 1] = byte(s >> 8) + hash[j + 2] = byte(s >> 16) + hash[j + 3] = byte(s >> 24) + hash[j + 4] = byte(s >> 32) + hash[j + 5] = byte(s >> 40) + hash[j + 6] = byte(s >> 48) + hash[j + 7] = byte(s >> 56) + j += 8 + } +} + +blocks :: proc "contextless" (ctx: ^$T, p: []byte) { + when T == Blake2s_Context { + blake2s_blocks(ctx, p) + } + when T == Blake2b_Context { + blake2b_blocks(ctx, p) + } +} + +blake2s_blocks :: #force_inline proc "contextless" (ctx: ^Blake2s_Context, p: []byte) { + h0, h1, h2, h3, h4, h5, h6, h7 := ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] + p := p + for len(p) >= BLAKE2S_BLOCK_SIZE { + ctx.t[0] += BLAKE2S_BLOCK_SIZE + if ctx.t[0] < BLAKE2S_BLOCK_SIZE { + ctx.t[1] += 1 + } + v0, v1, v2, v3, v4, v5, v6, v7 := h0, h1, h2, h3, h4, h5, h6, h7 + v8 := BLAKE2S_IV[0] + v9 := BLAKE2S_IV[1] + v10 := BLAKE2S_IV[2] + v11 := BLAKE2S_IV[3] + v12 := BLAKE2S_IV[4] ~ ctx.t[0] + v13 := BLAKE2S_IV[5] ~ ctx.t[1] + v14 := BLAKE2S_IV[6] ~ ctx.f[0] + v15 := BLAKE2S_IV[7] ~ ctx.f[1] + m: [16]u32 + j := 0 + for i := 0; i < 16; i += 1 { + m[i] = u32(p[j]) | u32(p[j + 1]) << 8 | u32(p[j + 2]) << 16 | u32(p[j + 3]) << 24 + j += 4 + } + v0 += m[0] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[2] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[4] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[6] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[5] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[7] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[3] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[1] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[8] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[10] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[12] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[14] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[13] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[15] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[11] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[9] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[14] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[4] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[9] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[13] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[15] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[6] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[8] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[10] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[1] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[0] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[11] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[5] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[7] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[3] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[2] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[12] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[11] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[12] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[5] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[15] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[2] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[13] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[0] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[8] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[10] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[3] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[7] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[9] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[1] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[4] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[6] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[14] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[7] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[3] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[13] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[11] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[12] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[14] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[1] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[9] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[2] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[5] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[4] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[15] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[0] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[8] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[10] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[6] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[9] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[5] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[2] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[10] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[4] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[15] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[7] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[0] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[14] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[11] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[6] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[3] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[8] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[13] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[12] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[1] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[2] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[6] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[0] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[8] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[11] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[3] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[10] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[12] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[4] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[7] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[15] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[1] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[14] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[9] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[5] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[13] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[12] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[1] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[14] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[4] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[13] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[10] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[15] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[5] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[0] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[6] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[9] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[8] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[2] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[11] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[3] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[7] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[13] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[7] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[12] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[3] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[1] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[9] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[14] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[11] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[5] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[15] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[8] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[2] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[6] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[10] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[4] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[0] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[6] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[14] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[11] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[0] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[3] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[8] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[9] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[15] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[12] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[13] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[1] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[10] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[4] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[5] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[7] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[2] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[10] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 12) | v4 >> 12 + v1 += m[8] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 12) | v5 >> 12 + v2 += m[7] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 12) | v6 >> 12 + v3 += m[1] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 12) | v7 >> 12 + v2 += m[6] + v2 += v6 + v14 ~= v2 + v14 = v14 << (32 - 8) | v14 >> 8 + v10 += v14 + v6 ~= v10 + v6 = v6 << (32 - 7) | v6 >> 7 + v3 += m[5] + v3 += v7 + v15 ~= v3 + v15 = v15 << (32 - 8) | v15 >> 8 + v11 += v15 + v7 ~= v11 + v7 = v7 << (32 - 7) | v7 >> 7 + v1 += m[4] + v1 += v5 + v13 ~= v1 + v13 = v13 << (32 - 8) | v13 >> 8 + v9 += v13 + v5 ~= v9 + v5 = v5 << (32 - 7) | v5 >> 7 + v0 += m[2] + v0 += v4 + v12 ~= v0 + v12 = v12 << (32 - 8) | v12 >> 8 + v8 += v12 + v4 ~= v8 + v4 = v4 << (32 - 7) | v4 >> 7 + v0 += m[15] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 12) | v5 >> 12 + v1 += m[9] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 12) | v6 >> 12 + v2 += m[3] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 12) | v7 >> 12 + v3 += m[13] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 12) | v4 >> 12 + v2 += m[12] + v2 += v7 + v13 ~= v2 + v13 = v13 << (32 - 8) | v13 >> 8 + v8 += v13 + v7 ~= v8 + v7 = v7 << (32 - 7) | v7 >> 7 + v3 += m[0] + v3 += v4 + v14 ~= v3 + v14 = v14 << (32 - 8) | v14 >> 8 + v9 += v14 + v4 ~= v9 + v4 = v4 << (32 - 7) | v4 >> 7 + v1 += m[14] + v1 += v6 + v12 ~= v1 + v12 = v12 << (32 - 8) | v12 >> 8 + v11 += v12 + v6 ~= v11 + v6 = v6 << (32 - 7) | v6 >> 7 + v0 += m[11] + v0 += v5 + v15 ~= v0 + v15 = v15 << (32 - 8) | v15 >> 8 + v10 += v15 + v5 ~= v10 + v5 = v5 << (32 - 7) | v5 >> 7 + h0 ~= v0 ~ v8 + h1 ~= v1 ~ v9 + h2 ~= v2 ~ v10 + h3 ~= v3 ~ v11 + h4 ~= v4 ~ v12 + h5 ~= v5 ~ v13 + h6 ~= v6 ~ v14 + h7 ~= v7 ~ v15 + p = p[BLAKE2S_BLOCK_SIZE:] + } + ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] = h0, h1, h2, h3, h4, h5, h6, h7 +} + +blake2b_blocks :: #force_inline proc "contextless" (ctx: ^Blake2b_Context, p: []byte) { + h0, h1, h2, h3, h4, h5, h6, h7 := ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] + p := p + for len(p) >= BLAKE2B_BLOCK_SIZE { + ctx.t[0] += BLAKE2B_BLOCK_SIZE + if ctx.t[0] < BLAKE2B_BLOCK_SIZE { + ctx.t[1]+=1 + } + v0, v1, v2, v3, v4, v5, v6, v7 := h0, h1, h2, h3, h4, h5, h6, h7 + v8 := BLAKE2B_IV[0] + v9 := BLAKE2B_IV[1] + v10 := BLAKE2B_IV[2] + v11 := BLAKE2B_IV[3] + v12 := BLAKE2B_IV[4] ~ ctx.t[0] + v13 := BLAKE2B_IV[5] ~ ctx.t[1] + v14 := BLAKE2B_IV[6] ~ ctx.f[0] + v15 := BLAKE2B_IV[7] ~ ctx.f[1] + m: [16]u64 = --- + j := 0 + for i := 0; i < 16; i+=1 { + m[i] = u64(p[j]) | u64(p[j + 1]) << 8 | u64(p[j + 2]) << 16 | u64(p[j + 3]) << 24 | + u64(p[j + 4]) << 32 | u64(p[j + 5]) << 40 | u64(p[j + 6]) << 48 | u64(p[j + 7]) << 56 + j += 8 + } + v0 += m[0] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[2] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[4] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[6] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[5] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[7] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[3] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[1] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[8] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[10] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[12] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[14] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[13] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[15] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[11] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[9] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[14] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[4] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[9] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[13] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[15] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[6] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[8] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[10] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[1] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[0] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[11] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[5] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[7] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[3] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[2] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[12] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[11] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[12] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[5] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[15] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[2] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[13] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[0] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[8] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[10] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[3] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[7] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[9] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[1] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[4] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[6] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[14] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[7] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[3] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[13] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[11] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[12] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[14] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[1] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[9] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[2] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[5] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[4] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[15] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[0] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[8] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[10] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[6] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[9] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[5] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[2] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[10] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[4] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[15] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[7] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[0] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[14] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[11] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[6] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[3] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[8] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[13] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[12] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[1] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[2] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[6] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[0] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[8] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[11] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[3] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[10] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[12] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[4] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[7] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[15] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[1] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[14] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[9] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[5] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[13] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[12] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[1] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[14] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[4] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[13] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[10] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[15] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[5] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[0] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[6] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[9] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[8] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[2] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[11] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[3] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[7] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[13] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[7] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[12] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[3] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[1] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[9] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[14] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[11] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[5] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[15] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[8] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[2] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[6] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[10] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[4] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[0] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[6] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[14] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[11] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[0] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[3] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[8] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[9] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[15] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[12] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[13] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[1] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[10] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[4] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[5] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[7] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[2] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[10] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[8] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[7] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[1] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[6] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[5] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[4] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[2] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[15] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[9] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[3] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[13] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[12] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[0] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[14] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[11] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[0] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[2] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[4] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[6] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[5] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[7] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[3] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[1] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[8] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[10] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[12] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[14] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[13] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[15] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[11] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[9] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[14] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 32) | v12 >> 32 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 24) | v4 >> 24 + v1 += m[4] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 32) | v13 >> 32 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 24) | v5 >> 24 + v2 += m[9] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 32) | v14 >> 32 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 24) | v6 >> 24 + v3 += m[13] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 32) | v15 >> 32 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 24) | v7 >> 24 + v2 += m[15] + v2 += v6 + v14 ~= v2 + v14 = v14 << (64 - 16) | v14 >> 16 + v10 += v14 + v6 ~= v10 + v6 = v6 << (64 - 63) | v6 >> 63 + v3 += m[6] + v3 += v7 + v15 ~= v3 + v15 = v15 << (64 - 16) | v15 >> 16 + v11 += v15 + v7 ~= v11 + v7 = v7 << (64 - 63) | v7 >> 63 + v1 += m[8] + v1 += v5 + v13 ~= v1 + v13 = v13 << (64 - 16) | v13 >> 16 + v9 += v13 + v5 ~= v9 + v5 = v5 << (64 - 63) | v5 >> 63 + v0 += m[10] + v0 += v4 + v12 ~= v0 + v12 = v12 << (64 - 16) | v12 >> 16 + v8 += v12 + v4 ~= v8 + v4 = v4 << (64 - 63) | v4 >> 63 + v0 += m[1] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 32) | v15 >> 32 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 24) | v5 >> 24 + v1 += m[0] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 32) | v12 >> 32 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 24) | v6 >> 24 + v2 += m[11] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 32) | v13 >> 32 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 24) | v7 >> 24 + v3 += m[5] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 32) | v14 >> 32 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 24) | v4 >> 24 + v2 += m[7] + v2 += v7 + v13 ~= v2 + v13 = v13 << (64 - 16) | v13 >> 16 + v8 += v13 + v7 ~= v8 + v7 = v7 << (64 - 63) | v7 >> 63 + v3 += m[3] + v3 += v4 + v14 ~= v3 + v14 = v14 << (64 - 16) | v14 >> 16 + v9 += v14 + v4 ~= v9 + v4 = v4 << (64 - 63) | v4 >> 63 + v1 += m[2] + v1 += v6 + v12 ~= v1 + v12 = v12 << (64 - 16) | v12 >> 16 + v11 += v12 + v6 ~= v11 + v6 = v6 << (64 - 63) | v6 >> 63 + v0 += m[12] + v0 += v5 + v15 ~= v0 + v15 = v15 << (64 - 16) | v15 >> 16 + v10 += v15 + v5 ~= v10 + v5 = v5 << (64 - 63) | v5 >> 63 + h0 ~= v0 ~ v8 + h1 ~= v1 ~ v9 + h2 ~= v2 ~ v10 + h3 ~= v3 ~ v11 + h4 ~= v4 ~ v12 + h5 ~= v5 ~ v13 + h6 ~= v6 ~ v14 + h7 ~= v7 ~ v15 + p = p[BLAKE2B_BLOCK_SIZE:] + } + ctx.h[0], ctx.h[1], ctx.h[2], ctx.h[3], ctx.h[4], ctx.h[5], ctx.h[6], ctx.h[7] = h0, h1, h2, h3, h4, h5, h6, h7 +}
\ No newline at end of file |