def column

bend-collections-laws-crypto@1.0.0.0 · src/crypto/blake/blake3/compress.bend:18

import bend-collections-laws-crypto@1.0.0.0/src/crypto/blake/blake3/compress.bend as Compress
import Base
import bend-collections-laws-crypto@1.0.0.0/src/crypto/blake/blake3/types.bend as T

18# G on the four columns, message words m0..m7.
19def column(s: T.St, +m0: U32, +m1: U32, +m2: U32, +m3: U32, +m4: U32, +m5: U32, +m6: U32, +m7: U32) -> T.St:
20  match s:
21    case T.St{+v0,+v1,+v2,+v3,+v4,+v5,+v6,+v7,+v8,+v9,+v10,+v11,+v12,+v13,+v14,+v15}:
22      +t0 = U32.add(U32.add(v0,v4),m0)
23      +t1 = rot16(U32.xor(v12,t0))
24      +t2 = U32.add(v8,t1)
25      +t3 = rot12(U32.xor(v4,t2))
26      +t4 = U32.add(U32.add(t0,t3),m1)
27      +t5 = rot8(U32.xor(t1,t4))
28      +t6 = U32.add(t2,t5)
29      +t7 = rot7(U32.xor(t3,t6))
30      +t8 = U32.add(U32.add(v1,v5),m2)
31      +t9 = rot16(U32.xor(v13,t8))
32      +t10 = U32.add(v9,t9)
33      +t11 = rot12(U32.xor(v5,t10))
34      +t12 = U32.add(U32.add(t8,t11),m3)
35      +t13 = rot8(U32.xor(t9,t12))
36      +t14 = U32.add(t10,t13)
37      +t15 = rot7(U32.xor(t11,t14))
38      +t16 = U32.add(U32.add(v2,v6),m4)
39      +t17 = rot16(U32.xor(v14,t16))
40      +t18 = U32.add(v10,t17)
41      +t19 = rot12(U32.xor(v6,t18))
42      +t20 = U32.add(U32.add(t16,t19),m5)
43      +t21 = rot8(U32.xor(t17,t20))
44      +t22 = U32.add(t18,t21)
45      +t23 = rot7(U32.xor(t19,t22))
46      +t24 = U32.add(U32.add(v3,v7),m6)
47      +t25 = rot16(U32.xor(v15,t24))
48      +t26 = U32.add(v11,t25)
49      +t27 = rot12(U32.xor(v7,t26))
50      +t28 = U32.add(U32.add(t24,t27),m7)
51      +t29 = rot8(U32.xor(t25,t28))
52      +t30 = U32.add(t26,t29)
53      +t31 = rot7(U32.xor(t27,t30))
54      T.St{t4,t12,t20,t28,t7,t15,t23,t31,t6,t14,t22,t30,t5,t13,t21,t29}

Uses (8)

Used by (1)