diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/db.cpp | 12 | ||||
-rw-r--r-- | src/rpcwallet.cpp | 8 | ||||
-rw-r--r-- | src/script.cpp | 5 |
3 files changed, 13 insertions, 12 deletions
diff --git a/src/db.cpp b/src/db.cpp index 8738a0af8e..cf96fe6e38 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -567,20 +567,22 @@ bool CAddrDB::Read(CAddrMan& addr) if (hashIn != hashTmp) return error("CAddrman::Read() : checksum mismatch; data corrupted"); - // de-serialize address data unsigned char pchMsgTmp[4]; try { + // de-serialize file header (pchMessageStart magic number) and ssPeers >> FLATDATA(pchMsgTmp); + + // verify the network matches ours + if (memcmp(pchMsgTmp, pchMessageStart, sizeof(pchMsgTmp))) + return error("CAddrman::Read() : invalid network magic number"); + + // de-serialize address data into one CAddrMan object ssPeers >> addr; } catch (std::exception &e) { return error("CAddrman::Read() : I/O error or stream data corrupted"); } - // finally, verify the network matches ours - if (memcmp(pchMsgTmp, pchMessageStart, sizeof(pchMsgTmp))) - return error("CAddrman::Read() : invalid network magic number"); - return true; } diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index cc2e8ab46b..6f8728e979 100644 --- a/src/rpcwallet.cpp +++ b/src/rpcwallet.cpp @@ -329,12 +329,12 @@ Value signmessage(const Array& params, bool fHelp) if (!pwalletMain->GetKey(keyID, key)) throw JSONRPCError(RPC_WALLET_ERROR, "Private key not available"); - CDataStream ss(SER_GETHASH, 0); + CHashWriter ss(SER_GETHASH, 0); ss << strMessageMagic; ss << strMessage; vector<unsigned char> vchSig; - if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig)) + if (!key.SignCompact(ss.GetHash(), vchSig)) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Sign failed"); return EncodeBase64(&vchSig[0], vchSig.size()); @@ -365,12 +365,12 @@ Value verifymessage(const Array& params, bool fHelp) if (fInvalid) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Malformed base64 encoding"); - CDataStream ss(SER_GETHASH, 0); + CHashWriter ss(SER_GETHASH, 0); ss << strMessageMagic; ss << strMessage; CKey key; - if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig)) + if (!key.SetCompactSignature(ss.GetHash(), vchSig)) return false; return (key.GetPubKey().GetID() == keyID); diff --git a/src/script.cpp b/src/script.cpp index 61112b17c0..36d208c247 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1183,10 +1183,9 @@ uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int } // Serialize and hash - CDataStream ss(SER_GETHASH, 0); - ss.reserve(10000); + CHashWriter ss(SER_GETHASH, 0); ss << txTmp << nHashType; - return Hash(ss.begin(), ss.end()); + return ss.GetHash(); } |