Browse Source

feat: add `DCRTPolyGaussSamp` partial

Enrico Bottazzi 11 months ago
parent
commit
99c0729639
4 changed files with 37 additions and 8 deletions
  1. 9 4
      examples/trapdoor.rs
  2. 21 2
      src/Trapdoor.cc
  3. 5 1
      src/Trapdoor.h
  4. 2 1
      src/lib.rs

+ 9 - 4
examples/trapdoor.rs

@@ -2,13 +2,18 @@ use openfhe::ffi;
 
 fn main() {
     // Parameters based on https://github.com/openfheorg/openfhe-development/blob/7b8346f4eac27121543e36c17237b919e03ec058/src/core/unittest/UnitTestTrapdoor.cpp#L314
-    let n = 16;
-    let size = 4;
-    let k_res = 51;
+    let n: u32 = 16;
+    let size: u32 = 4;
+    let k_res: u32 = 51;
+    let base: i64 = 8;
 
     let params = ffi::GenILDCRTParamsByOrderSizeBits(2 * n, size, k_res);
 
     let u = ffi::DCRTPolyGenFromDug(&params);
 
-    let trapdoor = ffi::DCRTPolyTrapdoorGen(&params, 4.57825, 8, false);
+    let trapdoor = ffi::DCRTPolyTrapdoorGen(&params, base, false);
+
+    let k = 68; // to calculate
+
+    ffi::DCRTPolyGaussSamp(n.try_into().unwrap(), k, base);
 }

+ 21 - 2
src/Trapdoor.cc

@@ -1,12 +1,13 @@
 #include "Trapdoor.h"
+#include "DCRTPoly.h"
 #include "openfhe/core/lattice/trapdoor.h"
+#include "openfhe/core/lattice/dgsampling.h"
 
 namespace openfhe
 {
 
 std::unique_ptr<TrapdoorOutput> DCRTPolyTrapdoorGen(
     const ILDCRTParams& params,
-    double stddev,
     int64_t base,
     bool balanced)
 {
@@ -15,7 +16,7 @@ std::unique_ptr<TrapdoorOutput> DCRTPolyTrapdoorGen(
 
     auto result = lbcrypto::RLWETrapdoorUtility<lbcrypto::DCRTPoly>::TrapdoorGen(
         params_ptr,
-        stddev,
+        lbcrypto::SIGMA,
         base,
         balanced
     );
@@ -26,4 +27,22 @@ std::unique_ptr<TrapdoorOutput> DCRTPolyTrapdoorGen(
     });
 }
 
+void DCRTPolyGaussSamp(size_t n, size_t k, base)
+{
+    DCRTPolyImpl::DggType dgg(lbcrypto::SIGMA);
+
+    double c = (base + 1) * lbcrypto::SIGMA;
+    double s = lbcrypto::SPECTRAL_BOUND(n, k, base);
+    DCRTPolyImpl::DggType dggLargeSigma(sqrt(s * s - c * c));
+}
+
+// [x] n
+// [x] k
+// [ ] trapPair.first
+// [ ] trapPair.second
+// [ ] u
+// [x] dgg 
+// [x] dggLargeSigma
+// [x] base
+
 } // openfhe 

+ 5 - 1
src/Trapdoor.h

@@ -20,7 +20,11 @@ struct TrapdoorOutput
 // Generator functions
 [[nodiscard]] std::unique_ptr<TrapdoorOutput> DCRTPolyTrapdoorGen(
     const ILDCRTParams& params,
-    double stddev,
     int64_t base,
     bool balanced);
+
+// [[nodiscard]]
+void DCRTPolyGaussSamp(size_t n, size_t k, int64_t base);
+    
+    
 } // openfhe

+ 2 - 1
src/lib.rs

@@ -1147,7 +1147,8 @@ pub mod ffi
     unsafe extern "C++"
     {   
         // Generator functions
-        fn DCRTPolyTrapdoorGen(params: &ILDCRTParams, stddev: f64, base: i64, balanced: bool) -> UniquePtr<TrapdoorOutput>;
+        fn DCRTPolyTrapdoorGen(params: &ILDCRTParams, base: i64, balanced: bool) -> UniquePtr<TrapdoorOutput>;
+        fn DCRTPolyGaussSamp(n: usize, k: usize, base: i64);
     }
 }