mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-30 18:02:02 +00:00
2794 lines
53 KiB
Odin
2794 lines
53 KiB
Odin
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
|
|
} |