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# the step undone
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}

Uses (10)

Used by (8)