def test_mult(): key_cipher = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) v1 = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) v2 = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) sub = Master.get_one_sub(key_cipher) shares1 = Master.get_shares(v1, sub) shares2 = Master.get_shares(v2, sub) sub.initShares(shares1) for s, mini in enumerate(sub.minicircuits): mini.state2 = shares2[s] sub.multiply(inputs1=[mini.state2 for mini in sub.minicircuits]) reconstruct = Master.reconstructShares(sub) if not np.array_equal(v1 * v2, reconstruct): return 0 else: return 1
def test_addKey(): key_cipher = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) v = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) sub = Master.get_one_sub(key_cipher) shares = Master.get_shares(v, sub) sub.initShares(shares) sub.addKey(0) reconstruct = Master.reconstructShares(sub) if not np.array_equal(v + key_cipher, reconstruct): return 0 else: return 1
def test_Sbox(): key_cipher = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) v = np.array([[GF2int(randint(0, 255)) for i in range(4)] for j in range(4)], dtype=GF2int) sub = Master.get_one_sub(key_cipher) shares = Master.get_shares(v, sub) sub.initShares(shares) sub.SubBytes() reconstruct = Master.reconstructShares(sub) if not np.array_equal(np.array(sbox[np.array(v, dtype=int)], dtype=GF2int), reconstruct): return 0 else: return 1