import Base import ../../../spec/crypto/aes/aes.bend as S import ../../lib/logic.bend as L # Generated by tools/generators/aes/sbox.py. FIPS 197 section 4.4: the # multiplicative inverse b of a nonzero byte a satisfies a * b = {01}; the # specification computes it as a^254 (spec/crypto/aes/aes.bend). Proved here # for every U32 (both functions read only its low 8 bits): one closed # evaluation of 13 field products per byte value. law inverse_unit_bits: for +b0: Bool for +b1: Bool for +b2: Bool for +b3: Bool for +b4: Bool for +b5: Bool for +b6: Bool for +b7: Bool for +b8: Bool for +b9: Bool for +b10: Bool for +b11: Bool for +b12: Bool for +b13: Bool for +b14: Bool for +b15: Bool for +b16: Bool for +b17: Bool for +b18: Bool for +b19: Bool for +b20: Bool for +b21: Bool for +b22: Bool for +b23: Bool for +b24: Bool for +b25: Bool for +b26: Bool for +b27: Bool for +b28: Bool for +b29: Bool for +b30: Bool for +b31: Bool for +h: {U32.is_eq(U32.and(255, U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}), 0) == False{} : Bool} {S.mul(U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, S.inverse(U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})) == 1 : U32} def inverse_unit_bits(b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, h): match b0 b1 b2 b3 b4 b5 b6 b7: case False{} False{} False{} False{} False{} False{} False{} False{}: Empty.absurd({S.mul(U32{WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, S.inverse(U32{WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{False{}, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})) == 1 : U32}, L.true_false(h)) case True{} False{} False{} False{} False{} False{} False{} False{}: {==} case False{} True{} False{} False{} False{} False{} False{} False{}: {==} case True{} True{} False{} False{} False{} False{} False{} False{}: {==} case False{} False{} True{} False{} False{} False{} False{} False{}: {==} case True{} False{} True{} False{} False{} False{} False{} False{}: {==} case False{} True{} True{} False{} False{} False{} False{} False{}: {==} case True{} True{} True{} False{} False{} False{} False{} False{}: {==} case False{} False{} False{} True{} False{} False{} False{} False{}: {==} case True{} False{} False{} True{} False{} False{} False{} False{}: {==} case False{} True{} False{} True{} False{} False{} False{} False{}: {==} case True{} True{} False{} True{} False{} False{} False{} False{}: {==} case False{} False{} True{} True{} False{} False{} False{} False{}: {==} case True{} False{} True{} True{} False{} False{} False{} False{}: {==} case False{} True{} True{} True{} False{} False{} False{} False{}: {==} case True{} True{} True{} True{} False{} False{} False{} False{}: {==} case False{} False{} False{} False{} True{} False{} False{} False{}: {==} case True{} False{} False{} False{} True{} False{} False{} False{}: {==} case False{} True{} False{} False{} True{} False{} False{} False{}: {==} case True{} True{} False{} False{} True{} False{} False{} False{}: {==} case False{} False{} True{} False{} True{} False{} False{} False{}: {==} case True{} False{} True{} False{} True{} False{} False{} False{}: {==} case False{} True{} True{} False{} True{} False{} False{} False{}: {==} case True{} True{} True{} False{} True{} False{} False{} False{}: {==} case False{} False{} False{} True{} True{} False{} False{} False{}: {==} case True{} False{} False{} True{} True{} False{} False{} False{}: {==} case False{} True{} False{} True{} True{} False{} False{} False{}: {==} case True{} True{} False{} True{} True{} False{} False{} False{}: {==} case False{} False{} True{} True{} True{} False{} False{} False{}: {==} case True{} False{} True{} True{} True{} False{} False{} False{}: {==} case False{} True{} True{} True{} True{} False{} False{} False{}: {==} case True{} True{} True{} True{} True{} False{} False{} False{}: {==} case False{} False{} False{} False{} False{} True{} False{} False{}: {==} case True{} False{} False{} False{} False{} True{} False{} False{}: {==} case False{} True{} False{} False{} False{} True{} False{} False{}: {==} case True{} True{} False{} False{} False{} True{} False{} False{}: {==} case False{} False{} True{} False{} False{} True{} False{} False{}: {==} case True{} False{} True{} False{} False{} True{} False{} False{}: {==} case False{} True{} True{} False{} False{} True{} False{} False{}: {==} case True{} True{} True{} False{} False{} True{} False{} False{}: {==} case False{} False{} False{} True{} False{} True{} False{} False{}: {==} case True{} False{} False{} True{} False{} True{} False{} False{}: {==} case False{} True{} False{} True{} False{} True{} False{} False{}: {==} case True{} True{} False{} True{} False{} True{} False{} False{}: {==} case False{} False{} True{} True{} False{} True{} False{} False{}: {==} case True{} False{} True{} True{} False{} True{} False{} False{}: {==} case False{} True{} True{} True{} False{} True{} False{} False{}: {==} case True{} True{} True{} True{} False{} True{} False{} False{}: {==} case False{} False{} False{} False{} True{} True{} False{} False{}: {==} case True{} False{} False{} False{} True{} True{} False{} False{}: {==} case False{} True{} False{} False{} True{} True{} False{} False{}: {==} case True{} True{} False{} False{} True{} True{} False{} False{}: {==} case False{} False{} True{} False{} True{} True{} False{} False{}: {==} case True{} False{} True{} False{} True{} True{} False{} False{}: {==} case False{} True{} True{} False{} True{} True{} False{} False{}: {==} case True{} True{} True{} False{} True{} True{} False{} False{}: {==} case False{} False{} False{} True{} True{} True{} False{} False{}: {==} case True{} False{} False{} True{} True{} True{} False{} False{}: {==} case False{} True{} False{} True{} True{} True{} False{} False{}: {==} case True{} True{} False{} True{} True{} True{} False{} False{}: {==} case False{} False{} True{} True{} True{} True{} False{} False{}: {==} case True{} False{} True{} True{} True{} True{} False{} False{}: {==} case False{} True{} True{} True{} True{} True{} False{} False{}: {==} case True{} True{} True{} True{} True{} True{} False{} False{}: {==} case False{} False{} False{} False{} False{} False{} True{} False{}: {==} case True{} False{} False{} False{} False{} False{} True{} False{}: {==} case False{} True{} False{} False{} False{} False{} True{} False{}: {==} case True{} True{} False{} False{} False{} False{} True{} False{}: {==} case False{} False{} True{} False{} False{} False{} True{} False{}: {==} case True{} False{} True{} False{} False{} False{} True{} False{}: {==} case False{} True{} True{} False{} False{} False{} True{} False{}: {==} case True{} True{} True{} False{} False{} False{} True{} False{}: {==} case False{} False{} False{} True{} False{} False{} True{} False{}: {==} case True{} False{} False{} True{} False{} False{} True{} False{}: {==} case False{} True{} False{} True{} False{} False{} True{} False{}: {==} case True{} True{} False{} True{} False{} False{} True{} False{}: {==} case False{} False{} True{} True{} False{} False{} True{} False{}: {==} case True{} False{} True{} True{} False{} False{} True{} False{}: {==} case False{} True{} True{} True{} False{} False{} True{} False{}: {==} case True{} True{} True{} True{} False{} False{} True{} False{}: {==} case False{} False{} False{} False{} True{} False{} True{} False{}: {==} case True{} False{} False{} False{} True{} False{} True{} False{}: {==} case False{} True{} False{} False{} True{} False{} True{} False{}: {==} case True{} True{} False{} False{} True{} False{} True{} False{}: {==} case False{} False{} True{} False{} True{} False{} True{} False{}: {==} case True{} False{} True{} False{} True{} False{} True{} False{}: {==} case False{} True{} True{} False{} True{} False{} True{} False{}: {==} case True{} True{} True{} False{} True{} False{} True{} False{}: {==} case False{} False{} False{} True{} True{} False{} True{} False{}: {==} case True{} False{} False{} True{} True{} False{} True{} False{}: {==} case False{} True{} False{} True{} True{} False{} True{} False{}: {==} case True{} True{} False{} True{} True{} False{} True{} False{}: {==} case False{} False{} True{} True{} True{} False{} True{} False{}: {==} case True{} False{} True{} True{} True{} False{} True{} False{}: {==} case False{} True{} True{} True{} True{} False{} True{} False{}: {==} case True{} True{} True{} True{} True{} False{} True{} False{}: {==} case False{} False{} False{} False{} False{} True{} True{} False{}: {==} case True{} False{} False{} False{} False{} True{} True{} False{}: {==} case False{} True{} False{} False{} False{} True{} True{} False{}: {==} case True{} True{} False{} False{} False{} True{} True{} False{}: {==} case False{} False{} True{} False{} False{} True{} True{} False{}: {==} case True{} False{} True{} False{} False{} True{} True{} False{}: {==} case False{} True{} True{} False{} False{} True{} True{} False{}: {==} case True{} True{} True{} False{} False{} True{} True{} False{}: {==} case False{} False{} False{} True{} False{} True{} True{} False{}: {==} case True{} False{} False{} True{} False{} True{} True{} False{}: {==} case False{} True{} False{} True{} False{} True{} True{} False{}: {==} case True{} True{} False{} True{} False{} True{} True{} False{}: {==} case False{} False{} True{} True{} False{} True{} True{} False{}: {==} case True{} False{} True{} True{} False{} True{} True{} False{}: {==} case False{} True{} True{} True{} False{} True{} True{} False{}: {==} case True{} True{} True{} True{} False{} True{} True{} False{}: {==} case False{} False{} False{} False{} True{} True{} True{} False{}: {==} case True{} False{} False{} False{} True{} True{} True{} False{}: {==} case False{} True{} False{} False{} True{} True{} True{} False{}: {==} case True{} True{} False{} False{} True{} True{} True{} False{}: {==} case False{} False{} True{} False{} True{} True{} True{} False{}: {==} case True{} False{} True{} False{} True{} True{} True{} False{}: {==} case False{} True{} True{} False{} True{} True{} True{} False{}: {==} case True{} True{} True{} False{} True{} True{} True{} False{}: {==} case False{} False{} False{} True{} True{} True{} True{} False{}: {==} case True{} False{} False{} True{} True{} True{} True{} False{}: {==} case False{} True{} False{} True{} True{} True{} True{} False{}: {==} case True{} True{} False{} True{} True{} True{} True{} False{}: {==} case False{} False{} True{} True{} True{} True{} True{} False{}: {==} case True{} False{} True{} True{} True{} True{} True{} False{}: {==} case False{} True{} True{} True{} True{} True{} True{} False{}: {==} case True{} True{} True{} True{} True{} True{} True{} False{}: {==} case False{} False{} False{} False{} False{} False{} False{} True{}: {==} case True{} False{} False{} False{} False{} False{} False{} True{}: {==} case False{} True{} False{} False{} False{} False{} False{} True{}: {==} case True{} True{} False{} False{} False{} False{} False{} True{}: {==} case False{} False{} True{} False{} False{} False{} False{} True{}: {==} case True{} False{} True{} False{} False{} False{} False{} True{}: {==} case False{} True{} True{} False{} False{} False{} False{} True{}: {==} case True{} True{} True{} False{} False{} False{} False{} True{}: {==} case False{} False{} False{} True{} False{} False{} False{} True{}: {==} case True{} False{} False{} True{} False{} False{} False{} True{}: {==} case False{} True{} False{} True{} False{} False{} False{} True{}: {==} case True{} True{} False{} True{} False{} False{} False{} True{}: {==} case False{} False{} True{} True{} False{} False{} False{} True{}: {==} case True{} False{} True{} True{} False{} False{} False{} True{}: {==} case False{} True{} True{} True{} False{} False{} False{} True{}: {==} case True{} True{} True{} True{} False{} False{} False{} True{}: {==} case False{} False{} False{} False{} True{} False{} False{} True{}: {==} case True{} False{} False{} False{} True{} False{} False{} True{}: {==} case False{} True{} False{} False{} True{} False{} False{} True{}: {==} case True{} True{} False{} False{} True{} False{} False{} True{}: {==} case False{} False{} True{} False{} True{} False{} False{} True{}: {==} case True{} False{} True{} False{} True{} False{} False{} True{}: {==} case False{} True{} True{} False{} True{} False{} False{} True{}: {==} case True{} True{} True{} False{} True{} False{} False{} True{}: {==} case False{} False{} False{} True{} True{} False{} False{} True{}: {==} case True{} False{} False{} True{} True{} False{} False{} True{}: {==} case False{} True{} False{} True{} True{} False{} False{} True{}: {==} case True{} True{} False{} True{} True{} False{} False{} True{}: {==} case False{} False{} True{} True{} True{} False{} False{} True{}: {==} case True{} False{} True{} True{} True{} False{} False{} True{}: {==} case False{} True{} True{} True{} True{} False{} False{} True{}: {==} case True{} True{} True{} True{} True{} False{} False{} True{}: {==} case False{} False{} False{} False{} False{} True{} False{} True{}: {==} case True{} False{} False{} False{} False{} True{} False{} True{}: {==} case False{} True{} False{} False{} False{} True{} False{} True{}: {==} case True{} True{} False{} False{} False{} True{} False{} True{}: {==} case False{} False{} True{} False{} False{} True{} False{} True{}: {==} case True{} False{} True{} False{} False{} True{} False{} True{}: {==} case False{} True{} True{} False{} False{} True{} False{} True{}: {==} case True{} True{} True{} False{} False{} True{} False{} True{}: {==} case False{} False{} False{} True{} False{} True{} False{} True{}: {==} case True{} False{} False{} True{} False{} True{} False{} True{}: {==} case False{} True{} False{} True{} False{} True{} False{} True{}: {==} case True{} True{} False{} True{} False{} True{} False{} True{}: {==} case False{} False{} True{} True{} False{} True{} False{} True{}: {==} case True{} False{} True{} True{} False{} True{} False{} True{}: {==} case False{} True{} True{} True{} False{} True{} False{} True{}: {==} case True{} True{} True{} True{} False{} True{} False{} True{}: {==} case False{} False{} False{} False{} True{} True{} False{} True{}: {==} case True{} False{} False{} False{} True{} True{} False{} True{}: {==} case False{} True{} False{} False{} True{} True{} False{} True{}: {==} case True{} True{} False{} False{} True{} True{} False{} True{}: {==} case False{} False{} True{} False{} True{} True{} False{} True{}: {==} case True{} False{} True{} False{} True{} True{} False{} True{}: {==} case False{} True{} True{} False{} True{} True{} False{} True{}: {==} case True{} True{} True{} False{} True{} True{} False{} True{}: {==} case False{} False{} False{} True{} True{} True{} False{} True{}: {==} case True{} False{} False{} True{} True{} True{} False{} True{}: {==} case False{} True{} False{} True{} True{} True{} False{} True{}: {==} case True{} True{} False{} True{} True{} True{} False{} True{}: {==} case False{} False{} True{} True{} True{} True{} False{} True{}: {==} case True{} False{} True{} True{} True{} True{} False{} True{}: {==} case False{} True{} True{} True{} True{} True{} False{} True{}: {==} case True{} True{} True{} True{} True{} True{} False{} True{}: {==} case False{} False{} False{} False{} False{} False{} True{} True{}: {==} case True{} False{} False{} False{} False{} False{} True{} True{}: {==} case False{} True{} False{} False{} False{} False{} True{} True{}: {==} case True{} True{} False{} False{} False{} False{} True{} True{}: {==} case False{} False{} True{} False{} False{} False{} True{} True{}: {==} case True{} False{} True{} False{} False{} False{} True{} True{}: {==} case False{} True{} True{} False{} False{} False{} True{} True{}: {==} case True{} True{} True{} False{} False{} False{} True{} True{}: {==} case False{} False{} False{} True{} False{} False{} True{} True{}: {==} case True{} False{} False{} True{} False{} False{} True{} True{}: {==} case False{} True{} False{} True{} False{} False{} True{} True{}: {==} case True{} True{} False{} True{} False{} False{} True{} True{}: {==} case False{} False{} True{} True{} False{} False{} True{} True{}: {==} case True{} False{} True{} True{} False{} False{} True{} True{}: {==} case False{} True{} True{} True{} False{} False{} True{} True{}: {==} case True{} True{} True{} True{} False{} False{} True{} True{}: {==} case False{} False{} False{} False{} True{} False{} True{} True{}: {==} case True{} False{} False{} False{} True{} False{} True{} True{}: {==} case False{} True{} False{} False{} True{} False{} True{} True{}: {==} case True{} True{} False{} False{} True{} False{} True{} True{}: {==} case False{} False{} True{} False{} True{} False{} True{} True{}: {==} case True{} False{} True{} False{} True{} False{} True{} True{}: {==} case False{} True{} True{} False{} True{} False{} True{} True{}: {==} case True{} True{} True{} False{} True{} False{} True{} True{}: {==} case False{} False{} False{} True{} True{} False{} True{} True{}: {==} case True{} False{} False{} True{} True{} False{} True{} True{}: {==} case False{} True{} False{} True{} True{} False{} True{} True{}: {==} case True{} True{} False{} True{} True{} False{} True{} True{}: {==} case False{} False{} True{} True{} True{} False{} True{} True{}: {==} case True{} False{} True{} True{} True{} False{} True{} True{}: {==} case False{} True{} True{} True{} True{} False{} True{} True{}: {==} case True{} True{} True{} True{} True{} False{} True{} True{}: {==} case False{} False{} False{} False{} False{} True{} True{} True{}: {==} case True{} False{} False{} False{} False{} True{} True{} True{}: {==} case False{} True{} False{} False{} False{} True{} True{} True{}: {==} case True{} True{} False{} False{} False{} True{} True{} True{}: {==} case False{} False{} True{} False{} False{} True{} True{} True{}: {==} case True{} False{} True{} False{} False{} True{} True{} True{}: {==} case False{} True{} True{} False{} False{} True{} True{} True{}: {==} case True{} True{} True{} False{} False{} True{} True{} True{}: {==} case False{} False{} False{} True{} False{} True{} True{} True{}: {==} case True{} False{} False{} True{} False{} True{} True{} True{}: {==} case False{} True{} False{} True{} False{} True{} True{} True{}: {==} case True{} True{} False{} True{} False{} True{} True{} True{}: {==} case False{} False{} True{} True{} False{} True{} True{} True{}: {==} case True{} False{} True{} True{} False{} True{} True{} True{}: {==} case False{} True{} True{} True{} False{} True{} True{} True{}: {==} case True{} True{} True{} True{} False{} True{} True{} True{}: {==} case False{} False{} False{} False{} True{} True{} True{} True{}: {==} case True{} False{} False{} False{} True{} True{} True{} True{}: {==} case False{} True{} False{} False{} True{} True{} True{} True{}: {==} case True{} True{} False{} False{} True{} True{} True{} True{}: {==} case False{} False{} True{} False{} True{} True{} True{} True{}: {==} case True{} False{} True{} False{} True{} True{} True{} True{}: {==} case False{} True{} True{} False{} True{} True{} True{} True{}: {==} case True{} True{} True{} False{} True{} True{} True{} True{}: {==} case False{} False{} False{} True{} True{} True{} True{} True{}: {==} case True{} False{} False{} True{} True{} True{} True{} True{}: {==} case False{} True{} False{} True{} True{} True{} True{} True{}: {==} case True{} True{} False{} True{} True{} True{} True{} True{}: {==} case False{} False{} True{} True{} True{} True{} True{} True{}: {==} case True{} False{} True{} True{} True{} True{} True{} True{}: {==} case False{} True{} True{} True{} True{} True{} True{} True{}: {==} case True{} True{} True{} True{} True{} True{} True{} True{}: {==} law inverse_unit: for +x: U32 for +h: {U32.is_eq(U32.and(255, x), 0) == False{} : Bool} {S.mul(x, S.inverse(x)) == 1 : U32} def inverse_unit(x, h): match x: case U32{WCon{b0, WCon{b1, WCon{b2, WCon{b3, WCon{b4, WCon{b5, WCon{b6, WCon{b7, WCon{b8, WCon{b9, WCon{b10, WCon{b11, WCon{b12, WCon{b13, WCon{b14, WCon{b15, WCon{b16, WCon{b17, WCon{b18, WCon{b19, WCon{b20, WCon{b21, WCon{b22, WCon{b23, WCon{b24, WCon{b25, WCon{b26, WCon{b27, WCon{b28, WCon{b29, WCon{b30, WCon{b31, WNil{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}: inverse_unit_bits(b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, h) law inverse_zero: {S.inverse(0) == 0 : U32} def inverse_zero(): {==}