def quarter

bend-collections-laws-crypto@1.0.0.0 · spec/math/random/chacha8rand.bend:58

import bend-collections-laws-crypto@1.0.0.0/spec/math/random/chacha8rand.bend as Chacha8rand
import Base

58# RFC 8439 2.1: a += b; d ^= a; d <<<= 16; c += d; b ^= c; b <<<= 12;
59# a += b; d ^= a; d <<<= 8; c += d; b ^= c; b <<<= 7 (2.2: on x[a..d])
60def quarter(+x: List<&2, U32>, +a: Nat, +b: Nat, +c: Nat, +d: Nat) -> List<&2, U32>:
61  +a1 = U32.add(get(x, a), get(x, b))
62  +d1 = rotl(U32.xor(get(x, d), a1), 16n)
63  +c1 = U32.add(get(x, c), d1)
64  +b1 = rotl(U32.xor(get(x, b), c1), 12n)
65  +a2 = U32.add(a1, b1)
66  +d2 = rotl(U32.xor(d1, a2), 8n)
67  +c2 = U32.add(c1, d2)
68  +b2 = rotl(U32.xor(b1, c2), 7n)
69  put(put(put(put(x, a, a2), b, b2), c, c2), d, d2)

Uses (8)

Used by (1)