spdz.sage 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. load('share.sage')
  2. load('beaver.sage')
  3. from random import randint
  4. party0_val = 3
  5. party1_val = 22
  6. public_scalar = 2
  7. source = Source(p)
  8. # additive share distribution, and communication of private values
  9. party0_random = randint(0,p)
  10. alpha1 = AuthenticatedShare(party0_random, source, 0)
  11. alpha2 = AuthenticatedShare(party0_val - party0_random, source, 1)
  12. assert (alpha1.authenticated_open(alpha2) == party0_val)
  13. party1_random = randint(0,p)
  14. beta1 = AuthenticatedShare(party1_random, source, 1)
  15. beta2 = AuthenticatedShare(party1_val - party1_random, source, 1)
  16. assert (beta1.authenticated_open(beta2) == party1_val)
  17. # mul_scalar by public scalar
  18. mul_left_share = alpha1.mul_scalar(public_scalar)
  19. mul_right_share = alpha2.mul_scalar(public_scalar)
  20. assert (mul_left_share.authenticated_open(mul_right_share) == (public_scalar * party0_val))
  21. # sub_scalar by public scalar
  22. sub_left_share = alpha1.sub_scalar(public_scalar, 0)
  23. sub_right_share = alpha2.sub_scalar(public_scalar, 1)
  24. assert (sub_left_share.authenticated_open(sub_right_share) == (party0_val - public_scalar))
  25. # add_scalar by public scalar
  26. add_left_share = alpha1.add_scalar(public_scalar, 0)
  27. add_right_share = alpha2.add_scalar(public_scalar, 1)
  28. assert (add_left_share.authenticated_open(add_right_share) == (public_scalar + party0_val))
  29. # add authenticated shares
  30. add_party0_share = alpha1 + beta2
  31. add_party1_share = alpha2 + beta1
  32. lhs = add_party0_share.authenticated_open(add_party1_share)
  33. assert (lhs == (party0_val + party1_val))
  34. # sub authenticated shares
  35. sub_party0_share = alpha1 - beta2
  36. sub_party1_share = alpha2 - beta1
  37. lhs = sub_party0_share.authenticated_open(sub_party1_share)
  38. assert (lhs == (party0_val - party1_val))
  39. # mul authenticated shares
  40. mul_res = party0_val * party1_val
  41. s = Source(p)
  42. a1b1 = MultiplicationAuthenticatedShares(alpha1, beta1, s.triplet(0), 0)
  43. a2b2 = MultiplicationAuthenticatedShares(alpha2, beta2, s.triplet(1), 1)
  44. print('d1: {}'.format(a1b1.d))
  45. print('d2: {}'.format(a2b2.d))
  46. lhs_share = a1b1.mul(a2b2.d, a2b2.e)
  47. rhs_share = a2b2.mul(a1b1.d, a1b1.e)
  48. lhs = lhs_share.authenticated_open(rhs_share)
  49. assert (lhs == (party0_val * party1_val)), 'lhs: {}, rhs: {}'.format(lhs, party0_val * party1_val)