def tf.unop
bend-osdev-legacy-ciphers@0.1.0.0 · twofish.bend:204
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
204
205def tf.unop(o: LcTfOp, s: M.CmBlock) -> M.CmBlock:
206 match o:
207 case LcTfBswap{}:
208 match s:
209 case M.CmBlock{a, b, c, d}:
210 M.CmBlock{L.lc.bswap.bits(a), L.lc.bswap.bits(b), L.lc.bswap.bits(c), L.lc.bswap.bits(d)}
211 case LcTfWhite{k}:
212 M.CmBlock.xor(s, k)
213 case LcTfRound{tb, sk, ka, kb}:
214 match s:
215 case M.CmBlock{a, b, +c, +d}:
216 +f = tf.f(tb, sk, c, d, ka, kb)
217 M.CmBlock{c, d, U32.xor(L.lc.rotl1.bits(a), tf.f0(f)), L.lc.rotl31.bits(U32.xor(b, tf.f1(f)))}
218 case LcTfSwap{}:
219 match s:
220 case M.CmBlock{a, b, c, d}:
221 M.CmBlock{c, d, a, b}