def double_round

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

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

71# RFC 8439 2.3 inner_block (on the sixteen words of a state)
72def double_round(x: List<&2, U32>) -> List<&2, U32>:
73  match x:
74    case [x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15]:
75      y1 = quarter([x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15], 0n, 4n, 8n, 12n)
76      y2 = quarter(y1, 1n, 5n, 9n, 13n)
77      y3 = quarter(y2, 2n, 6n, 10n, 14n)
78      y4 = quarter(y3, 3n, 7n, 11n, 15n)
79      y5 = quarter(y4, 0n, 5n, 10n, 15n)
80      y6 = quarter(y5, 1n, 6n, 11n, 12n)
81      y7 = quarter(y6, 2n, 7n, 8n, 13n)
82      quarter(y7, 3n, 4n, 9n, 14n)
83    case _:
84      x

Uses (3)

Used by (3)