def tf.op
bend-osdev-legacy-ciphers@0.1.0.0 · twofish.bend:186
import bend-osdev-legacy-ciphers@0.1.0.0/twofish.bend as Twofish
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
186def tf.op(o: LcTfOp, s: M.CmBlock) -> M.CmBlock:
187 match o:
188 case LcTfBswap{}:
189 match s:
190 case M.CmBlock{a, b, c, d}:
191 M.CmBlock{L.lc.bswap.bits(a), L.lc.bswap.bits(b), L.lc.bswap.bits(c), L.lc.bswap.bits(d)}
192 case LcTfWhite{k}:
193 M.CmBlock.xor(s, k)
194 case LcTfRound{tb, sk, ka, kb}:
195 match s:
196 case M.CmBlock{+r0, +r1, r2, r3}:
197 +f = tf.f(tb, sk, r0, r1, ka, kb)
198 M.CmBlock{L.lc.rotl31.bits(U32.xor(r2, tf.f0(f))), U32.xor(L.lc.rotl1.bits(r3), tf.f1(f)), r0, r1}
199 case LcTfSwap{}:
200 match s:
201 case M.CmBlock{a, b, c, d}:
202 M.CmBlock{c, d, a, b}