Selaa lähdekoodia

Adding new functions part 1

Hovsep Papoyan 11 kuukautta sitten
vanhempi
commit
8c092c4d18
2 muutettua tiedostoa jossa 25 lisäystä ja 0 poistoa
  1. 16 0
      src/bindings.cc
  2. 9 0
      src/bindings.hpp

+ 16 - 0
src/bindings.cc

@@ -106,6 +106,10 @@ void CryptoContextDCRTPoly::EvalMultKeyGen(const std::shared_ptr<PrivateKeyImpl>
 {
     m_cryptoContextImplSharedPtr->EvalMultKeyGen(key);
 }
+void CryptoContextDCRTPoly::EvalMultKeysGen(const std::shared_ptr<PrivateKeyImpl> key) const
+{
+    m_cryptoContextImplSharedPtr->EvalMultKeysGen(key);
+}
 void CryptoContextDCRTPoly::EvalRotateKeyGen(
     const std::shared_ptr<PrivateKeyImpl> privateKey, const std::vector<int32_t>& indexList,
     const std::shared_ptr<PublicKeyImpl> publicKey) const
@@ -144,6 +148,18 @@ std::unique_ptr<CiphertextDCRTPoly> CryptoContextDCRTPoly::EvalMult(
     return std::make_unique<CiphertextDCRTPoly>(m_cryptoContextImplSharedPtr->EvalMult(
         ciphertext1, ciphertext2));
 }
+std::unique_ptr<CiphertextDCRTPoly> CryptoContextDCRTPoly::EvalMultNoRelin(
+    std::shared_ptr<CiphertextImpl> ciphertext1, std::shared_ptr<CiphertextImpl> ciphertext2) const
+{
+    return std::make_unique<CiphertextDCRTPoly>(m_cryptoContextImplSharedPtr->EvalMultNoRelin(
+        ciphertext1, ciphertext2));
+}
+std::unique_ptr<CiphertextDCRTPoly> CryptoContextDCRTPoly::EvalMultAndRelinearize(
+    std::shared_ptr<CiphertextImpl> ciphertext1, std::shared_ptr<CiphertextImpl> ciphertext2) const
+{
+    return std::make_unique<CiphertextDCRTPoly>(
+        m_cryptoContextImplSharedPtr->EvalMultAndRelinearize(ciphertext1, ciphertext2));
+}
 std::unique_ptr<CiphertextDCRTPoly> CryptoContextDCRTPoly::EvalMultByConst(
     std::shared_ptr<CiphertextImpl> ciphertext, const double constant) const
 {

+ 9 - 0
src/bindings.hpp

@@ -118,6 +118,8 @@ public:
     [[nodiscard]] std::shared_ptr<CiphertextImpl> GetCipherText() const;
 };
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
 class CryptoContextDCRTPoly final
 {
     std::shared_ptr<lbcrypto::CryptoContextImpl<lbcrypto::DCRTPoly>> m_cryptoContextImplSharedPtr;
@@ -145,6 +147,7 @@ public:
     void Enable(const PKESchemeFeature feature) const;
     [[nodiscard]] std::unique_ptr<KeyPairDCRTPoly> KeyGen() const;
     void EvalMultKeyGen(const std::shared_ptr<PrivateKeyImpl> key) const;
+    void EvalMultKeysGen(const std::shared_ptr<PrivateKeyImpl> key) const;
     void EvalRotateKeyGen(
         const std::shared_ptr<PrivateKeyImpl> privateKey, const std::vector<int32_t>& indexList,
         const std::shared_ptr<PublicKeyImpl> publicKey /* nullptr */) const;
@@ -161,6 +164,12 @@ public:
     [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalMult(
         std::shared_ptr<CiphertextImpl> ciphertext1,
         std::shared_ptr<CiphertextImpl> ciphertext2) const;
+    [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalMultNoRelin(
+        std::shared_ptr<CiphertextImpl> ciphertext1,
+        std::shared_ptr<CiphertextImpl> ciphertext2) const;
+    [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalMultAndRelinearize(
+        std::shared_ptr<CiphertextImpl> ciphertext1,
+        std::shared_ptr<CiphertextImpl> ciphertext2) const;
     [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalMultByConst(
         std::shared_ptr<CiphertextImpl> ciphertext, const double constant) const;
     [[nodiscard]] std::unique_ptr<CiphertextDCRTPoly> EvalRotate(