def cam.op

bend-osdev-legacy-ciphers@0.1.0.0 · camellia.bend:130

import bend-osdev-legacy-ciphers@0.1.0.0/camellia.bend as Camellia
import Base
import bend-osdev-cipher-modes@0.1.0.0/cipher_modes.bend as M
import bend-osdev-legacy-ciphers@0.1.0.0/legacy_ciphers.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}

Uses (10)

Used by (11)