def Gf128.double_be

bend-osdev-gf@0.1.1.0 · gf128.bend:98

import bend-osdev-gf@0.1.1.0/gf128.bend as Gf128
import Base

98# big-endian (CMAC's doubling, LRW): shift left one bit; a carry adds 0x87
99# to byte 15
100def Gf128.double_be(v: Gf128) -> Gf128:
101  match v:
102    case Gf128{+w0, +w1, +w2, +w3}:
103      Gf128{U32.or(U32.shl(w0), U32.shrn(w1, 31n)), U32.or(U32.shl(w1), U32.shrn(w2, 31n)), U32.or(U32.shl(w2), U32.shrn(w3, 31n)), U32.xor(U32.shl(w3), U32.and(135, gf128.mask(U32.shrn(w0, 31n))))}

Uses (7)

Used by (5)