bool static IsLowDERSignature(const valtype &vchSig, ScriptError* serror) { if (!IsValidSignatureEncoding(vchSig)) { return set_error(serror, SCRIPT_ERR_SIG_DER); } std::vector<unsigned char> vchSigCopy(vchSig.begin(), vchSig.begin() + vchSig.size() - 1); if (!CPubKey::CheckLowS(vchSigCopy)) { return set_error(serror, SCRIPT_ERR_SIG_HIGH_S); } return true; }
valtype CAuxpowBuilder::buildCoinbaseData (bool header, const valtype& auxRoot, unsigned h, int nonce) { valtype res; if (header) res.insert (res.end (), pchMergedMiningHeader, pchMergedMiningHeader + sizeof (pchMergedMiningHeader)); res.insert (res.end (), auxRoot.begin (), auxRoot.end ()); int size = (1 << h); for (int i = 0; i < 4; ++i) { res.insert (res.end (), size & 0xFF); size >>= 8; } for (int i = 0; i < 4; ++i) { res.insert (res.end (), nonce & 0xFF); nonce >>= 8; } return res; }
valtype CAuxpowBuilder::buildCoinbaseData (bool header, const valtype& auxRoot, unsigned h, int nonce) { valtype res; if (header) res.insert (res.end (), UBEGIN (pchMergedMiningHeader), UEND (pchMergedMiningHeader)); res.insert (res.end (), auxRoot.begin (), auxRoot.end ()); const int size = (1 << h); res.insert (res.end (), UBEGIN (size), UEND (size)); res.insert (res.end (), UBEGIN (nonce), UEND (nonce)); return res; }