def tf_roundd

bend-osdev-legacy-ciphers@0.1.0.0 · PROOF.bend:434

import bend-osdev-legacy-ciphers@0.1.0.0/PROOF.bend as PROOF
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
import bend-osdev-legacy-ciphers@0.1.0.0/twofish.bend as F

434def tf_roundd(+tb: F.LcTfTabs, +sk: List<&2, U32>, +ka: U32, +kb: U32, s: M.CmBlock) -> {s == F.tf.op(F.LcTfRound{tb, sk, ka, kb}, F.tf.unop(F.LcTfRound{tb, sk, ka, kb}, s)) : M.CmBlock}:
435  match s:
436    case M.CmBlock{+a, +b, +c, +d}:
437      %u32_xx(L.lc.rotl1.bits(a), F.tf.f0(F.tf.f(tb, sk, c, d, ka, kb))) : {M.CmBlock{a, b, c, d} == M.CmBlock{L.lc.rotl31.bits(_), U32.xor(L.lc.rotl1.bits(L.lc.rotl31.bits(U32.xor(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))))), F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))), c, d} : M.CmBlock}
438      %rot_31_1(a) : {M.CmBlock{a, b, c, d} == M.CmBlock{_, U32.xor(L.lc.rotl1.bits(L.lc.rotl31.bits(U32.xor(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))))), F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))), c, d} : M.CmBlock}
439      %rot_1_31(U32.xor(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb)))) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, U32.xor(_, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))), c, d} : M.CmBlock}
440      %u32_xx(b, F.tf.f1(F.tf.f(tb, sk, c, d, ka, kb))) : {M.CmBlock{a, b, c, d} == M.CmBlock{a, _, c, d} : M.CmBlock}
441      {==}

Uses (16)

Used by (1)