Browse Source

feat: add `DCRTPolyTrapdoorGen`

Enrico Bottazzi 9 months ago
parent
commit
2aa3faed62
5 changed files with 69 additions and 3 deletions
  1. 3 3
      build.rs
  2. 2 0
      examples/trapdoor.rs
  3. 29 0
      src/Trapdoor.cc
  4. 26 0
      src/Trapdoor.h
  5. 9 0
      src/lib.rs

+ 3 - 3
build.rs

@@ -1,5 +1,4 @@
-fn main()
-{
+fn main() {
     cxx_build::bridge("src/lib.rs")
         .file("src/AssociativeContainers.cc")
         .file("src/Ciphertext.cc")
@@ -18,6 +17,7 @@ fn main()
         .file("src/SchemeBase.cc")
         .file("src/SequenceContainers.cc")
         .file("src/SerialDeserial.cc")
+        .file("src/Trapdoor.cc")
         .include("/usr/local/include/openfhe")
         .include("/usr/local/include/openfhe/third-party/include")
         .include("/usr/local/include/openfhe/core")
@@ -85,7 +85,7 @@ fn main()
 
     // linking OpenMP
     println!("cargo::rustc-link-arg=-fopenmp");
-    
+
     // necessary to avoid LD_LIBRARY_PATH
     println!("cargo::rustc-link-arg=-Wl,-rpath,/usr/local/lib");
 }

+ 2 - 0
examples/trapdoor.rs

@@ -9,4 +9,6 @@ fn main() {
     let params = ffi::GenILDCRTParamsByOrderSizeBits(2 * n, size, k_res);
 
     let u = ffi::DCRTPolyGenFromDug(&params);
+
+    let trapdoor = ffi::DCRTPolyTrapdoorGen(&params, 4.57825, 8, false);
 }

+ 29 - 0
src/Trapdoor.cc

@@ -0,0 +1,29 @@
+#include "Trapdoor.h"
+#include "openfhe/core/lattice/trapdoor.h"
+
+namespace openfhe
+{
+
+std::unique_ptr<TrapdoorOutput> DCRTPolyTrapdoorGen(
+    const ILDCRTParams& params,
+    double stddev,
+    int64_t base,
+    bool balanced)
+{
+
+    std::shared_ptr<ILDCRTParams> params_ptr = std::make_shared<ILDCRTParams>(params);
+
+    auto result = lbcrypto::RLWETrapdoorUtility<lbcrypto::DCRTPoly>::TrapdoorGen(
+        params_ptr,
+        stddev,
+        base,
+        balanced
+    );
+
+    return std::make_unique<TrapdoorOutput>(TrapdoorOutput{
+        std::move(result.first),
+        std::move(result.second)
+    });
+}
+
+} // openfhe 

+ 26 - 0
src/Trapdoor.h

@@ -0,0 +1,26 @@
+#pragma once
+#include "Params.h"
+#include "openfhe/core/lattice/hal/lat-backend.h"
+#include "openfhe/core/math/matrix.h"
+#include "openfhe/core/lattice/trapdoor.h"
+
+namespace openfhe
+{
+
+using Matrix = lbcrypto::Matrix<lbcrypto::DCRTPoly>;   
+using RLWETrapdoorPair = lbcrypto::RLWETrapdoorPair<lbcrypto::DCRTPoly>;
+
+struct TrapdoorOutput
+{
+    Matrix m;
+    RLWETrapdoorPair tp;
+};
+
+
+// Generator functions
+[[nodiscard]] std::unique_ptr<TrapdoorOutput> DCRTPolyTrapdoorGen(
+    const ILDCRTParams& params,
+    double stddev,
+    int64_t base,
+    bool balanced);
+} // openfhe

+ 9 - 0
src/lib.rs

@@ -173,6 +173,7 @@ pub mod ffi
         include!("openfhe/src/SchemeBase.h");
         include!("openfhe/src/SequenceContainers.h");
         include!("openfhe/src/SerialDeserial.h");
+        include!("openfhe/src/Trapdoor.h");
 
         // enums
         type COMPRESSION_LEVEL;
@@ -224,6 +225,7 @@ pub mod ffi
         type VectorOfLWECiphertexts;
         type VectorOfPrivateKeys;
         type VectorOfVectorOfCiphertexts;
+        type TrapdoorOutput;
     }
 
     // CiphertextDCRTPoly
@@ -1140,6 +1142,13 @@ pub mod ffi
                                              privateKey: &PrivateKeyDCRTPoly,
                                              serialMode: SerialMode) -> bool;
     }
+
+    // Trapdoor
+    unsafe extern "C++"
+    {   
+        // Generator functions
+        fn DCRTPolyTrapdoorGen(params: &ILDCRTParams, stddev: f64, base: i64, balanced: bool) -> UniquePtr<TrapdoorOutput>;
+    }
 }
 
 #[cfg(test)]