From 9d04bf58ba8ff5b70345550c08cb2eebfcf3e222 Mon Sep 17 00:00:00 2001 From: Gregory Sanders Date: Fri, 31 Mar 2017 10:58:03 -0400 Subject: [PATCH] Rangeproof validation and rewinding should fail gracefully --- src/blind.cpp | 2 +- src/script/sigcache.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/blind.cpp b/src/blind.cpp index 5d52470623..9f7c158f90 100644 --- a/src/blind.cpp +++ b/src/blind.cpp @@ -37,7 +37,7 @@ static Blind_ECC_Init ecc_init_on_load; bool UnblindConfidentialPair(const CKey &key, const CConfidentialValue& confValue, const CConfidentialAsset& confAsset, const CConfidentialNonce& nNonce, const CScript& committedScript, const std::vector& vchRangeproof, CAmount& amount_out, uint256& blinding_factor_out, CAsset& asset_out, uint256& asset_blinding_factor_out) { - if (!key.IsValid()) { + if (!key.IsValid() || vchRangeproof.size() == 0) { return false; } CPubKey ephemeral_key(nNonce.vchCommitment); diff --git a/src/script/sigcache.cpp b/src/script/sigcache.cpp index 9d7f7e6637..d7601a196c 100644 --- a/src/script/sigcache.cpp +++ b/src/script/sigcache.cpp @@ -153,6 +153,10 @@ bool CachingRangeProofChecker::VerifyRangeProof(const std::vector return true; } + if (vchRangeProof.size() == 0) { + return false; + } + uint64_t min_value, max_value; secp256k1_pedersen_commitment commit; if (secp256k1_pedersen_commitment_parse(secp256k1_ctx_verify_amounts, &commit, &vchValueCommitment[0]) != 1)