diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -937,9 +937,11 @@ bool fSuccess = false; if (vchSig.size()) { - CHashWriter ss(SER_GETHASH, 0); - ss << vchMessage; - uint256 message = ss.GetHash(); + valtype vchHash(32); + CSHA256() + .Write(vchMessage.data(), vchMessage.size()) + .Finalize(vchHash.data()); + uint256 message(vchHash); CPubKey pubkey(vchPubKey); fSuccess = pubkey.Verify(message, vchSig); } diff --git a/src/test/checkdatasig_tests.cpp b/src/test/checkdatasig_tests.cpp --- a/src/test/checkdatasig_tests.cpp +++ b/src/test/checkdatasig_tests.cpp @@ -104,10 +104,9 @@ // Check various pubkey encoding. const valtype message{}; - - CHashWriter ss(SER_GETHASH, 0); - ss << message; - uint256 messageHash = ss.GetHash(); + valtype vchHash(32); + CSHA256().Write(message.data(), message.size()).Finalize(vchHash.data()); + uint256 messageHash(vchHash); KeyData kd; valtype pubkey = ToByteVector(kd.pubkey); diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json --- a/src/test/data/script_tests.json +++ b/src/test/data/script_tests.json @@ -2201,21 +2201,21 @@ "P2PK REPLAY PROTECTED" ], [ - "0x46 0x304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312 0", + "0x46 0x30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG", "CHECKDATASIG,NULLFAIL,STRICTENC", "OK", "Standard CHECKDATASIG" ], [ - "0x46 0x304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312 1", + "0x46 0x30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07 1", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG NOT", "CHECKDATASIG,NULLFAIL,STRICTENC", "NULLFAIL", "CHECKDATASIG with NULLFAIL flags" ], [ - "0x46 0x304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312 1", + "0x46 0x30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07 1", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG NOT", "CHECKDATASIG,STRICTENC", "OK", @@ -2229,77 +2229,77 @@ "CHECKDATASIG empty signature" ], [ - "0x47 0x304502203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022100a81a1d08c5c192a1efc94316b5d15befece6f4cca32c143e54949cfadb245e2f 0", + "0x47 0x30450220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a4022100a31d6133ec962903e4ae68812c70550aa994f92891c9c08be802af816fd4843a 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG", "CHECKDATASIG,NULLFAIL,STRICTENC", "OK", "CHECKDATASIG with High S but no Low S" ], [ - "0x47 0x304502203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022100a81a1d08c5c192a1efc94316b5d15befece6f4cca32c143e54949cfadb245e2f 0", + "0x47 0x30450220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a4022100a31d6133ec962903e4ae68812c70550aa994f92891c9c08be802af816fd4843a 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG", "CHECKDATASIG,LOW_S,NULLFAIL,STRICTENC", "SIG_HIGH_S", "CHECKDATASIG with High S" ], [ - "0x46 0x30440220ad3ed8d119bcbc02c6c7b1ad02441d22f9a5afe0171b2384d7989ef2d58832ce02201074e2e35779b0d1f99b350ff0f445ee0045c5530f1dff1186547cf7cc16935b 0", + "0x46 0x3044022090c2b41ac64aea5808a991dac049bf6a98816f8610b4028cd371e68a23b0cd47022073310757507b168533cc141e3243416cf2c55e3b4525655abf5c97c8724a68aa 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG", "CHECKDATASIG,NULLFAIL", "OK", "CHECKDATASIG with too little R padding but no DERSIG" ], [ - "0x46 0x30440220ad3ed8d119bcbc02c6c7b1ad02441d22f9a5afe0171b2384d7989ef2d58832ce02201074e2e35779b0d1f99b350ff0f445ee0045c5530f1dff1186547cf7cc16935b 0", + "0x46 0x3044022090c2b41ac64aea5808a991dac049bf6a98816f8610b4028cd371e68a23b0cd47022073310757507b168533cc141e3243416cf2c55e3b4525655abf5c97c8724a68aa 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIG", "CHECKDATASIG,NULLFAIL,STRICTENC", "SIG_DER", "CHECKDATASIG with too little R padding" ], [ - "0x46 0x3044022020eaad358efbbbe38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6f466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIG", "CHECKDATASIG,NULLFAIL", "OK", "CHECKDATASIG with hybrid pubkey but no STRICTENC" ], [ - "0x46 0x3044022020eaad358efbbbe38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6f466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIG", "CHECKDATASIG,NULLFAIL,STRICTENC", "PUBKEYTYPE", "CHECKDATASIG with hybrid pubkey" ], [ - "0x46 0x3044022020eaad358efbbae38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6e466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIG NOT", "CHECKDATASIG", "OK", "CHECKDATASIG with invalid hybrid pubkey but no STRICTENC" ], [ - "0x46 0x3044022020eaad358efbbae38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6e466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIG", "CHECKDATASIG,NULLFAIL,STRICTENC", "PUBKEYTYPE", "CHECKDATASIG with invalid hybrid pubkey" ], [ - "0x46 0x304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312 0", + "0x46 0x30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL,STRICTENC", "OK", "Standard CHECKDATASIGVERIFY" ], [ - "0x46 0x304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312 1", + "0x46 0x30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07 1", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL,STRICTENC", "NULLFAIL", "CHECKDATASIGVERIFY with NULLFAIL flags" ], [ - "0x46 0x304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312 1", + "0x46 0x30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07 1", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,STRICTENC", "CHECKDATASIGVERIFY", @@ -2313,56 +2313,56 @@ "CHECKDATASIGVERIFY empty signature" ], [ - "0x47 0x304502203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022100a81a1d08c5c192a1efc94316b5d15befece6f4cca32c143e54949cfadb245e2f 0", + "0x47 0x30450220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a4022100a31d6133ec962903e4ae68812c70550aa994f92891c9c08be802af816fd4843a 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL,STRICTENC", "OK", "CHECKDATASIG with High S but no Low S" ], [ - "0x47 0x304502203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022100a81a1d08c5c192a1efc94316b5d15befece6f4cca32c143e54949cfadb245e2f 0", + "0x47 0x30450220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a4022100a31d6133ec962903e4ae68812c70550aa994f92891c9c08be802af816fd4843a 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,LOW_S,NULLFAIL,STRICTENC", "SIG_HIGH_S", "CHECKDATASIG with High S" ], [ - "0x46 0x30440220ad3ed8d119bcbc02c6c7b1ad02441d22f9a5afe0171b2384d7989ef2d58832ce02201074e2e35779b0d1f99b350ff0f445ee0045c5530f1dff1186547cf7cc16935b 0", + "0x46 0x3044022090c2b41ac64aea5808a991dac049bf6a98816f8610b4028cd371e68a23b0cd47022073310757507b168533cc141e3243416cf2c55e3b4525655abf5c97c8724a68aa 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL", "OK", "CHECKDATASIGVERIFY with too little R padding but no DERSIG" ], [ - "0x46 0x30440220ad3ed8d119bcbc02c6c7b1ad02441d22f9a5afe0171b2384d7989ef2d58832ce02201074e2e35779b0d1f99b350ff0f445ee0045c5530f1dff1186547cf7cc16935b 0", + "0x46 0x3044022090c2b41ac64aea5808a991dac049bf6a98816f8610b4028cd371e68a23b0cd47022073310757507b168533cc141e3243416cf2c55e3b4525655abf5c97c8724a68aa 0", "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL,STRICTENC", "SIG_DER", "CHECKDATASIGVERIFY with too little R padding" ], [ - "0x46 0x3044022020eaad358efbbbe38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6f466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL", "OK", "CHECKDATASIGVERIFY with hybrid pubkey but no STRICTENC" ], [ - "0x46 0x3044022020eaad358efbbbe38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6f466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL,STRICTENC", "PUBKEYTYPE", "CHECKDATASIGVERIFY with hybrid pubkey" ], [ - "0x46 0x3044022020eaad358efbbae38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6e466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIGVERIFY 1", "CHECKDATASIG", "CHECKDATASIGVERIFY", "CHECKDATASIGVERIFY with invalid hybrid pubkey but no STRICTENC" ], [ - "0x46 0x3044022020eaad358efbbae38655a0c9a1bbaa6bd85037d5c2ebb813b57dcfb55621f57202206b25bf677746f2347be832d0dba6fe80e081ba693a46222d5bdfbdb33ae2c297 0", + "0x46 0x3044022077c8d336572f6e466055b5f70f433851f8f535f6c4fc71133a6cfd71079d03b702200ed9f5eb8aa5b266abac35d416c3207e7a538bf5f37649727d7a9823b1069577 0", "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKDATASIGVERIFY 1", "CHECKDATASIG,NULLFAIL,STRICTENC", "PUBKEYTYPE", diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -1,4 +1,5 @@ // Copyright (c) 2011-2016 The Bitcoin Core developers +// Copyright (c) 2017-2018 The Bitcoin developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -344,10 +345,10 @@ TestBuilder &PushDataSig(const CKey &key, const std::vector &data, unsigned int lenR = 32, unsigned int lenS = 32) { - CHashWriter ss(SER_GETHASH, 0); - ss << data; + std::vector vchHash(32); + CSHA256().Write(data.data(), data.size()).Finalize(vchHash.data()); - DoPush(DoSign(key, ss.GetHash(), lenR, lenS)); + DoPush(DoSign(key, uint256(vchHash), lenR, lenS)); return *this; } diff --git a/test/functional/abc-checkdatasig-activation.py b/test/functional/abc-checkdatasig-activation.py --- a/test/functional/abc-checkdatasig-activation.py +++ b/test/functional/abc-checkdatasig-activation.py @@ -47,7 +47,7 @@ tx.vin = [CTxIn(COutPoint(int(utxo["txid"], 16), utxo["vout"]))] tx.vout = [] signature = bytearray.fromhex( - '304402203fcefd3a307407b8580565aa41fa57ef8fbfc9470cccab19ed111b3d009b01b8022057e5e2f73a3e6d5e1036bce94a2ea40ecdc7e81a0c1c8bfd6b3dc191f511e312') + '30440220256c12175e809381f97637933ed6ab97737d263eaaebca6add21bced67fd12a402205ce29ecc1369d6fc1b51977ed38faaf41119e3be1d7edfafd7cfaf0b6061bd07') message = bytearray.fromhex('') pubkey = bytearray.fromhex( '038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508')