| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- load('../mpc/curve.sage')
- load('proof.sage')
- load('transcript.sage')
- load('../mpc/beaver.sage')
- load('proof_mpc.sage')
- import gc
- ##
- n = 2
- Q = to_ec_shares_list([CurvePoint.generator()])
- Q1 = to_ec_shares_list([CurvePoint.random()])
- Q2 = [q - q1 for q, q1 in zip(Q, Q1)]
- H = to_ec_shares_list([CurvePoint.generator() for i in range(0,n)])
- H1 = to_ec_shares_list([CurvePoint.random() for i in range(0,n)])
- H2 = [h - h1 for h, h1 in zip(H, H1)]
- G = to_ec_shares_list([CurvePoint.generator() for i in range(0,n)])
- G1 = to_ec_shares_list([CurvePoint.random() for i in range(0,n)])
- G2 = [g - g1 for g, g1 in zip(G, G1)]
- assert sum(g1.authenticated_open(g2)==CurvePoint.generator() for g1, g2 in zip(G1, G2)) == n
- ## source
- source = Source(p)
- ## alpha
- party0_val = [1, 2] # a
- party1_val = [2, 4] # b
- party0_random = [1, 1]
- alpha1 = [AuthenticatedShare(party0_random[i], source, 0) for i in range(0,n)]
- alpha2 = [AuthenticatedShare(party0_val[i] - party0_random[i], source, 0) for i in range(0,n)]
- a_shares = [alpha1, alpha2]
- ## generators factors
- y_inv = K(1)
- G_factors = [K(1)]*n
- H_factors = [y_inv**i for i in range(0,n)]
- ##
- party_0_a_prime_shares = a_shares[0].copy()
- party_1_a_prime_shares = a_shares[1].copy()
- ##
- party_0_g_a_prime_shares = MSM(G1, party_0_a_prime_shares, source, 0)
- party_1_g_a_prime_shares = MSM(G2, party_1_a_prime_shares, source, 1)
- ## msm multiplication shares announcement for g_a_prime_shares
- party_0_g_a_prime_shares_de = [[party_0_g_a_prime_share.d, party_0_g_a_prime_share.e] for party_0_g_a_prime_share in party_0_g_a_prime_shares.point_scalars]
- party_1_g_a_prime_shares_de = [[party_1_g_a_prime_share.d, party_1_g_a_prime_share.e] for party_1_g_a_prime_share in party_1_g_a_prime_shares.point_scalars]
- party_0_g_a_prime_shares = party_0_g_a_prime_shares.msm(party_1_g_a_prime_shares_de)
- party_1_g_a_prime_shares = party_1_g_a_prime_shares.msm(party_0_g_a_prime_shares_de)
- g_a_prime = party_0_g_a_prime_shares.authenticated_open(party_1_g_a_prime_shares)
- #a_primes = [h*a for h, a in zip(H_factors, party0_val)]
- a_primes = party0_val.copy()
- expected_g_a_prime = sum([CurvePoint.generator() * a_prime for a_prime in a_primes])
- assert (expected_g_a_prime == g_a_prime), 'expected_g_a_prime: {}, g_a_prime: {}'.format(expected_g_a_prime, g_a_prime)
- ## beta
- party1_random = [1, 1]
- beta1 = [AuthenticatedShare(party1_random[i], source, 1) for i in range(0,n)]
- beta2 = [AuthenticatedShare(party1_val[i] - party1_random[i], source, 1) for i in range(0,n)]
- b_shares = [beta1, beta2]
- ##
- party_0_b_prime_shares = [b_share.mul_scalar(y) for b_share, y in zip(b_shares[0], H_factors)]
- party_1_b_prime_shares = [b_share.mul_scalar(y) for b_share, y in zip(b_shares[1], H_factors)]
- ## c shares
- my_c_shares = [MultiplicationAuthenticatedShares(a_share, b_share, source.triplet(0), 0) for a_share, b_share in zip(a_shares[0], b_shares[0])]
- their_c_shares = [MultiplicationAuthenticatedShares(peer_a_share, peer_b_share, source.triplet(1), 1) for peer_a_share, peer_b_share in zip(a_shares[1], b_shares[1])]
- party_0_c_shares = [my_c_share.mul(their_c_share.d, their_c_share.e) for my_c_share, their_c_share in zip(my_c_shares, their_c_shares)]
- party_0_c_share = [sum_shares(party_0_c_shares, source, 0)]
- party_0_q_c_shares = MSM(Q1, party_0_c_share, source, 0)
- party_1_c_shares = [their_c_share.mul(my_c_share.d, my_c_share.e) for my_c_share, their_c_share in zip(my_c_shares, their_c_shares)]
- party_1_c_share = [sum_shares(party_1_c_shares, source, 1)]
- party_1_q_c_shares = MSM(Q2, party_1_c_share, source, 1)
- c_shares = [party_0_c_share[0].authenticated_open(party_1_c_share[0])]
- print('c: {}'.format(c_shares[0]))
- assert(c_shares[0] == sum([a*b for a,b in zip(party0_val, party1_val)])), 'sum: {}'.format(sum([a*b for a,b in zip(party0_val, party1_val)]))
- party_0_h_b_prime_shares = MSM(H1, party_0_b_prime_shares, source, 0)
- party_1_h_b_prime_shares = MSM(H2, party_1_b_prime_shares, source, 1)
- ## msm multiplication shares announcement for g_b_prime_shares
- party_0_h_b_prime_shares_de = [[party_0_h_b_prime_share.d, party_0_h_b_prime_share.e] for party_0_h_b_prime_share in party_0_h_b_prime_shares.point_scalars]
- party_1_h_b_prime_shares_de = [[party_1_h_b_prime_share.d, party_1_h_b_prime_share.e] for party_1_h_b_prime_share in party_1_h_b_prime_shares.point_scalars]
- party_0_h_b_prime_shares = party_0_h_b_prime_shares.msm(party_1_h_b_prime_shares_de)
- party_1_h_b_prime_shares = party_1_h_b_prime_shares.msm(party_0_h_b_prime_shares_de)
- h_b_prime = party_0_h_b_prime_shares.authenticated_open(party_1_h_b_prime_shares)
- b_primes = [h*b for h, b in zip(H_factors, party1_val)]
- expected_h_b_prime = sum([CurvePoint.generator() * b_prime for b_prime in b_primes])
- assert (expected_h_b_prime == h_b_prime), 'expected_h_b_prime: {}, h_b_prime: {}'.format(expected_h_b_prime, h_b_prime)
- ## msm multiplication shares announcement for q_c_prime_shares
- party_0_q_c_shares_de = [[party_0_q_c_share.d, party_0_q_c_share.e] for party_0_q_c_share in party_0_q_c_shares.point_scalars]
- party_1_q_c_shares_de = [[party_1_q_c_share.d, party_1_q_c_share.e] for party_1_q_c_share in party_1_q_c_shares.point_scalars]
- party_0_q_c_shares_lhs = party_0_q_c_shares.msm(party_1_q_c_shares_de)
- party_1_q_c_shares_rhs = party_1_q_c_shares.msm(party_0_q_c_shares_de)
- q_c = party_0_q_c_shares_lhs.authenticated_open(party_1_q_c_shares_rhs)
- ## expected P
- expected_P = sum([g_a_prime, h_b_prime, q_c])
- truth_table = [2147917197054818871619776655514917967724810669246777137580480562218260377891, 1230877877612900447137853367185807507097371113825426166020962037710421986578, 1]
- print('g_a_prime: {}'.format(g_a_prime))
- print('h_b_prime: {}'.format(h_b_prime))
- print('q_c: {}'.format(q_c))
- assert expected_P[0] == truth_table[0] or expected_P[1] == truth_table[1], 'P: {}, truth_Table: {}'.format(expected_P, truth_table)
|