def cam.op
bend-osdev-camellia@0.1.0.0 · camellia.bend:130
import bend-osdev-camellia@0.1.0.0/camellia.bend as Camellia
import Base
import bend-osdev-mode-core@0.1.0.0/mode_core.bend as M
import bend-osdev-cipher-core@0.1.0.0/cipher_core.bend as L
130def cam.op(o: LcCamOp, s: M.CmBlock) -> M.CmBlock:
131 match o:
132 case LcCamWhite{a, b}:
133 cam.white(a, b, s)
134 case LcCamF1{t, k}:
135 match s:
136 case M.CmBlock{+s0, +s1, s2, s3}:
137 +f = cam.f(t, L.LcBlock64{s0, s1}, k)
138 M.CmBlock{s0, s1, U32.xor(s2, cam.hi(f)), U32.xor(s3, cam.lo(f))}
139 case LcCamF2{t, k}:
140 match s:
141 case M.CmBlock{s0, s1, +s2, +s3}:
142 +f = cam.f(t, L.LcBlock64{s2, s3}, k)
143 M.CmBlock{U32.xor(s0, cam.hi(f)), U32.xor(s1, cam.lo(f)), s2, s3}
144 case LcCamFl{a, b}:
145 match s:
146 case M.CmBlock{s0, s1, s2, s3}:
147 +d1 = cam.fl(L.LcBlock64{s0, s1}, a)
148 +d2 = cam.flinv(L.LcBlock64{s2, s3}, b)
149 M.CmBlock{cam.hi(d1), cam.lo(d1), cam.hi(d2), cam.lo(d2)}
150 case LcCamSwap{}:
151 match s:
152 case M.CmBlock{s0, s1, s2, s3}:
153 M.CmBlock{s2, s3, s0, s1}