ec_spdz.sage 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. load('beaver.sage')
  2. load('curve.sage')
  3. load('ec_share.sage')
  4. p = 10
  5. party0_val = CurvePoint.random()
  6. party1_val = CurvePoint.random()
  7. public_scalar = 2
  8. # additive share distribution, and communication of private values
  9. party0_random = CurvePoint.random()
  10. alpha1 = ECAuthenticatedShare(party0_random)
  11. alpha2 = ECAuthenticatedShare(party0_val - party0_random)
  12. assert (alpha1.authenticated_open(alpha2) == party0_val)
  13. party1_random = CurvePoint.random()
  14. beta1 = ECAuthenticatedShare(party1_random)
  15. beta2 = ECAuthenticatedShare(party1_val - party1_random)
  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. # add authenticated shares
  22. add_party0_share = alpha1 + beta2
  23. add_party1_share = alpha2 + beta1
  24. lhs = add_party0_share.authenticated_open(add_party1_share)
  25. assert (lhs == (party0_val + party1_val))
  26. # sub authenticated shares
  27. sub_party0_share = alpha1 - beta2
  28. sub_party1_share = alpha2 - beta1
  29. lhs = sub_party0_share.authenticated_open(sub_party1_share)
  30. assert (lhs == (party0_val - party1_val))
  31. # authenticated ec point scaled with authenticated scalar
  32. party1_val = random.randint(0,p)
  33. party1_random = random.randint(0,p)
  34. beta1 = AuthenticatedShare(party1_random)
  35. beta2 = AuthenticatedShare(party1_val - party1_random)
  36. s = Source(p)
  37. alpha1beta1_share = ScalingECAuthenticatedShares(alpha1, beta1, s.triplet(0), 0)
  38. alpha2beta2_share = ScalingECAuthenticatedShares(alpha2, beta2, s.triplet(1), 1)
  39. lhs_share = alpha1beta1_share * alpha2beta2_share
  40. rhs_share = alpha2beta2_share * alpha1beta1_share
  41. lhs = lhs_share.authenticated_open(rhs_share)
  42. mul_res = party0_val * party1_val
  43. assert (lhs == (party0_val * party1_val)), 'lhs: {}, rhs: {}'.format(lhs, party0_val * party1_val)