aboutsummaryrefslogtreecommitdiff
path: root/src/cryptonote_core/cryptonote_core.cpp
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2022-04-05 23:56:09 -0400
committerluigi1111 <luigi1111w@gmail.com>2022-04-05 23:56:09 -0400
commitd054def63f9b8950fe20b2d8e841f5a9ae09418f (patch)
treeeae611a614dd11fb7e2a1e63bae3e9b31cbfa267 /src/cryptonote_core/cryptonote_core.cpp
parentfb2f822c5277aa06bc461664c8a31f4e6a802af6 (diff)
parent5acdd0e2cbae777155ceb40b8835947d38f94c0c (diff)
downloadmonzero-core-d054def63f9b8950fe20b2d8e841f5a9ae09418f.tar.gz
monzero-core-d054def63f9b8950fe20b2d8e841f5a9ae09418f.tar.xz
monzero-core-d054def63f9b8950fe20b2d8e841f5a9ae09418f.zip
Merge pull request #7170
bd27deb Bulletproofs+ (SarangNoether) b7713cc Precompute initial transcript hash (SarangNoether) b535d66 Updates from security audit (SarangNoether) a0d80b1 plug bulletproofs plus into consensus (moneromooo-monero) 75bd004 ringct: a few minor optimizations from review (moneromooo-monero) a345060 ringct: port some of vtnerd's review changes from BP+ to BP (moneromooo-monero) 4c94cfe store outPk/8 in the tx for speed (moneromooo-monero) 5acdd0e bulletproofs+: some minor cleanup from vtnerd's review (moneromooo-monero)
Diffstat (limited to 'src/cryptonote_core/cryptonote_core.cpp')
-rw-r--r--src/cryptonote_core/cryptonote_core.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp
index 4c6536318..1da4e2d41 100644
--- a/src/cryptonote_core/cryptonote_core.cpp
+++ b/src/cryptonote_core/cryptonote_core.cpp
@@ -879,6 +879,16 @@ namespace cryptonote
return true;
}
//-----------------------------------------------------------------------------------------------
+ static bool is_canonical_bulletproof_plus_layout(const std::vector<rct::BulletproofPlus> &proofs)
+ {
+ if (proofs.size() != 1)
+ return false;
+ const size_t sz = proofs[0].V.size();
+ if (sz == 0 || sz > BULLETPROOF_PLUS_MAX_OUTPUTS)
+ return false;
+ return true;
+ }
+ //-----------------------------------------------------------------------------------------------
bool core::handle_incoming_tx_accumulated_batch(std::vector<tx_verification_batch_info> &tx_info, bool keeped_by_block)
{
bool ret = true;
@@ -943,6 +953,17 @@ namespace cryptonote
}
rvv.push_back(&rv); // delayed batch verification
break;
+ case rct::RCTTypeBulletproofPlus:
+ if (!is_canonical_bulletproof_plus_layout(rv.p.bulletproofs_plus))
+ {
+ MERROR_VER("Bulletproof_plus does not have canonical form");
+ set_semantics_failed(tx_info[n].tx_hash);
+ tx_info[n].tvc.m_verifivation_failed = true;
+ tx_info[n].result = false;
+ break;
+ }
+ rvv.push_back(&rv); // delayed batch verification
+ break;
default:
MERROR_VER("Unknown rct type: " << rv.type);
set_semantics_failed(tx_info[n].tx_hash);
@@ -960,7 +981,7 @@ namespace cryptonote
{
if (!tx_info[n].result)
continue;
- if (tx_info[n].tx->rct_signatures.type != rct::RCTTypeBulletproof && tx_info[n].tx->rct_signatures.type != rct::RCTTypeBulletproof2 && tx_info[n].tx->rct_signatures.type != rct::RCTTypeCLSAG)
+ if (tx_info[n].tx->rct_signatures.type != rct::RCTTypeBulletproof && tx_info[n].tx->rct_signatures.type != rct::RCTTypeBulletproof2 && tx_info[n].tx->rct_signatures.type != rct::RCTTypeCLSAG && tx_info[n].tx->rct_signatures.type != rct::RCTTypeBulletproofPlus)
continue;
if (assumed_bad || !rct::verRctSemanticsSimple(tx_info[n].tx->rct_signatures))
{