From 8d19e7b0683ccafab1440644cec4d6b7e12af70c Mon Sep 17 00:00:00 2001 From: n-hutton Date: Thu, 7 Jul 2022 11:10:04 +0100 Subject: [PATCH 01/10] cherrry pick fixed files --- src/libSchnorr/src/MultiSig.cpp | 2 +- src/libSchnorr/src/MultiSig_Challenge.cpp | 8 +++++++- src/libSchnorr/src/MultiSig_CommitPointHash.cpp | 13 ++++++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/libSchnorr/src/MultiSig.cpp b/src/libSchnorr/src/MultiSig.cpp index 55e279e..0dbe481 100644 --- a/src/libSchnorr/src/MultiSig.cpp +++ b/src/libSchnorr/src/MultiSig.cpp @@ -367,7 +367,7 @@ bool MultiSig::MultiSigVerify(const bytes& message, unsigned int offset, return false; } err2 = (BN_nnmod(challenge_built.get(), challenge_built.get(), - Schnorr::GetCurveOrder(), NULL) == 0); + Schnorr::GetCurveOrder(), ctx.get()) == 0); err = err || err2; if (err2) { // Challenge rebuild mod failed diff --git a/src/libSchnorr/src/MultiSig_Challenge.cpp b/src/libSchnorr/src/MultiSig_Challenge.cpp index 6a79bbd..b8c1db0 100644 --- a/src/libSchnorr/src/MultiSig_Challenge.cpp +++ b/src/libSchnorr/src/MultiSig_Challenge.cpp @@ -129,6 +129,11 @@ void Challenge::Set(const CommitPoint& aggregatedCommit, bytes buf(Schnorr::PUBKEY_COMPRESSED_SIZE_BYTES); + unique_ptr ctx(BN_CTX_new(), BN_CTX_free); + if (!ctx) { + throw std::bad_alloc(); + } + // Convert the committment to octets first if (EC_POINT_point2oct(Schnorr::GetCurveGroup(), aggregatedCommit.m_p.get(), POINT_CONVERSION_COMPRESSED, buf.data(), @@ -166,7 +171,8 @@ void Challenge::Set(const CommitPoint& aggregatedCommit, return; } - if (BN_nnmod(m_c.get(), m_c.get(), Schnorr::GetCurveOrder(), NULL) == 0) { + if (BN_nnmod(m_c.get(), m_c.get(), Schnorr::GetCurveOrder(), ctx.get()) == + 0) { // Could not reduce challenge modulo group order return; } diff --git a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp index e53ddff..cbc90aa 100644 --- a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp +++ b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp @@ -17,6 +17,7 @@ #include "MultiSig.h" #include "SchnorrInternal.h" +#include using namespace std; @@ -32,6 +33,9 @@ CommitPointHash::CommitPointHash() CommitPointHash::CommitPointHash(const CommitPoint& point) : m_h(BN_new(), BN_clear_free), m_initialized(false) { + + + std::cerr << "debug print" << std::endl; if (!constructPreChecks()) { // Memory allocation failure throw std::bad_alloc(); @@ -104,6 +108,10 @@ void CommitPointHash::Set(const CommitPoint& point) { // byte to 0x01. sha2.Update({SECOND_DOMAIN_SEPARATED_HASH_FUNCTION_BYTE}); + unique_ptr ctx(BN_CTX_new(), BN_CTX_free); + if (!ctx) { + throw std::bad_alloc(); + } // Convert the commitment to octets first if (EC_POINT_point2oct(Schnorr::GetCurveGroup(), point.m_p.get(), POINT_CONVERSION_COMPRESSED, buf.data(), @@ -123,7 +131,10 @@ void CommitPointHash::Set(const CommitPoint& point) { return; } - if (BN_nnmod(m_h.get(), m_h.get(), Schnorr::GetCurveOrder(), NULL) == 0) { + std::cerr << "KILME" << std::endl; + + if (BN_nnmod(m_h.get(), m_h.get(), Schnorr::GetCurveOrder(), ctx.get()) == + 0) { // Could not reduce hashpoint value modulo group order return; } From 455fd7265dc2641e6ebd1e51e83cad6b1003cbe6 Mon Sep 17 00:00:00 2001 From: n-hutton Date: Wed, 13 Jul 2022 21:02:44 +0100 Subject: [PATCH 02/10] schnorr fix --- src/libSchnorr/src/Schnorr_PubKey.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index 01c3b52..6e39ea1 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -113,7 +113,7 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { bool PubKey::Deserialize(const bytes& src, unsigned int offset) { shared_ptr result = - ECPOINTSerialize::GetNumber(src, offset, PUB_KEY_SIZE); + ECPOINTSerialize::GetNumber(src, offset, src.size()); if (result == nullptr) { // ECPOINTSerialize::GetNumber failed From 8266ea0365f557ce23db86a82c245fd4d6d70531 Mon Sep 17 00:00:00 2001 From: n-hutton Date: Wed, 13 Jul 2022 22:49:41 +0100 Subject: [PATCH 03/10] add debug string --- src/libSchnorr/src/Schnorr_PubKey.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index 6e39ea1..832423a 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -112,6 +112,9 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { } bool PubKey::Deserialize(const bytes& src, unsigned int offset) { + + std::cout << "debugme: nh" << std::endl; + shared_ptr result = ECPOINTSerialize::GetNumber(src, offset, src.size()); From b125d6043c68d17eddffd8eb903cc9d59a3c95ed Mon Sep 17 00:00:00 2001 From: n-hutton Date: Wed, 13 Jul 2022 23:42:50 +0100 Subject: [PATCH 04/10] fix... --- src/libSchnorr/src/Schnorr_PubKey.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index 832423a..d654f2c 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -113,8 +113,6 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { bool PubKey::Deserialize(const bytes& src, unsigned int offset) { - std::cout << "debugme: nh" << std::endl; - shared_ptr result = ECPOINTSerialize::GetNumber(src, offset, src.size()); From 7bc2dd5c3acd53017f94ac768a2dcc79cf1f06c6 Mon Sep 17 00:00:00 2001 From: n-hutton Date: Fri, 15 Jul 2022 12:21:19 +0100 Subject: [PATCH 05/10] tidy away cout --- src/libSchnorr/src/MultiSig_CommitPointHash.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp index cbc90aa..e517012 100644 --- a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp +++ b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp @@ -35,7 +35,6 @@ CommitPointHash::CommitPointHash(const CommitPoint& point) : m_h(BN_new(), BN_clear_free), m_initialized(false) { - std::cerr << "debug print" << std::endl; if (!constructPreChecks()) { // Memory allocation failure throw std::bad_alloc(); @@ -131,8 +130,6 @@ void CommitPointHash::Set(const CommitPoint& point) { return; } - std::cerr << "KILME" << std::endl; - if (BN_nnmod(m_h.get(), m_h.get(), Schnorr::GetCurveOrder(), ctx.get()) == 0) { // Could not reduce hashpoint value modulo group order From 0e6552fc0ab3c2a2a431981bc15fcfbdad41018b Mon Sep 17 00:00:00 2001 From: n-hutton Date: Fri, 15 Jul 2022 12:26:35 +0100 Subject: [PATCH 06/10] tidying --- src/libSchnorr/src/MultiSig_CommitPointHash.cpp | 1 - src/libSchnorr/src/Schnorr_PubKey.cpp | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp index e517012..a9584ac 100644 --- a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp +++ b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp @@ -17,7 +17,6 @@ #include "MultiSig.h" #include "SchnorrInternal.h" -#include using namespace std; diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index 832423a..d654f2c 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -113,8 +113,6 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { bool PubKey::Deserialize(const bytes& src, unsigned int offset) { - std::cout << "debugme: nh" << std::endl; - shared_ptr result = ECPOINTSerialize::GetNumber(src, offset, src.size()); From 8a141e6cef798dd58df43167e0bda5a02a177b67 Mon Sep 17 00:00:00 2001 From: n-hutton Date: Fri, 15 Jul 2022 12:30:31 +0100 Subject: [PATCH 07/10] style --- src/libSchnorr/src/MultiSig_CommitPointHash.cpp | 2 -- src/libSchnorr/src/Schnorr_PubKey.cpp | 1 - 2 files changed, 3 deletions(-) diff --git a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp index a9584ac..ee08e58 100644 --- a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp +++ b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp @@ -32,8 +32,6 @@ CommitPointHash::CommitPointHash() CommitPointHash::CommitPointHash(const CommitPoint& point) : m_h(BN_new(), BN_clear_free), m_initialized(false) { - - if (!constructPreChecks()) { // Memory allocation failure throw std::bad_alloc(); diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index d654f2c..6e39ea1 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -112,7 +112,6 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { } bool PubKey::Deserialize(const bytes& src, unsigned int offset) { - shared_ptr result = ECPOINTSerialize::GetNumber(src, offset, src.size()); From 66b1ae3df0a602b16fcf48f893f39903ff0da2c2 Mon Sep 17 00:00:00 2001 From: n-hutton Date: Fri, 15 Jul 2022 12:44:47 +0100 Subject: [PATCH 08/10] style.. --- src/libSchnorr/src/Schnorr_PubKey.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index d654f2c..6e39ea1 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -112,7 +112,6 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { } bool PubKey::Deserialize(const bytes& src, unsigned int offset) { - shared_ptr result = ECPOINTSerialize::GetNumber(src, offset, src.size()); From 125cd4b146338674525a90d9adaa790ea042569d Mon Sep 17 00:00:00 2001 From: n-hutton Date: Thu, 11 Aug 2022 12:06:12 +0100 Subject: [PATCH 09/10] do not include reverted files --- src/libSchnorr/src/MultiSig.cpp | 2 +- src/libSchnorr/src/MultiSig_Challenge.cpp | 8 +------- src/libSchnorr/src/MultiSig_CommitPointHash.cpp | 7 +------ 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/libSchnorr/src/MultiSig.cpp b/src/libSchnorr/src/MultiSig.cpp index 0dbe481..55e279e 100644 --- a/src/libSchnorr/src/MultiSig.cpp +++ b/src/libSchnorr/src/MultiSig.cpp @@ -367,7 +367,7 @@ bool MultiSig::MultiSigVerify(const bytes& message, unsigned int offset, return false; } err2 = (BN_nnmod(challenge_built.get(), challenge_built.get(), - Schnorr::GetCurveOrder(), ctx.get()) == 0); + Schnorr::GetCurveOrder(), NULL) == 0); err = err || err2; if (err2) { // Challenge rebuild mod failed diff --git a/src/libSchnorr/src/MultiSig_Challenge.cpp b/src/libSchnorr/src/MultiSig_Challenge.cpp index b8c1db0..6a79bbd 100644 --- a/src/libSchnorr/src/MultiSig_Challenge.cpp +++ b/src/libSchnorr/src/MultiSig_Challenge.cpp @@ -129,11 +129,6 @@ void Challenge::Set(const CommitPoint& aggregatedCommit, bytes buf(Schnorr::PUBKEY_COMPRESSED_SIZE_BYTES); - unique_ptr ctx(BN_CTX_new(), BN_CTX_free); - if (!ctx) { - throw std::bad_alloc(); - } - // Convert the committment to octets first if (EC_POINT_point2oct(Schnorr::GetCurveGroup(), aggregatedCommit.m_p.get(), POINT_CONVERSION_COMPRESSED, buf.data(), @@ -171,8 +166,7 @@ void Challenge::Set(const CommitPoint& aggregatedCommit, return; } - if (BN_nnmod(m_c.get(), m_c.get(), Schnorr::GetCurveOrder(), ctx.get()) == - 0) { + if (BN_nnmod(m_c.get(), m_c.get(), Schnorr::GetCurveOrder(), NULL) == 0) { // Could not reduce challenge modulo group order return; } diff --git a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp index ee08e58..e53ddff 100644 --- a/src/libSchnorr/src/MultiSig_CommitPointHash.cpp +++ b/src/libSchnorr/src/MultiSig_CommitPointHash.cpp @@ -104,10 +104,6 @@ void CommitPointHash::Set(const CommitPoint& point) { // byte to 0x01. sha2.Update({SECOND_DOMAIN_SEPARATED_HASH_FUNCTION_BYTE}); - unique_ptr ctx(BN_CTX_new(), BN_CTX_free); - if (!ctx) { - throw std::bad_alloc(); - } // Convert the commitment to octets first if (EC_POINT_point2oct(Schnorr::GetCurveGroup(), point.m_p.get(), POINT_CONVERSION_COMPRESSED, buf.data(), @@ -127,8 +123,7 @@ void CommitPointHash::Set(const CommitPoint& point) { return; } - if (BN_nnmod(m_h.get(), m_h.get(), Schnorr::GetCurveOrder(), ctx.get()) == - 0) { + if (BN_nnmod(m_h.get(), m_h.get(), Schnorr::GetCurveOrder(), NULL) == 0) { // Could not reduce hashpoint value modulo group order return; } From 599c0c5d168bc1afa6c09309e5b201e2282dd924 Mon Sep 17 00:00:00 2001 From: n-hutton Date: Wed, 31 Aug 2022 10:19:46 +0100 Subject: [PATCH 10/10] abort when we see a possible failure case --- src/libSchnorr/src/Schnorr_PubKey.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/libSchnorr/src/Schnorr_PubKey.cpp b/src/libSchnorr/src/Schnorr_PubKey.cpp index 6e39ea1..9a85911 100644 --- a/src/libSchnorr/src/Schnorr_PubKey.cpp +++ b/src/libSchnorr/src/Schnorr_PubKey.cpp @@ -19,6 +19,11 @@ #include #include +#include +#include +#include +#include + #include "Schnorr.h" #include "SchnorrInternal.h" @@ -112,6 +117,12 @@ bool PubKey::Serialize(bytes& dst, unsigned int offset) const { } bool PubKey::Deserialize(const bytes& src, unsigned int offset) { + + if (src.size() != PUB_KEY_SIZE && src.size() != (PUB_KEY_SIZE * 2)) { + std::cout << "Deserialized pubkey size is incorrect with size: " << src.size() << std::endl; + std::abort(); + } + shared_ptr result = ECPOINTSerialize::GetNumber(src, offset, src.size());