def Gf128.mul_x_gcm

bend-osdev-gf@0.1.2.0 · gf128.bend:92

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

92# GCM's order: shift right one bit; bit 127 falling off adds 0xE1 to byte 0
93def Gf128.mul_x_gcm(v: Gf128) -> Gf128:
94  match v:
95    case Gf128{+w0, +w1, +w2, +w3}:
96      Gf128{U32.xor(U32.shr(w0), U32.and(3774873600, gf128.mask(w3))), U32.or(U32.shr(w1), U32.shln(w0, 31n)), U32.or(U32.shr(w2), U32.shln(w1, 31n)), U32.or(U32.shr(w3), U32.shln(w2, 31n))}

Uses (7)

Used by (3)