Changeset View
Changeset View
Standalone View
Standalone View
src/script/interpreter.cpp
Show First 20 Lines • Show All 922 Lines • ▼ Show 20 Lines | try { | ||||
return set_error( | return set_error( | ||||
serror, SCRIPT_ERR_INVALID_STACK_OPERATION); | serror, SCRIPT_ERR_INVALID_STACK_OPERATION); | ||||
} | } | ||||
valtype &vchSig = stacktop(-3); | valtype &vchSig = stacktop(-3); | ||||
valtype &vchMessage = stacktop(-2); | valtype &vchMessage = stacktop(-2); | ||||
valtype &vchPubKey = stacktop(-1); | valtype &vchPubKey = stacktop(-1); | ||||
// The size of the message must be 32 bytes. | |||||
if (vchMessage.size() != 32) { | |||||
return set_error(serror, | |||||
SCRIPT_ERR_INVALID_OPERAND_SIZE); | |||||
} | |||||
if (!CheckDataSignatureEncoding(vchSig, flags, | if (!CheckDataSignatureEncoding(vchSig, flags, | ||||
serror) || | serror) || | ||||
!CheckPubKeyEncoding(vchPubKey, flags, serror)) { | !CheckPubKeyEncoding(vchPubKey, flags, serror)) { | ||||
// serror is set | // serror is set | ||||
return false; | return false; | ||||
} | } | ||||
bool fSuccess = false; | bool fSuccess = false; | ||||
if (vchSig.size()) { | if (vchSig.size()) { | ||||
uint256 message(vchMessage); | CHashWriter ss(SER_GETHASH, 0); | ||||
ss << vchMessage; | |||||
uint256 message = ss.GetHash(); | |||||
CPubKey pubkey(vchPubKey); | CPubKey pubkey(vchPubKey); | ||||
fSuccess = pubkey.Verify(message, vchSig); | fSuccess = pubkey.Verify(message, vchSig); | ||||
} | } | ||||
if (!fSuccess && (flags & SCRIPT_VERIFY_NULLFAIL) && | if (!fSuccess && (flags & SCRIPT_VERIFY_NULLFAIL) && | ||||
vchSig.size()) { | vchSig.size()) { | ||||
return set_error(serror, SCRIPT_ERR_SIG_NULLFAIL); | return set_error(serror, SCRIPT_ERR_SIG_NULLFAIL); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 713 Lines • Show Last 20 Lines |