spdz.sage 2.1 KB

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