#ifndef __PRIVATEKEY_HPP #define __PRIVATEKEY_HPP #include #include "Scalar.hpp" #include "Bipoint.hpp" #include "Quadripoint.hpp" #include "PublicKey.hpp" #include "pairing.hpp" class PrivateKey { public: Scalar decrypt(const Bipoint& ciphertext) const; Scalar decrypt(const Bipoint& ciphertext) const; Scalar decrypt(const Quadripoint& ciphertext) const; private: PrivateKey(); friend class BGN; void set(const PublicKey& pub_key, const Scalar& a1, const Scalar& b1, const Scalar& c1, const Scalar& d1, const Scalar& a2, const Scalar& b2, const Scalar& c2, const Scalar& d2); Bipoint pi_1(const Bipoint & input) const; Bipoint pi_2(const Bipoint& input) const; Quadripoint pi_T(const Quadripoint & input) const; Scalar a1, b1, c1, d1, a2, b2, c2, d2; Bipoint pi_1_curvegen; Bipoint pi_2_curvegen; Quadripoint pi_T_curvegen; }; #endif