def setUp(self): # Deterministic PRNG for testing purposes seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" seed = bytes.fromhex(seed_hex) self.rng = core_utils.create_csprng(seed) self.msg = b'BANANA' r_hex = "296f910bde4530efe3533ed3b74475d6022364db2e57773207734b6daf547ac8" c_hex = "b60ebd5193252d22c771a7702724e9922662aae5f634494225cdd3a9e22f9826" self.r_golden = bytes.fromhex(r_hex) self.c_golden = bytes.fromhex(c_hex)
def setUp(self): # Deterministic PRNG for testing purposes seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" seed = bytes.fromhex(seed_hex) self.rng = core_utils.create_csprng(seed) r_hex = "e8a04212cc20520429d854a5bb02b51b4281e663c90a4a4ec0b505171f9bc26a" C_hex = "028fe6cafe6e6cef6c47be31cb449faa9495d22a6cb47e057b91c97d807882c439" self.r_golden = bytes.fromhex(r_hex) self.C_golden = bytes.fromhex(C_hex) with open("schnorr/commit.json", "r") as f: self.tv = json.load(f)
def setUp(self): # Deterministic PRNG for testing purposes seed = bytes.fromhex(seed_hex) self.rng = core_utils.create_csprng(seed) self.p = bytes.fromhex(p_hex) self.q = bytes.fromhex(q_hex) self.e = bytes.fromhex(e_hex) self.y = bytes.fromhex(y_hex) self.id = id_str.encode('utf-8') self.ad = bytes.fromhex(ad_hex) with open("factoring_zk/prove.json", "r") as f: self.tv = json.load(f) for vector in self.tv: process_tv(vector)
def test_1(self): """test_1 Test MPC ECDSA""" for i in range(1, 11): print(f"Test {i}") seed = os.urandom(16) rng = core_utils.create_csprng(seed) # Paillier keys paillier_pk1, paillier_sk1 = mpc.paillier_key_pair(rng) paillier_pk2, paillier_sk2 = mpc.paillier_key_pair(rng) # ECDSA keys PK1, W1 = mpc.mpc_ecdsa_key_pair_generate(rng) PK2, W2 = mpc.mpc_ecdsa_key_pair_generate(rng) # Gamma values GAMMAPT1, GAMMA1 = mpc.mpc_ecdsa_key_pair_generate(rng) GAMMAPT2, GAMMA2 = mpc.mpc_ecdsa_key_pair_generate(rng) # K values K1 = mpc.mpc_k_generate(rng) K2 = mpc.mpc_k_generate(rng) # Message M = b'test message' # ALPHA1 + BETA2 = K1 * GAMMA2 CA11 = mpc.mpc_mta_client1(rng, paillier_pk1, K1) CB12, BETA2 = mpc.mpc_mta_server(rng, paillier_pk1, GAMMA2, CA11) ALPHA1 = mpc.mpc_mta_client2(paillier_sk1, CB12) # ALPHA2 + BETA1 = K2 * GAMMA1 CA22 = mpc.mpc_mta_client1(rng, paillier_pk2, K2) CB21, BETA1 = mpc.mpc_mta_server(rng, paillier_pk2, GAMMA1, CA22) ALPHA2 = mpc.mpc_mta_client2(paillier_sk2, CB21) # sum = K1.GAMMA1 + alpha1 + beta1 SUM1 = mpc.mpc_sum_mta(K1, GAMMA1, ALPHA1, BETA1) # sum = K2.GAMMA2 + alpha2 + beta2 SUM2 = mpc.mpc_sum_mta(K2, GAMMA2, ALPHA2, BETA2) # Calculate the inverse of kgamma INVKGAMMA = mpc.mpc_invkgamma(SUM1, SUM2) # Calculate the R signature component rc, SIG_R, _ = mpc.mpc_r(INVKGAMMA, GAMMAPT1, GAMMAPT2) # ALPHA1 + BETA2 = K1 * W2 CA11 = mpc.mpc_mta_client1(rng, paillier_pk1, K1) CB12, BETA2 = mpc.mpc_mta_server(rng, paillier_pk1, W2, CA11) ALPHA1 = mpc.mpc_mta_client2(paillier_sk1, CB12) # ALPHA2 + BETA1 = K2 * W1 CA22 = mpc.mpc_mta_client1(rng, paillier_pk2, K2) CB21, BETA1 = mpc.mpc_mta_server(rng, paillier_pk2, W1, CA22) ALPHA2 = mpc.mpc_mta_client2(paillier_sk2, CB21) # sum = K1.W1 + alpha1 + beta1 SUM1 = mpc.mpc_sum_mta(K1, W1, ALPHA1, BETA1) # sum = K2.W2 + alpha2 + beta2 SUM2 = mpc.mpc_sum_mta(K2, W2, ALPHA2, BETA2) # Calculate the message hash HM = mpc.mpc_hash(M) # Calculate the S1 signature component rc, SIG_S1 = mpc.mpc_s(HM, SIG_R, K1, SUM1) # Calculate the S2 signature component rc, SIG_S2 = mpc.mpc_s(HM, SIG_R, K2, SUM2) # Sum S signature component SIG_S = mpc.mpc_sum_s(SIG_S1, SIG_S2) # Sum ECDSA public keys rc, PK = mpc.mpc_sum_pk(PK1, PK2) # Verify final signature rc = mpc.mpc_ecdsa_verify(HM, PK, SIG_R, SIG_S) self.assertEqual(rc, 0)
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from amcl import core_utils, factoring_zk seed_hex = "78d0fb6705ce77dee47d03eb5b9c5d30" p_hex = "e008507e09c24d756280f3d94912fb9ac16c0a8a1757ee01a350736acfc7f65880f87eca55d6680253383fc546d03fd9ebab7d8fa746455180888cb7c17edf58d3327296468e5ab736374bc9a0fa02606ed5d3a4a5fb1677891f87fbf3c655c3e0549a86b17b7ddce07c8f73e253105e59f5d3ed2c7ba5bdf8495df40ae71a7f" q_hex = "dbffe278edd44c2655714e5a4cc82e66e46063f9ab69df9d0ed20eb3d7f2d8c7d985df71c28707f32b961d160ca938e9cf909cd77c4f8c630aec34b67714cbfd4942d7147c509db131bc2d6a667eb30df146f64b710f8f5247848b0a75738a38772e31014fd63f0b769209928d586499616dcc90700b393156e12eea7e15a835" n_hex = "c0870b552afb6c8c09f79e39ad6ca17ca93085c2cd7a726ade69574961ff9ce8ad33c7dda2e0703a3b0010c2e5bb7552c74164ce8dd011d85e5969090df53fe10e39cbe530704da32ff07228a6b6da34a5929e8a231c3080d812dc6e93affd81682339a6aee192927c582da8941bebf46e13c4ea3918a1477951fa66d367e70d8551b1869316d48317e0702d7bce242a326000f3dc763c44eba2044a1df713a94c1339edd464b145dcadf94e6e61be73dc270c878e1a28be720df2209202d00e101c3b255b757eaf547acd863d51eb676b851511b3dadeda926714719dceddd3af7908893ae65f2b95ee5c4d36cc6862cbe6886a62d7c1e2d0db48c399a6d44b" uid = b"unique_user_identifier" if __name__ == "__main__": seed = bytes.fromhex(seed_hex) rng = core_utils.create_csprng(seed) p = bytes.fromhex(p_hex) q = bytes.fromhex(q_hex) n = bytes.fromhex(n_hex) ad = core_utils.generate_random(rng, 32) print("Example ZK Proof of Knowledge of factoring") print("Parameters") print(f"\tP = {p.hex()}") print(f"\tQ = {q.hex()}") print(f"\tN = {n.hex()}") print(f"\tID = {uid.decode('utf-8')}") print(f"\tAD = {ad.hex()}")