def quarter

bend-collections@1.0.0.0 · spec/crypto/chacha.bend:38

import bend-collections@1.0.0.0/spec/crypto/chacha.bend as Chacha
import Base

38# 2.2: QUARTERROUND(a, b, c, d) applied to the state at those positions:
39#   a += b; d ^= a; d <<<= 16;
40#   c += d; b ^= c; b <<<= 12;
41#   a += b; d ^= a; d <<<= 8;
42#   c += d; b ^= c; b <<<= 7;
43def quarter(+s: List<&2, U32>, +a: Nat, +b: Nat, +c: Nat, +d: Nat) -> List<&2, U32>:
44  +a1 = U32.add(get(s, a), get(s, b))
45  +d1 = rotl(U32.xor(get(s, d), a1), 16n)
46  +c1 = U32.add(get(s, c), d1)
47  +b1 = rotl(U32.xor(get(s, b), c1), 12n)
48  +a2 = U32.add(a1, b1)
49  +d2 = rotl(U32.xor(d1, a2), 8n)
50  +c2 = U32.add(c1, d2)
51  +b2 = rotl(U32.xor(b1, c2), 7n)
52  put(put(put(put(s, a, a2), b, b2), c, c2), d, d2)

Uses (8)

Used by (1)