|
|
@ -1340,22 +1340,6 @@ bool ContextualCheckTransaction(int32_t slowflag,const CBlock *block, CBlockInde |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!(tx.IsMint() || tx.vjoinsplit.empty())) |
|
|
|
{ |
|
|
|
BOOST_STATIC_ASSERT(crypto_sign_PUBLICKEYBYTES == 32); |
|
|
|
|
|
|
|
// We rely on libsodium to check that the signature is canonical.
|
|
|
|
// https://github.com/jedisct1/libsodium/commit/62911edb7ff2275cccd74bf1c8aefcc4d76924e0
|
|
|
|
if (crypto_sign_verify_detached(&tx.joinSplitSig[0], |
|
|
|
dataToBeSigned.begin(), 32, |
|
|
|
tx.joinSplitPubKey.begin() |
|
|
|
) != 0) { |
|
|
|
return state.DoS(isInitBlockDownload() ? 0 : 100, |
|
|
|
error("CheckTransaction(): invalid joinsplit signature"), |
|
|
|
REJECT_INVALID, "bad-txns-invalid-joinsplit-signature"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (tx.IsCoinBase()) |
|
|
|
{ |
|
|
|
if (!ContextualCheckCoinbaseTransaction(slowflag,block,previndex,tx, nHeight,validateprices)) |
|
|
|