@ -306,7 +306,7 @@ public:
@@ -306,7 +306,7 @@ public:
TestBuilder & PushSig ( const CKey & key , int nHashType = SIGHASH_ALL , unsigned int lenR = 32 , unsigned int lenS = 32 )
{
uint256 hash = SignatureHash ( scriptPubKey , spendTx , 0 , nHashType ) ;
uint256 hash = SignatureHash ( scriptPubKey , spendTx , 0 , nHashType , 0 , SIGVERSION_BASE ) ;
std : : vector < unsigned char > vchSig , r , s ;
uint32_t iter = 0 ;
do {
@ -738,21 +738,21 @@ BOOST_AUTO_TEST_CASE(script_PushData)
@@ -738,21 +738,21 @@ BOOST_AUTO_TEST_CASE(script_PushData)
ScriptError err ;
vector < vector < unsigned char > > directStack ;
BOOST_CHECK ( EvalScript ( directStack , CScript ( & direct [ 0 ] , & direct [ sizeof ( direct ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , & err ) ) ;
BOOST_CHECK ( EvalScript ( directStack , CScript ( & direct [ 0 ] , & direct [ sizeof ( direct ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , SIGVERSION_BASE , & err ) ) ;
BOOST_CHECK_MESSAGE ( err = = SCRIPT_ERR_OK , ScriptErrorString ( err ) ) ;
vector < vector < unsigned char > > pushdata1Stack ;
BOOST_CHECK ( EvalScript ( pushdata1Stack , CScript ( & pushdata1 [ 0 ] , & pushdata1 [ sizeof ( pushdata1 ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , & err ) ) ;
BOOST_CHECK ( EvalScript ( pushdata1Stack , CScript ( & pushdata1 [ 0 ] , & pushdata1 [ sizeof ( pushdata1 ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , SIGVERSION_BASE , & err ) ) ;
BOOST_CHECK ( pushdata1Stack = = directStack ) ;
BOOST_CHECK_MESSAGE ( err = = SCRIPT_ERR_OK , ScriptErrorString ( err ) ) ;
vector < vector < unsigned char > > pushdata2Stack ;
BOOST_CHECK ( EvalScript ( pushdata2Stack , CScript ( & pushdata2 [ 0 ] , & pushdata2 [ sizeof ( pushdata2 ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , & err ) ) ;
BOOST_CHECK ( EvalScript ( pushdata2Stack , CScript ( & pushdata2 [ 0 ] , & pushdata2 [ sizeof ( pushdata2 ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , SIGVERSION_BASE , & err ) ) ;
BOOST_CHECK ( pushdata2Stack = = directStack ) ;
BOOST_CHECK_MESSAGE ( err = = SCRIPT_ERR_OK , ScriptErrorString ( err ) ) ;
vector < vector < unsigned char > > pushdata4Stack ;
BOOST_CHECK ( EvalScript ( pushdata4Stack , CScript ( & pushdata4 [ 0 ] , & pushdata4 [ sizeof ( pushdata4 ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , & err ) ) ;
BOOST_CHECK ( EvalScript ( pushdata4Stack , CScript ( & pushdata4 [ 0 ] , & pushdata4 [ sizeof ( pushdata4 ) ] ) , SCRIPT_VERIFY_P2SH , BaseSignatureChecker ( ) , SIGVERSION_BASE , & err ) ) ;
BOOST_CHECK ( pushdata4Stack = = directStack ) ;
BOOST_CHECK_MESSAGE ( err = = SCRIPT_ERR_OK , ScriptErrorString ( err ) ) ;
}
@ -760,7 +760,7 @@ BOOST_AUTO_TEST_CASE(script_PushData)
@@ -760,7 +760,7 @@ BOOST_AUTO_TEST_CASE(script_PushData)
CScript
sign_multisig ( CScript scriptPubKey , std : : vector < CKey > keys , CTransaction transaction )
{
uint256 hash = SignatureHash ( scriptPubKey , transaction , 0 , SIGHASH_ALL ) ;
uint256 hash = SignatureHash ( scriptPubKey , transaction , 0 , SIGHASH_ALL , 0 , SIGVERSION_BASE ) ;
CScript result ;
//
@ -891,6 +891,7 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23)
@@ -891,6 +891,7 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23)
BOOST_AUTO_TEST_CASE ( script_combineSigs )
{
// Test the CombineSignatures function
CAmount amount ;
CBasicKeyStore keystore ;
vector < CKey > keys ;
vector < CPubKey > pubkeys ;
@ -909,19 +910,19 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
@@ -909,19 +910,19 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
CScript & scriptSig = txTo . vin [ 0 ] . scriptSig ;
CScript empty ;
CScript combined = CombineSignatures ( scriptPubKey , txTo , 0 , empty , empty ) ;
CScript combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , empty , empty ) ;
BOOST_CHECK ( combined . empty ( ) ) ;
// Single signature case:
SignSignature ( keystore , txFrom , txTo , 0 ) ; // changes scriptSig
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSig , empty ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSig , empty ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , empty , scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , empty , scriptSig ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
CScript scriptSigCopy = scriptSig ;
// Signing again will give a different, valid signature:
SignSignature ( keystore , txFrom , txTo , 0 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSigCopy , scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSigCopy , scriptSig ) ;
BOOST_CHECK ( combined = = scriptSigCopy | | combined = = scriptSig ) ;
// P2SH, single-signature case:
@ -929,41 +930,41 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
@@ -929,41 +930,41 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
keystore . AddCScript ( pkSingle ) ;
scriptPubKey = GetScriptForDestination ( CScriptID ( pkSingle ) ) ;
SignSignature ( keystore , txFrom , txTo , 0 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSig , empty ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSig , empty ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , empty , scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , empty , scriptSig ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
scriptSigCopy = scriptSig ;
SignSignature ( keystore , txFrom , txTo , 0 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSigCopy , scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSigCopy , scriptSig ) ;
BOOST_CHECK ( combined = = scriptSigCopy | | combined = = scriptSig ) ;
// dummy scriptSigCopy with placeholder, should always choose non-placeholder:
scriptSigCopy = CScript ( ) < < OP_0 < < vector < unsigned char > ( pkSingle . begin ( ) , pkSingle . end ( ) ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSigCopy , scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSigCopy , scriptSig ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSig , scriptSigCopy ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSig , scriptSigCopy ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
// Hardest case: Multisig 2-of-3
scriptPubKey = GetScriptForMultisig ( 2 , pubkeys ) ;
keystore . AddCScript ( scriptPubKey ) ;
SignSignature ( keystore , txFrom , txTo , 0 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , scriptSig , empty ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , scriptSig , empty ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , empty , scriptSig ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , empty , scriptSig ) ;
BOOST_CHECK ( combined = = scriptSig ) ;
// A couple of partially-signed versions:
vector < unsigned char > sig1 ;
uint256 hash1 = SignatureHash ( scriptPubKey , txTo , 0 , SIGHASH_ALL ) ;
uint256 hash1 = SignatureHash ( scriptPubKey , txTo , 0 , SIGHASH_ALL , 0 , SIGVERSION_BASE ) ;
BOOST_CHECK ( keys [ 0 ] . Sign ( hash1 , sig1 ) ) ;
sig1 . push_back ( SIGHASH_ALL ) ;
vector < unsigned char > sig2 ;
uint256 hash2 = SignatureHash ( scriptPubKey , txTo , 0 , SIGHASH_NONE ) ;
uint256 hash2 = SignatureHash ( scriptPubKey , txTo , 0 , SIGHASH_NONE , 0 , SIGVERSION_BASE ) ;
BOOST_CHECK ( keys [ 1 ] . Sign ( hash2 , sig2 ) ) ;
sig2 . push_back ( SIGHASH_NONE ) ;
vector < unsigned char > sig3 ;
uint256 hash3 = SignatureHash ( scriptPubKey , txTo , 0 , SIGHASH_SINGLE ) ;
uint256 hash3 = SignatureHash ( scriptPubKey , txTo , 0 , SIGHASH_SINGLE , 0 , SIGVERSION_BASE ) ;
BOOST_CHECK ( keys [ 2 ] . Sign ( hash3 , sig3 ) ) ;
sig3 . push_back ( SIGHASH_SINGLE ) ;
@ -979,21 +980,21 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
@@ -979,21 +980,21 @@ BOOST_AUTO_TEST_CASE(script_combineSigs)
CScript complete13 = CScript ( ) < < OP_0 < < sig1 < < sig3 ;
CScript complete23 = CScript ( ) < < OP_0 < < sig2 < < sig3 ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial1a , partial1b ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial1a , partial1b ) ;
BOOST_CHECK ( combined = = partial1a ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial1a , partial2a ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial1a , partial2a ) ;
BOOST_CHECK ( combined = = complete12 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial2a , partial1a ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial2a , partial1a ) ;
BOOST_CHECK ( combined = = complete12 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial1b , partial2b ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial1b , partial2b ) ;
BOOST_CHECK ( combined = = complete12 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial3b , partial1b ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial3b , partial1b ) ;
BOOST_CHECK ( combined = = complete13 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial2a , partial3a ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial2a , partial3a ) ;
BOOST_CHECK ( combined = = complete23 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial3b , partial2b ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial3b , partial2b ) ;
BOOST_CHECK ( combined = = complete23 ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , partial3b , partial3a ) ;
combined = CombineSignatures ( scriptPubKey , txTo , 0 , amount , partial3b , partial3a ) ;
BOOST_CHECK ( combined = = partial3c ) ;
}