expected_p.sage 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. load('../mpc/curve.sage')
  2. load('proof.sage')
  3. load('transcript.sage')
  4. load('../mpc/beaver.sage')
  5. load('proof_mpc.sage')
  6. import gc
  7. ##
  8. n = 2
  9. Q = to_ec_shares_list([CurvePoint.generator()])
  10. Q1 = to_ec_shares_list([CurvePoint.random()])
  11. Q2 = [q - q1 for q, q1 in zip(Q, Q1)]
  12. H = to_ec_shares_list([CurvePoint.generator() for i in range(0,n)])
  13. H1 = to_ec_shares_list([CurvePoint.random() for i in range(0,n)])
  14. H2 = [h - h1 for h, h1 in zip(H, H1)]
  15. G = to_ec_shares_list([CurvePoint.generator() for i in range(0,n)])
  16. G1 = to_ec_shares_list([CurvePoint.random() for i in range(0,n)])
  17. G2 = [g - g1 for g, g1 in zip(G, G1)]
  18. assert sum(g1.authenticated_open(g2)==CurvePoint.generator() for g1, g2 in zip(G1, G2)) == n
  19. ## source
  20. source = Source(p)
  21. ## alpha
  22. party0_val = [1, 2] # a
  23. party1_val = [2, 4] # b
  24. party0_random = [1, 1]
  25. alpha1 = [AuthenticatedShare(party0_random[i], source, 0) for i in range(0,n)]
  26. alpha2 = [AuthenticatedShare(party0_val[i] - party0_random[i], source, 0) for i in range(0,n)]
  27. a_shares = [alpha1, alpha2]
  28. ## generators factors
  29. y_inv = K(1)
  30. G_factors = [K(1)]*n
  31. H_factors = [y_inv**i for i in range(0,n)]
  32. ##
  33. party_0_a_prime_shares = a_shares[0].copy()
  34. party_1_a_prime_shares = a_shares[1].copy()
  35. ##
  36. party_0_g_a_prime_shares = MSM(G1, party_0_a_prime_shares, source, 0)
  37. party_1_g_a_prime_shares = MSM(G2, party_1_a_prime_shares, source, 1)
  38. ## msm multiplication shares announcement for g_a_prime_shares
  39. 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]
  40. 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]
  41. party_0_g_a_prime_shares = party_0_g_a_prime_shares.msm(party_1_g_a_prime_shares_de)
  42. party_1_g_a_prime_shares = party_1_g_a_prime_shares.msm(party_0_g_a_prime_shares_de)
  43. g_a_prime = party_0_g_a_prime_shares.authenticated_open(party_1_g_a_prime_shares)
  44. #a_primes = [h*a for h, a in zip(H_factors, party0_val)]
  45. a_primes = party0_val.copy()
  46. expected_g_a_prime = sum([CurvePoint.generator() * a_prime for a_prime in a_primes])
  47. assert (expected_g_a_prime == g_a_prime), 'expected_g_a_prime: {}, g_a_prime: {}'.format(expected_g_a_prime, g_a_prime)
  48. ## beta
  49. party1_random = [1, 1]
  50. beta1 = [AuthenticatedShare(party1_random[i], source, 1) for i in range(0,n)]
  51. beta2 = [AuthenticatedShare(party1_val[i] - party1_random[i], source, 1) for i in range(0,n)]
  52. b_shares = [beta1, beta2]
  53. ##
  54. party_0_b_prime_shares = [b_share.mul_scalar(y) for b_share, y in zip(b_shares[0], H_factors)]
  55. party_1_b_prime_shares = [b_share.mul_scalar(y) for b_share, y in zip(b_shares[1], H_factors)]
  56. ## c shares
  57. 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])]
  58. 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])]
  59. 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)]
  60. party_0_c_share = [sum_shares(party_0_c_shares, source, 0)]
  61. party_0_q_c_shares = MSM(Q1, party_0_c_share, source, 0)
  62. 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)]
  63. party_1_c_share = [sum_shares(party_1_c_shares, source, 1)]
  64. party_1_q_c_shares = MSM(Q2, party_1_c_share, source, 1)
  65. c_shares = [party_0_c_share[0].authenticated_open(party_1_c_share[0])]
  66. print('c: {}'.format(c_shares[0]))
  67. 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)]))
  68. party_0_h_b_prime_shares = MSM(H1, party_0_b_prime_shares, source, 0)
  69. party_1_h_b_prime_shares = MSM(H2, party_1_b_prime_shares, source, 1)
  70. ## msm multiplication shares announcement for g_b_prime_shares
  71. 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]
  72. 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]
  73. party_0_h_b_prime_shares = party_0_h_b_prime_shares.msm(party_1_h_b_prime_shares_de)
  74. party_1_h_b_prime_shares = party_1_h_b_prime_shares.msm(party_0_h_b_prime_shares_de)
  75. h_b_prime = party_0_h_b_prime_shares.authenticated_open(party_1_h_b_prime_shares)
  76. b_primes = [h*b for h, b in zip(H_factors, party1_val)]
  77. expected_h_b_prime = sum([CurvePoint.generator() * b_prime for b_prime in b_primes])
  78. assert (expected_h_b_prime == h_b_prime), 'expected_h_b_prime: {}, h_b_prime: {}'.format(expected_h_b_prime, h_b_prime)
  79. ## msm multiplication shares announcement for q_c_prime_shares
  80. 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]
  81. 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]
  82. party_0_q_c_shares_lhs = party_0_q_c_shares.msm(party_1_q_c_shares_de)
  83. party_1_q_c_shares_rhs = party_1_q_c_shares.msm(party_0_q_c_shares_de)
  84. q_c = party_0_q_c_shares_lhs.authenticated_open(party_1_q_c_shares_rhs)
  85. ## expected P
  86. expected_P = sum([g_a_prime, h_b_prime, q_c])
  87. truth_table = [2147917197054818871619776655514917967724810669246777137580480562218260377891, 1230877877612900447137853367185807507097371113825426166020962037710421986578, 1]
  88. print('g_a_prime: {}'.format(g_a_prime))
  89. print('h_b_prime: {}'.format(h_b_prime))
  90. print('q_c: {}'.format(q_c))
  91. assert expected_P[0] == truth_table[0] or expected_P[1] == truth_table[1], 'P: {}, truth_Table: {}'.format(expected_P, truth_table)