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 and */ 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 }