Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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))
        ]
Beispiel #4
0
 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)