def Gf128.mul_x_gcm
import bend-osdev-gf@0.1.2.0/gf128.bend as Gf128import 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))}