From 1089b02eb2c63d72dea5e0daa46ed939331b337b Mon Sep 17 00:00:00 2001 From: skmono Date: Tue, 30 Aug 2022 19:42:41 -0700 Subject: [PATCH 1/4] - Refactor apply_obfuscator - minor typo fix --- ipcl/include/ipcl/pub_key.hpp | 6 +++--- ipcl/pub_key.cpp | 36 ++++++++++++++++------------------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/ipcl/include/ipcl/pub_key.hpp b/ipcl/include/ipcl/pub_key.hpp index 1b28d19..950787c 100644 --- a/ipcl/include/ipcl/pub_key.hpp +++ b/ipcl/include/ipcl/pub_key.hpp @@ -82,7 +82,7 @@ class PublicKey { * Apply obfuscator for ciphertext * @param[out] obfuscator output of obfuscator with random value */ - void applyObfuscator(std::vector& obfuscator) const; + std::vector applyObfuscator(size_t sz) const; /** * Set the Random object for ISO/IEC 18033-6 compliance check @@ -137,9 +137,9 @@ class PublicKey { std::vector raw_encrypt(const std::vector& pt, bool make_secure = true) const; - void applyDjnObfuscator(std::vector& obfuscator) const; + std::vector applyDjnObfuscator(size_t sz) const; - void applyNormalObfuscator(std::vector& obfuscator) const; + std::vector applyNormalObfuscator(size_t sz) const; }; } // namespace ipcl diff --git a/ipcl/pub_key.cpp b/ipcl/pub_key.cpp index 0968691..4752251 100644 --- a/ipcl/pub_key.cpp +++ b/ipcl/pub_key.cpp @@ -54,11 +54,10 @@ void PublicKey::enableDJN() { m_enable_DJN = true; } -void PublicKey::applyDjnObfuscator(std::vector& obfuscator) const { - std::size_t obf_size = obfuscator.size(); - std::vector r(obf_size); - std::vector base(obf_size, m_hs); - std::vector sq(obf_size, m_nsquare); +std::vector PublicKey::applyDjnObfuscator(std::size_t sz) const { + std::vector r(sz); + std::vector base(sz, m_hs); + std::vector sq(sz, m_nsquare); if (m_testv) { r = m_r; @@ -67,32 +66,30 @@ void PublicKey::applyDjnObfuscator(std::vector& obfuscator) const { r_ = getRandomBN(m_randbits); } } - obfuscator = ipcl::ippModExp(base, r, sq); + return ipcl::ippModExp(base, r, sq); } -void PublicKey::applyNormalObfuscator( - std::vector& obfuscator) const { - std::size_t obf_size = obfuscator.size(); - std::vector r(obf_size); - std::vector sq(obf_size, m_nsquare); - std::vector pown(obf_size, m_n); +std::vector PublicKey::applyNormalObfuscator(std::size_t sz) const { + std::vector r(sz); + std::vector sq(sz, m_nsquare); + std::vector pown(sz, m_n); if (m_testv) { r = m_r; } else { - for (int i = 0; i < obf_size; i++) { + for (int i = 0; i < sz; i++) { r[i] = getRandomBN(m_bits); r[i] = r[i] % (m_n - 1) + 1; } } - obfuscator = ipcl::ippModExp(r, pown, sq); + return ipcl::ippModExp(r, pown, sq); } -void PublicKey::applyObfuscator(std::vector& obfuscator) const { +std::vector PublicKey::applyObfuscator(std::size_t sz) const { if (m_enable_DJN) { - applyDjnObfuscator(obfuscator); + return applyDjnObfuscator(sz); } else { - applyNormalObfuscator(obfuscator); + return applyNormalObfuscator(sz); } } @@ -115,8 +112,7 @@ std::vector PublicKey::raw_encrypt(const std::vector& pt, } if (make_secure) { - std::vector obfuscator(pt_size); - applyObfuscator(obfuscator); + std::vector obfuscator = applyObfuscator(pt_size); for (std::size_t i = 0; i < pt_size; i++) ct[i] = sq.ModMul(ct[i], obfuscator[i]); @@ -126,7 +122,7 @@ std::vector PublicKey::raw_encrypt(const std::vector& pt, CipherText PublicKey::encrypt(const PlainText& pt, bool make_secure) const { std::size_t pt_size = pt.getSize(); - ERROR_CHECK(pt_size > 0, "encrypt: Cannot encrypt emtpy PlainText"); + ERROR_CHECK(pt_size > 0, "encrypt: Cannot encrypt empty PlainText"); std::vector ct_bn_v(pt_size); ct_bn_v = raw_encrypt(pt.getTexts(), make_secure); From 8fc15f6a04f5ccc9ad8a7698450c97c058b7d4af Mon Sep 17 00:00:00 2001 From: skmono Date: Tue, 30 Aug 2022 20:39:37 -0700 Subject: [PATCH 2/4] test --- ipcl/include/ipcl/pub_key.hpp | 7 ++++--- ipcl/pub_key.cpp | 27 +++++++++++++++------------ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/ipcl/include/ipcl/pub_key.hpp b/ipcl/include/ipcl/pub_key.hpp index 950787c..9bdd41e 100644 --- a/ipcl/include/ipcl/pub_key.hpp +++ b/ipcl/include/ipcl/pub_key.hpp @@ -82,7 +82,8 @@ class PublicKey { * Apply obfuscator for ciphertext * @param[out] obfuscator output of obfuscator with random value */ - std::vector applyObfuscator(size_t sz) const; + std::vector applyObfuscator( + std::vector& ciphertext) const; /** * Set the Random object for ISO/IEC 18033-6 compliance check @@ -137,9 +138,9 @@ class PublicKey { std::vector raw_encrypt(const std::vector& pt, bool make_secure = true) const; - std::vector applyDjnObfuscator(size_t sz) const; + std::vector getDJNObfuscator(std::size_t sz) const; - std::vector applyNormalObfuscator(size_t sz) const; + std::vector getNormalObfuscator(std::size_t sz) const; }; } // namespace ipcl diff --git a/ipcl/pub_key.cpp b/ipcl/pub_key.cpp index 4752251..3754f46 100644 --- a/ipcl/pub_key.cpp +++ b/ipcl/pub_key.cpp @@ -54,7 +54,7 @@ void PublicKey::enableDJN() { m_enable_DJN = true; } -std::vector PublicKey::applyDjnObfuscator(std::size_t sz) const { +std::vector PublicKey::getDJNObfuscator(std::size_t sz) const { std::vector r(sz); std::vector base(sz, m_hs); std::vector sq(sz, m_nsquare); @@ -69,7 +69,7 @@ std::vector PublicKey::applyDjnObfuscator(std::size_t sz) const { return ipcl::ippModExp(base, r, sq); } -std::vector PublicKey::applyNormalObfuscator(std::size_t sz) const { +std::vector PublicKey::getNormalObfuscator(std::size_t sz) const { std::vector r(sz); std::vector sq(sz, m_nsquare); std::vector pown(sz, m_n); @@ -85,12 +85,15 @@ std::vector PublicKey::applyNormalObfuscator(std::size_t sz) const { return ipcl::ippModExp(r, pown, sq); } -std::vector PublicKey::applyObfuscator(std::size_t sz) const { - if (m_enable_DJN) { - return applyDjnObfuscator(sz); - } else { - return applyNormalObfuscator(sz); - } +std::vector PublicKey::applyObfuscator( + std::vector& ciphertext) const { + std::size_t sz = ciphertext.size(); + std::vector obfuscator = + m_enable_DJN ? getDJNObfuscator(sz) : getNormalObfuscator(sz); + BigNumber sq = m_nsquare; + + for (std::size_t i = 0; i < sz; ++i) + ciphertext[i] = sq.ModMul(ciphertext[i], obfuscator[i]); } void PublicKey::setRandom(const std::vector& r) { @@ -105,17 +108,17 @@ std::vector PublicKey::raw_encrypt(const std::vector& pt, std::size_t pt_size = pt.size(); std::vector ct(pt_size); - BigNumber sq = m_nsquare; for (std::size_t i = 0; i < pt_size; i++) { ct[i] = (m_n * pt[i] + 1) % m_nsquare; } if (make_secure) { - std::vector obfuscator = applyObfuscator(pt_size); + applyObfuscator(ct); + // std::vector obfuscator = applyObfuscator(pt_size); - for (std::size_t i = 0; i < pt_size; i++) - ct[i] = sq.ModMul(ct[i], obfuscator[i]); + // for (std::size_t i = 0; i < pt_size; i++) + // ct[i] = sq.ModMul(ct[i], obfuscator[i]); } return ct; } From 6975d47b6aacaaef6fe24c8e9b9d42edbe881f10 Mon Sep 17 00:00:00 2001 From: skmono Date: Tue, 30 Aug 2022 20:40:36 -0700 Subject: [PATCH 3/4] change applyObfuscator to void as it will be inline --- ipcl/include/ipcl/pub_key.hpp | 3 +-- ipcl/pub_key.cpp | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/ipcl/include/ipcl/pub_key.hpp b/ipcl/include/ipcl/pub_key.hpp index 9bdd41e..130c5bd 100644 --- a/ipcl/include/ipcl/pub_key.hpp +++ b/ipcl/include/ipcl/pub_key.hpp @@ -82,8 +82,7 @@ class PublicKey { * Apply obfuscator for ciphertext * @param[out] obfuscator output of obfuscator with random value */ - std::vector applyObfuscator( - std::vector& ciphertext) const; + void applyObfuscator(std::vector& ciphertext) const; /** * Set the Random object for ISO/IEC 18033-6 compliance check diff --git a/ipcl/pub_key.cpp b/ipcl/pub_key.cpp index 3754f46..b00f140 100644 --- a/ipcl/pub_key.cpp +++ b/ipcl/pub_key.cpp @@ -85,8 +85,7 @@ std::vector PublicKey::getNormalObfuscator(std::size_t sz) const { return ipcl::ippModExp(r, pown, sq); } -std::vector PublicKey::applyObfuscator( - std::vector& ciphertext) const { +void PublicKey::applyObfuscator(std::vector& ciphertext) const { std::size_t sz = ciphertext.size(); std::vector obfuscator = m_enable_DJN ? getDJNObfuscator(sz) : getNormalObfuscator(sz); From a81e8d418c583f2b04c30385ebb9e072b6328406 Mon Sep 17 00:00:00 2001 From: skmono Date: Tue, 30 Aug 2022 20:52:31 -0700 Subject: [PATCH 4/4] Cleanupx --- ipcl/pub_key.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/ipcl/pub_key.cpp b/ipcl/pub_key.cpp index b00f140..01f8124 100644 --- a/ipcl/pub_key.cpp +++ b/ipcl/pub_key.cpp @@ -108,17 +108,11 @@ std::vector PublicKey::raw_encrypt(const std::vector& pt, std::vector ct(pt_size); - for (std::size_t i = 0; i < pt_size; i++) { + for (std::size_t i = 0; i < pt_size; i++) ct[i] = (m_n * pt[i] + 1) % m_nsquare; - } - if (make_secure) { - applyObfuscator(ct); - // std::vector obfuscator = applyObfuscator(pt_size); + if (make_secure) applyObfuscator(ct); - // for (std::size_t i = 0; i < pt_size; i++) - // ct[i] = sq.ModMul(ct[i], obfuscator[i]); - } return ct; }