Browse Source

serialization for the stuff that I don't know if I'll actually need it for

tristangurtler 3 years ago
parent
commit
d8b3dfabbf

+ 3 - 0
bgn2/inc/BGN.hpp

@@ -32,6 +32,9 @@ class BGN
         const BGNPublicKey& get_public_key() const;
         const BGNPrivateKey& get_private_key() const;
 
+        friend std::ostream& operator<<(std::ostream& os, const BGN& output);
+        friend std::istream& operator>>(std::istream& is, BGN& input);
+
 	private:
 		BGNPublicKey public_key;
 		BGNPrivateKey private_key;

+ 3 - 0
bgn2/inc/PrivateKey.hpp

@@ -18,6 +18,9 @@ class BGNPrivateKey
         Scalar decrypt(const CurveBipoint& ciphertext);
         Scalar decrypt(const TwistBipoint& ciphertext);
         Scalar decrypt(const Quadripoint & ciphertext);
+
+        friend std::ostream& operator<<(std::ostream& os, const BGNPrivateKey& output);
+        friend std::istream& operator>>(std::istream& is, BGNPrivateKey& input);
     
     private:
         BGNPrivateKey();

+ 4 - 1
bgn2/inc/PublicKey.hpp

@@ -26,7 +26,10 @@ class BGNPublicKey
 		CurveBipoint get_bipoint_curvegen() const;
 		TwistBipoint get_bipoint_twistgen() const;	
 		CurveBipoint get_bipoint_curve_subgroup_gen() const;
-		TwistBipoint get_bipoint_twist_subgroup_gen() const;	
+		TwistBipoint get_bipoint_twist_subgroup_gen() const;
+
+		friend std::ostream& operator<<(std::ostream& os, const BGNPublicKey& output);
+        friend std::istream& operator>>(std::istream& is, BGNPublicKey& input);
 		
 	private:
 		BGNPublicKey();

+ 1 - 0
bgn2/inc/Scalar.hpp

@@ -42,6 +42,7 @@ class Scalar
         bool operator!=(const Scalar& b) const;
         
         friend std::ostream& operator<<(std::ostream& os, const Scalar& output);
+        friend std::istream& operator>>(std::istream& is, Scalar& input);
     
     private:
         class SecretScalar

+ 16 - 0
bgn2/src/BGN.cpp

@@ -142,3 +142,19 @@ const BGNPrivateKey& BGN::get_private_key() const
 {
     return private_key;
 }
+
+std::ostream& operator<<(std::ostream& os, const BGN& output)
+{
+    os << output.public_key;
+    os << output.private_key;
+
+    return os;
+}
+
+std::istream& operator>>(std::istream& is, BGN& input)
+{
+    is >> input.public_key;
+    is >> input.private_key;
+
+    return is;
+}

+ 34 - 0
bgn2/src/PrivateKey.cpp

@@ -86,6 +86,40 @@ Scalar BGNPrivateKey::decrypt(const Quadripoint& ciphertext)
     return pair_max_checked;
 }
 
+std::ostream& operator<<(std::ostream& os, const BGNPrivateKey& output)
+{
+    os << output.a1 << output.b1 << output.c1 << output.d1;
+    os << output.a2 << output.b2 << output.c2 << output.d2;
+    os << output.pi_1_curvegen;
+    os << output.pi_2_twistgen;
+    os << output.pi_T_pairgen;
+
+    return os;
+}
+
+std::istream& operator>>(std::istream& is, BGNPrivateKey& input)
+{
+    is >> input.a1 >> input.b1 >> input.c1 >> input.d1;
+    is >> input.a2 >> input.b2 >> input.c2 >> input.d2;
+    is >> input.pi_1_curvegen;
+    is >> input.pi_2_twistgen;
+    is >> input.pi_T_pairgen;
+
+    input.curve_max_checked = Scalar(0);
+    input.twist_max_checked = Scalar(0);
+    input.pair_max_checked = Scalar(0);
+
+    input.curve_memoizer.clear();
+    input.twist_memoizer.clear();
+    input.pair_memoizer.clear();
+
+    input.curve_memoizer[input.pi_1_curvegen * input.curve_max_checked] = input.curve_max_checked;
+    input.twist_memoizer[input.pi_2_twistgen * input.twist_max_checked] = input.twist_max_checked;
+    input.pair_memoizer[input.pi_T_pairgen * input.pair_max_checked] = input.pair_max_checked;
+
+    return is;
+}
+
 BGNPrivateKey::BGNPrivateKey()
 { }
 

+ 20 - 0
bgn2/src/PublicKey.cpp

@@ -151,6 +151,26 @@ TwistBipoint BGNPublicKey::get_bipoint_twist_subgroup_gen() const
     return bipoint_twist_subgroup_gen;
 }
 
+std::ostream& operator<<(std::ostream& os, const BGNPublicKey& output)
+{
+    os << output.bipoint_curvegen;
+    os << output.bipoint_twistgen;
+    os << output.bipoint_curve_subgroup_gen;
+    os << output.bipoint_twist_subgroup_gen;
+
+    return os;
+}
+
+std::istream& operator>>(std::istream& is, BGNPublicKey& input)
+{
+    is >> input.bipoint_curvegen;
+    is >> input.bipoint_twistgen;
+    is >> input.bipoint_curve_subgroup_gen;
+    is >> input.bipoint_twist_subgroup_gen;
+
+    return is;
+}
+
 BGNPublicKey::BGNPublicKey()
 { }
 

+ 6 - 0
bgn2/src/Scalar.cpp

@@ -203,3 +203,9 @@ std::ostream& operator<<(std::ostream& os, const Scalar& output)
     os << output.element;
     return os;
 }
+
+std::istream& operator>>(std::istream& is, Scalar& input)
+{
+    is >> input.element;
+    return is;
+}