MCPcopy Create free account
hub / github.com/bitcoinxt/bitcoinxt / CheckSignatureEncoding

Function CheckSignatureEncoding

src/script/interpreter.cpp:204–231  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

202}
203
204bool CheckSignatureEncoding(const vector<unsigned char> &vchSig, unsigned int flags, ScriptError* serror) {
205 // Empty signature. Not strictly DER encoded, but allowed to provide a
206 // compact way to provide an invalid signature for use with CHECK(MULTI)SIG
207 if (vchSig.size() == 0) {
208 return true;
209 }
210 if ((flags & (SCRIPT_VERIFY_DERSIG | SCRIPT_VERIFY_LOW_S | SCRIPT_VERIFY_STRICTENC)) != 0 && !IsValidSignatureEncoding(vchSig)) {
211 return set_error(serror, SCRIPT_ERR_SIG_DER);
212 }
213 if ((flags & SCRIPT_VERIFY_LOW_S) != 0 && !IsLowDERSignature(vchSig, serror)) {
214 // serror is set
215 return false;
216 }
217 if ((flags & SCRIPT_VERIFY_STRICTENC) != 0) {
218 if (!IsDefinedHashtypeSignature(vchSig)) {
219 return set_error(serror, SCRIPT_ERR_SIG_HASHTYPE);
220 }
221 bool usesForkId = GetHashType(vchSig) & SIGHASH_FORKID;
222 bool forkIdEnabled = flags & SCRIPT_ENABLE_SIGHASH_FORKID;
223 if (!forkIdEnabled && usesForkId) {
224 return set_error(serror, SCRIPT_ERR_ILLEGAL_FORKID);
225 }
226 if (forkIdEnabled && !usesForkId) {
227 return set_error(serror, SCRIPT_ERR_MUST_USE_FORKID);
228 }
229 }
230 return true;
231}
232
233bool static CheckPubKeyEncoding(const valtype &vchSig, unsigned int flags, ScriptError* serror) {
234 if ((flags & SCRIPT_VERIFY_STRICTENC) != 0 && !IsCompressedOrUncompressedPubKey(vchSig)) {

Callers 2

ScriptToAsmStrFunction · 0.85
EvalScriptFunction · 0.85

Calls 6

IsValidSignatureEncodingFunction · 0.85
IsLowDERSignatureFunction · 0.85
GetHashTypeFunction · 0.85
set_errorFunction · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected