浏览代码

Add SerialDeserial support for private key

Hovsep Papoyan 1 年之前
父节点
当前提交
f6a7f14519
共有 5 个文件被更改,包括 42 次插入0 次删除
  1. 5 0
      src/PrivateKey.cc
  2. 3 0
      src/PrivateKey.h
  3. 13 0
      src/SerialDeserial.cc
  4. 6 0
      src/SerialDeserial.h
  5. 15 0
      src/lib.rs

+ 5 - 0
src/PrivateKey.cc

@@ -17,4 +17,9 @@ std::shared_ptr<PrivateKeyImpl>& PrivateKeyDCRTPoly::GetRef() noexcept
     return m_privateKey;
 }
 
+std::unique_ptr<PrivateKeyDCRTPoly> DCRTPolyGenNullPrivateKey()
+{
+    return std::make_unique<PrivateKeyDCRTPoly>();
+}
+
 } // openfhe

+ 3 - 0
src/PrivateKey.h

@@ -12,6 +12,7 @@ class PrivateKeyDCRTPoly final
 {
     std::shared_ptr<PrivateKeyImpl> m_privateKey;
 public:
+    PrivateKeyDCRTPoly() = default;
     PrivateKeyDCRTPoly(const std::shared_ptr<PrivateKeyImpl>& privateKey) noexcept;
     PrivateKeyDCRTPoly(const PrivateKeyDCRTPoly&) = delete;
     PrivateKeyDCRTPoly(PrivateKeyDCRTPoly&&) = delete;
@@ -22,4 +23,6 @@ public:
     [[nodiscard]] std::shared_ptr<PrivateKeyImpl>& GetRef() noexcept;
 };
 
+[[nodiscard]] std::unique_ptr<PrivateKeyDCRTPoly> DCRTPolyGenNullPrivateKey();
+
 } // openfhe

+ 13 - 0
src/SerialDeserial.cc

@@ -4,6 +4,7 @@
 
 #include "Ciphertext.h"
 #include "CryptoContext.h"
+#include "PrivateKey.h"
 #include "PublicKey.h"
 
 namespace openfhe
@@ -237,4 +238,16 @@ bool DCRTPolySerializePublicKeyToFile(const std::string& publicKeyLocation,
     return Serial(publicKeyLocation, publicKey, serialMode);
 }
 
+bool DCRTPolyDeserializePrivateKeyFromFile(const std::string& privateKeyLocation,
+    PrivateKeyDCRTPoly& privateKey, const SerialMode serialMode)
+{
+    return Deserial(privateKeyLocation, privateKey, serialMode);
+}
+
+bool DCRTPolySerializePrivateKeyToFile(const std::string& privateKeyLocation,
+    const PrivateKeyDCRTPoly& privateKey, const SerialMode serialMode)
+{
+    return Serial(privateKeyLocation, privateKey, serialMode);
+}
+
 } // openfhe

+ 6 - 0
src/SerialDeserial.h

@@ -9,6 +9,7 @@ namespace openfhe
 
 class CiphertextDCRTPoly;
 class CryptoContextDCRTPoly;
+class PrivateKeyDCRTPoly;
 class PublicKeyDCRTPoly;
 
 // Ciphertext
@@ -55,4 +56,9 @@ class PublicKeyDCRTPoly;
 [[nodiscard]] bool DCRTPolySerializePublicKeyToFile(const std::string& publicKeyLocation,
     const PublicKeyDCRTPoly& publicKey, const SerialMode serialMode);
 
+[[nodiscard]] bool DCRTPolyDeserializePrivateKeyFromFile(const std::string& privateKeyLocation,
+    PrivateKeyDCRTPoly& privateKey, const SerialMode serialMode);
+[[nodiscard]] bool DCRTPolySerializePrivateKeyToFile(const std::string& privateKeyLocation,
+    const PrivateKeyDCRTPoly& cryptoContext, const SerialMode serialMode);
+
 } // openfhe

+ 15 - 0
src/lib.rs

@@ -1056,6 +1056,13 @@ pub mod ffi
         fn DCRTPolyGenNullPublicKey() -> UniquePtr<PublicKeyDCRTPoly>;
     }
 
+    // PrivateKeyDCRTPoly
+    unsafe extern "C++"
+    {
+        // Generator functions
+        fn DCRTPolyGenNullPrivateKey() -> UniquePtr<PrivateKeyDCRTPoly>;
+    }
+
     // Serialize / Deserialize
     unsafe extern "C++"
     {
@@ -1110,6 +1117,14 @@ pub mod ffi
         fn DCRTPolySerializePublicKeyToFile(publicKeyLocation: &CxxString,
                                             publicKey: &PublicKeyDCRTPoly,
                                             serialMode: SerialMode) -> bool;
+
+        // PrivateKey
+        fn DCRTPolyDeserializePrivateKeyFromFile(privateKeyLocation: &CxxString,
+                                                 privateKey: Pin<&mut PrivateKeyDCRTPoly>,
+                                                 serialMode: SerialMode) -> bool;
+        fn DCRTPolySerializePrivateKeyToFile(privateKeyLocation: &CxxString,
+                                             privateKey: &PrivateKeyDCRTPoly,
+                                             serialMode: SerialMode) -> bool;
     }
 }