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}

Uses (10)

Used by (8)