From d7e2cf89ad6761eb298f9071f8fa88e8b987d80f Mon Sep 17 00:00:00 2001 From: Dmitriy Suponitskiy Date: Sat, 22 Mar 2025 14:18:11 -0400 Subject: [PATCH 1/2] Added InsertEvalAutomorphismKey() --- src/include/docstrings/cryptocontext_docs.h | 9 ++++++++- src/lib/bindings.cpp | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/include/docstrings/cryptocontext_docs.h b/src/include/docstrings/cryptocontext_docs.h index c35962e..b160c77 100644 --- a/src/include/docstrings/cryptocontext_docs.h +++ b/src/include/docstrings/cryptocontext_docs.h @@ -1117,12 +1117,19 @@ const char* cc_IntMPBootEncrypt_docs = R"pbdoc( )pbdoc"; const char* cc_InsertEvalMultKey_docs = R"pbdoc( - InsertEvalMultKey - add the given vector of keys to the map, replacing the existing vector if there + Adds the given vector of keys to the map, replacing the existing vector if there :param evalKeyVec: vector of keys :type evalKeyVec: List[EvalKey] )pbdoc"; +const char* cc_InsertEvalAutomorphismKey_docs = R"pbdoc( + Add the given map of keys to the map, replacing the existing map if there is + + :param evalKeyMap: map of keys + :type EvalKeyMap +)pbdoc"; + const char* cc_EvalSum_docs = R"pbdoc( Function for evaluating a sum of all components in a vector. diff --git a/src/lib/bindings.cpp b/src/lib/bindings.cpp index 0949217..9d65c3a 100644 --- a/src/lib/bindings.cpp +++ b/src/lib/bindings.cpp @@ -749,6 +749,11 @@ void bind_crypto_context(py::module &m) cc_InsertEvalMultKey_docs, py::arg("evalKeyVec"), py::arg("keyTag") = "") + .def_static( + "InsertEvalAutomorphismKey", &CryptoContextImpl::InsertEvalAutomorphismKey, + cc_InsertEvalAutomorphismKey_docs, + py::arg("evalKeyMap"), + py::arg("keyTag") = "") .def_static( "ClearEvalAutomorphismKeys", []() { CryptoContextImpl::ClearEvalAutomorphismKeys(); }, From 8f1be1da2928d07c33222120fa56857cd622ba8c Mon Sep 17 00:00:00 2001 From: Dmitriy Suponitskiy Date: Tue, 25 Mar 2025 15:13:49 -0400 Subject: [PATCH 2/2] Fixes to binding of serialization functions, MultiEvalAtIndexKeyGen() and GetEvalAutomorphismKeyMap(). --- src/lib/bindings.cpp | 7 +++---- src/lib/pke/serialization.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib/bindings.cpp b/src/lib/bindings.cpp index 9d65c3a..b12f5bf 100644 --- a/src/lib/bindings.cpp +++ b/src/lib/bindings.cpp @@ -502,7 +502,7 @@ void bind_crypto_context(py::module &m) const PrivateKey& privateKey, std::shared_ptr>> evalKeyMap, const std::vector& indexList, - const std::string& keyId) { + const std::string& keyId = "") { return self->MultiEvalAtIndexKeyGen(privateKey, evalKeyMap, indexList, keyId); }, cc_MultiEvalAtIndexKeyGen_docs, @@ -758,10 +758,9 @@ void bind_crypto_context(py::module &m) "ClearEvalAutomorphismKeys", []() { CryptoContextImpl::ClearEvalAutomorphismKeys(); }, cc_ClearEvalAutomorphismKeys_docs) - .def_static("GetEvalAutomorphismKeyMap", &CryptoContextImpl::GetEvalAutomorphismKeyMap, + .def_static("GetEvalAutomorphismKeyMap", &CryptoContextImpl::GetEvalAutomorphismKeyMapPtr, cc_GetEvalAutomorphismKeyMap_docs, - py::arg("keyId") = "", - py::return_value_policy::reference) + py::arg("keyId") = "") .def("GetEvalSumKeyMap", &GetEvalSumKeyMapWrapper, cc_GetEvalSumKeyMap_docs) .def("GetBinCCForSchemeSwitch", &CryptoContextImpl::GetBinCCForSchemeSwitch) diff --git a/src/lib/pke/serialization.cpp b/src/lib/pke/serialization.cpp index c9860a1..58d1384 100644 --- a/src/lib/pke/serialization.cpp +++ b/src/lib/pke/serialization.cpp @@ -263,11 +263,11 @@ void bind_serialization(pybind11::module &m) { m.def("SerializeEvalMultKeyString", &SerializeEvalMultKeyToStringWrapper, py::arg("sertype"), py::arg("id") = ""); m.def("DeserializeEvalMultKeyString", &DeserializeEvalMultKeyFromStringWrapper, - py::arg("sertype"), py::arg("id") = ""); + py::arg("data"), py::arg("sertype")); m.def("SerializeEvalAutomorphismKeyString", &SerializeEvalAutomorphismKeyToStringWrapper, py::arg("sertype"), py::arg("id") = ""); m.def("DeserializeEvalAutomorphismKeyString", &DeserializeEvalAutomorphismKeyFromStringWrapper, - py::arg("sertype"), py::arg("id") = ""); + py::arg("data"), py::arg("sertype")); // Binary Serialization m.def("SerializeToFile", static_cast&, const SerType::SERBINARY&)>(&Serial::SerializeToFile), @@ -315,9 +315,9 @@ void bind_serialization(pybind11::module &m) { m.def("SerializeEvalMultKeyString", &SerializeEvalMultKeyToBytesWrapper, py::arg("sertype"), py::arg("id") = ""); m.def("DeserializeEvalMultKeyString", &DeserializeEvalMultKeyFromBytesWrapper, - py::arg("sertype"), py::arg("id") = ""); + py::arg("data"), py::arg("sertype")); m.def("SerializeEvalAutomorphismKeyString", &SerializeEvalAutomorphismKeyToBytesWrapper, py::arg("sertype"), py::arg("id") = ""); m.def("DeserializeEvalAutomorphismKeyString", &DeserializeEvalAutomorphismKeyFromBytesWrapper, - py::arg("sertype"), py::arg("id") = ""); + py::arg("data"), py::arg("sertype")); }