def mix

bend-collections-laws-crypto@1.0.0.0 · spec/crypto/blake/blake2b.bend:129

import bend-collections-laws-crypto@1.0.0.0/spec/crypto/blake/blake2b.bend as Blake2b
import Base
import bend-collections-laws-crypto@1.0.0.0/src/crypto/blake/blake2b/types.bend as T

129# RFC 7693 section 3.1, the mixing function G with R1..R4 = 32, 24, 16, 63:
130#   v[a] := (v[a] + v[b] + x) mod 2^64;  v[d] := (v[d] ^ v[a]) >>> R1
131#   v[c] := (v[c] + v[d])     mod 2^64;  v[b] := (v[b] ^ v[c]) >>> R2
132#   v[a] := (v[a] + v[b] + y) mod 2^64;  v[d] := (v[d] ^ v[a]) >>> R3
133#   v[c] := (v[c] + v[d])     mod 2^64;  v[b] := (v[b] ^ v[c]) >>> R4
134def mix(+s: T.State, +a: Nat, +b: Nat, +c: Nat, +d: Nat, x: T.Lane, y: T.Lane) -> T.State:
135  +a1 = add(add(at(s,a),at(s,b)),x)
136  +d1 = rotr(xor(at(s,d),a1),32n)
137  +c1 = add(at(s,c),d1)
138  +b1 = rotr(xor(at(s,b),c1),24n)
139  +a2 = add(add(a1,b1),y)
140  +d2 = rotr(xor(d1,a2),16n)
141  +c2 = add(c1,d2)
142  +b2 = rotr(xor(b1,c2),63n)
143  put(put(put(put(s,a,a2),b,b2),c,c2),d,d2)

Uses (8)

Used by (1)