mul_inner_product.sage 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. load('share.sage')
  2. load('beaver.sage')
  3. import random
  4. import numpy as np
  5. party0_val = [1,2]
  6. party1_val = [2,4]
  7. source = Source(p)
  8. party0_random = [1,1]
  9. party1_random = [1,1]
  10. # additive share distribution, and communication of private values
  11. # party 0 shares
  12. alpha1_l = [AuthenticatedShare(party0_random[i], source, 0) for i in range(2)]
  13. beta1_l = [AuthenticatedShare(party1_random[i], source, 1) for i in range(2)]
  14. # party 1 shares
  15. alpha2_l = [AuthenticatedShare(party0_val[i] - party0_random[i], source, 0) for i in range(2)]
  16. beta2_l = [AuthenticatedShare(party1_val[i] - party1_random[i], source, 1) for i in range(2)]
  17. # party 0 c
  18. a1b1_l = [MultiplicationAuthenticatedShares(alpha1, beta1, source.triplet(0), 0) for alpha1, beta1 in zip(alpha1_l, beta1_l)]
  19. # party 1 c
  20. a2b2_l = [MultiplicationAuthenticatedShares(alpha2, beta2, source.triplet(1), 1) for alpha2, beta2 in zip(alpha2_l, beta2_l)]
  21. # party 0 de
  22. for a1b1 in a1b1_l:
  23. print('a1b1: d/e: {}/{}'.format(a1b1.d, a1b1.e))
  24. # party 1 de
  25. for a2b2 in a2b2_l:
  26. print('a2b2: d/e: {}/{}'.format(a2b2.d, a2b2.e))
  27. lhs_l = [a1b1.mul(a2b2.d, a2b2.e) for a1b1, a2b2 in zip(a1b1_l, a2b2_l)]
  28. rhs_l = [a2b2.mul(a1b1.d, a1b1.e) for a1b1, a2b2 in zip(a1b1_l, a2b2_l)]
  29. res = [lhs.authenticated_open(rhs) for lhs, rhs in zip(lhs_l, rhs_l)]
  30. print('c: {}'.format(sum(res)))
  31. assert (sum(res) == np.dot(party0_val,party1_val)), 'mul: {}, expected mul: {}'.format(res, party0_val*party1_val)