#pragma once #include "openfhe/binfhe/lwe-ciphertext-fwd.h" #include "openfhe/core/lattice/hal/lat-backend.h" #include "openfhe/pke/ciphertext-fwd.h" #include "openfhe/pke/key/evalkey-fwd.h" #include "openfhe/pke/key/privatekey-fwd.h" // cxx currently does not support std::vector of opaque type namespace openfhe { using CiphertextImpl = lbcrypto::CiphertextImpl; class VectorOfCiphertexts final { std::vector> m_ciphertexts; public: VectorOfCiphertexts(std::vector>&& ciphertexts) noexcept; [[nodiscard]] const std::vector>& GetRef() const noexcept; [[nodiscard]] std::vector>& GetRef() noexcept; }; class VectorOfDCRTPolys final { std::shared_ptr> m_elements; public: VectorOfDCRTPolys(std::shared_ptr>&& elements) noexcept; [[nodiscard]] const std::shared_ptr>& GetRef() const noexcept; }; using EvalKeyImpl = lbcrypto::EvalKeyImpl; class VectorOfEvalKeys final { std::vector> m_evalKeys; public: VectorOfEvalKeys(std::vector> evalKeys); [[nodiscard]] const std::vector>& GetRef() const noexcept; }; using LWECiphertextImpl = lbcrypto::LWECiphertextImpl; class VectorOfLWECiphertexts final { std::vector> m_lweCiphertexts; public: VectorOfLWECiphertexts( std::vector>&& lweCiphertexts) noexcept; [[nodiscard]] std::vector>& GetRef() noexcept; }; using PrivateKeyImpl = lbcrypto::PrivateKeyImpl; class VectorOfPrivateKeys final { std::vector> m_privateKeys; public: VectorOfPrivateKeys(std::vector>&& ciphertexts) noexcept; [[nodiscard]] const std::vector>& GetRef() const noexcept; }; class VectorOfVectorOfCiphertexts final { std::vector>> m_ciphertexts; public: VectorOfVectorOfCiphertexts( std::vector>>&& ciphertexts) noexcept; [[nodiscard]] std::vector>>& GetRef() noexcept; }; } // openfhe