Browse Source

Adding new functions

Hovsep Papoyan 11 months ago
parent
commit
d4bf16d3a2
3 changed files with 27 additions and 0 deletions
  1. 14 0
      src/bindings.cc
  2. 6 0
      src/bindings.hpp
  3. 7 0
      src/lib.rs

+ 14 - 0
src/bindings.cc

@@ -492,6 +492,20 @@ std::unique_ptr<std::vector<uint32_t>> CryptoContextDCRTPoly::FindAutomorphismIn
     return std::make_unique<std::vector<uint32_t>>(
         m_cryptoContextImplSharedPtr->FindAutomorphismIndices(idxList));
 }
+std::unique_ptr<CiphertextDCRTPoly> CryptoContextDCRTPoly::EvalInnerProductByCiphertexts(
+    const CiphertextDCRTPoly& ciphertext1, const CiphertextDCRTPoly& ciphertext2,
+    const uint32_t batchSize) const
+{
+    return std::make_unique<CiphertextDCRTPoly>(m_cryptoContextImplSharedPtr->EvalInnerProduct(
+        ciphertext1.GetInternal(), ciphertext2.GetInternal(), batchSize));
+}
+std::unique_ptr<CiphertextDCRTPoly> CryptoContextDCRTPoly::EvalInnerProductByPlaintext(
+    const CiphertextDCRTPoly& ciphertext, const Plaintext& plaintext,
+    const uint32_t batchSize) const
+{
+    return std::make_unique<CiphertextDCRTPoly>(m_cryptoContextImplSharedPtr->EvalInnerProduct(
+        ciphertext.GetInternal(), plaintext.GetInternal(), batchSize));
+}
 std::shared_ptr<CryptoContextImpl> CryptoContextDCRTPoly::GetInternal() const
 {
     return m_cryptoContextImplSharedPtr;

+ 6 - 0
src/bindings.hpp

@@ -289,6 +289,12 @@ public:
         const uint32_t slots /* 0 */) const;
     [[nodiscard]] std::unique_ptr<std::vector<uint32_t>> FindAutomorphismIndices(
         const std::vector<uint32_t>& idxList) const;
+    [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalInnerProductByCiphertexts(
+        const CiphertextDCRTPoly& ciphertext1, const CiphertextDCRTPoly& ciphertext2,
+        const uint32_t batchSize) const;
+    [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalInnerProductByPlaintext(
+        const CiphertextDCRTPoly& ciphertext, const Plaintext& plaintext,
+        const uint32_t batchSize) const;
     [[nodiscard]] std::shared_ptr<CryptoContextImpl> GetInternal() const;
 };
 // cxx currently does not support static class methods

+ 7 - 0
src/lib.rs

@@ -625,6 +625,13 @@ pub mod ffi
         fn EvalBootstrapPrecompute(self: &CryptoContextDCRTPoly, slots: /* 0 */ u32);
         fn FindAutomorphismIndices(self: &CryptoContextDCRTPoly, idxList: &CxxVector<u32>)
                                    -> UniquePtr<CxxVector<u32>>;
+        fn EvalInnerProductByCiphertexts(self: &CryptoContextDCRTPoly,
+                                         ciphertext1: &CiphertextDCRTPoly,
+                                         ciphertext2: &CiphertextDCRTPoly, batchSize: u32)
+                                         -> UniquePtr<CiphertextDCRTPoly>;
+        fn EvalInnerProductByPlaintext(self: &CryptoContextDCRTPoly,
+                                       ciphertext: &CiphertextDCRTPoly, plaintext: &Plaintext,
+                                       batchSize: u32) -> UniquePtr<CiphertextDCRTPoly>;
 
         // cxx currently does not support static class methods
         fn ClearEvalMultKeys();