PublicKey.hpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef __BGN_PUBLICKEY_HPP
  2. #define __BGN_PUBLICKEY_HPP
  3. #include "Scalar.hpp"
  4. #include "Bipoint.hpp"
  5. #include "Quadripoint.hpp"
  6. #include "pairing.hpp"
  7. class BGNPublicKey
  8. {
  9. public:
  10. BGNPublicKey(const BGNPublicKey& other);
  11. void encrypt(CurveBipoint& G_element, const Scalar& cleartext) const;
  12. void encrypt(TwistBipoint& H_element, const Scalar& cleartext) const;
  13. void encrypt(CurveBipoint& G_element, TwistBipoint& H_element, const Scalar& cleartext) const;
  14. CurveBipoint encrypt(Scalar& lambda, const Scalar& cleartext) const;
  15. CurveBipoint homomorphic_addition(const CurveBipoint& a, const CurveBipoint& b) const;
  16. TwistBipoint homomorphic_addition(const TwistBipoint& a, const TwistBipoint& b) const;
  17. Quadripoint homomorphic_addition(const Quadripoint& a, const Quadripoint& b) const;
  18. Quadripoint homomorphic_multiplication(const CurveBipoint& a, const TwistBipoint& b) const;
  19. CurveBipoint homomorphic_addition_no_rerandomize(const CurveBipoint& a, const CurveBipoint& b) const;
  20. TwistBipoint homomorphic_addition_no_rerandomize(const TwistBipoint& a, const TwistBipoint& b) const;
  21. Quadripoint homomorphic_addition_no_rerandomize(const Quadripoint& a, const Quadripoint& b) const;
  22. Quadripoint homomorphic_multiplication_no_rerandomize(const CurveBipoint& a, const TwistBipoint& b) const;
  23. CurveBipoint rerandomize(const CurveBipoint& a) const;
  24. TwistBipoint rerandomize(const TwistBipoint& a) const;
  25. Quadripoint rerandomize(const Quadripoint& a) const;
  26. CurveBipoint rerandomize(Scalar& lambda, const CurveBipoint& a) const;
  27. TwistBipoint rerandomize(Scalar& lambda, const TwistBipoint& a) const;
  28. CurveBipoint get_bipoint_curvegen() const;
  29. TwistBipoint get_bipoint_twistgen() const;
  30. CurveBipoint get_bipoint_curve_subgroup_gen() const;
  31. TwistBipoint get_bipoint_twist_subgroup_gen() const;
  32. friend std::ostream& operator<<(std::ostream& os, const BGNPublicKey& output);
  33. friend std::istream& operator>>(std::istream& is, BGNPublicKey& input);
  34. private:
  35. BGNPublicKey();
  36. void set(const CurveBipoint& g, const TwistBipoint& h, const CurveBipoint& g1, const TwistBipoint& h1);
  37. friend class BGN;
  38. CurveBipoint bipoint_curvegen; // g
  39. TwistBipoint bipoint_twistgen; // h
  40. CurveBipoint bipoint_curve_subgroup_gen; // (g^(a1), g^(b1))
  41. TwistBipoint bipoint_twist_subgroup_gen; // (h^(a2), h^(b2))
  42. Quadripoint quadripoint_subgroup_gen_a; // e(g, h1)
  43. Quadripoint quadripoint_subgroup_gen_b; // e(g1, h)
  44. };
  45. #endif