Esempio n. 1
0
    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)
Esempio n. 4
0
    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()}")