def fl_inv(y: bytes, kl: bytes): y_l = ByteUtils.getLeftPart(y) y_r = ByteUtils.getRightPart(y) kl_l = ByteUtils.getLeftPart(kl) kl_R = ByteUtils.getRightPart(kl) sqr_1 = (int.from_bytes(y_r, "little") | int.from_bytes(kl_R, "little")).to_bytes(4, "little") sqr_2 = ByteUtils.xor(sqr_1, y_l) sqr_3 = (int.from_bytes(sqr_2, "little") & int.from_bytes(kl_l, "little")).to_bytes(4, "little") sqr_4 = ByteUtils.rol(sqr_3, 1) sqr_5 = ByteUtils.xor(sqr_4, y_r) return sqr_2 + sqr_5
def fl_func(x: bytes, kl: bytes): x_l = ByteUtils.getLeftPart(x) x_r = ByteUtils.getRightPart(x) kl_l = ByteUtils.getLeftPart(kl) kl_r = ByteUtils.getRightPart(kl) sqr_1 = int( int.from_bytes(kl_l, "little") & int.from_bytes(x_l, "little")).to_bytes(4, "little") sqr_2 = ByteUtils.rol(sqr_1, 1) sqr_3 = ByteUtils.xor(sqr_2, x_r) sqr_4 = (int.from_bytes(sqr_3, "little") | int.from_bytes(kl_r, "little")).to_bytes(4, "little") sqr_5 = ByteUtils.xor(sqr_4, x_l) return sqr_5 + sqr_3
def init_key_k(key: bytes): key_q = Key.q_key(key) Camelia.k_i = [ ByteUtils.getLeftPart(key_q), ByteUtils.getRightPart(key_q), ByteUtils.getLeftPart(ByteUtils.rol(key, 15)), ByteUtils.getRightPart(ByteUtils.rol(key, 15)), ByteUtils.getLeftPart(ByteUtils.rol(key_q, 15)), ByteUtils.getRightPart(ByteUtils.rol(key_q, 15)), ByteUtils.getLeftPart(ByteUtils.rol(key, 45)), ByteUtils.getRightPart(ByteUtils.rol(key, 45)), ByteUtils.getLeftPart(ByteUtils.rol(key_q, 45)), ByteUtils.getRightPart(ByteUtils.rol(key, 60)), ByteUtils.getLeftPart(ByteUtils.rol(key_q, 60)), ByteUtils.getRightPart(ByteUtils.rol(key_q, 60)), ByteUtils.getLeftPart(ByteUtils.rol(key, 94)), ByteUtils.getRightPart(ByteUtils.rol(key, 94)), ByteUtils.getLeftPart(ByteUtils.rol(key_q, 94)), ByteUtils.getRightPart(ByteUtils.rol(key_q, 94)), ByteUtils.getLeftPart(ByteUtils.rol(key, 111)), ByteUtils.getRightPart(ByteUtils.rol(key, 111)), ] Camelia.kl_i = [ ByteUtils.getLeftPart(ByteUtils.rol(key_q, 30)), ByteUtils.getRightPart(ByteUtils.rol(key_q, 30)), ByteUtils.getLeftPart(ByteUtils.rol(key, 77)), ByteUtils.getRightPart(ByteUtils.rol(key, 77)), ] Camelia.kw_i = [ ByteUtils.getLeftPart(key), ByteUtils.getRightPart(key), ByteUtils.getLeftPart(ByteUtils.rol(key_q, 111)), ByteUtils.getRightPart(ByteUtils.rol(key_q, 111)) ]
def test_rol(self): self.assertEqual(self.res_rol, ByteUtils.rol(self.bytes_, self.count_rol))
def s4(x: bytes): rol_x = ByteUtils.rol(x, 1) s1_bytes = FFunc.s1_arr[int.from_bytes(rol_x, "little")].to_bytes( 1, "little") return s1_bytes
def s2(x: bytes): s1_bytes = FFunc.s1_arr[int.from_bytes(x, "little")].to_bytes( 1, "little") return ByteUtils.rol(s1_bytes, 1)