@ -20,8 +20,8 @@ using namespace json_spirit;
using namespace boost : : algorithm ;
using namespace boost : : algorithm ;
extern uint256 SignatureHash ( CScript scriptCode , const CTransaction & txTo , unsigned int nIn , int nHashType ) ;
extern uint256 SignatureHash ( CScript scriptCode , const CTransaction & txTo , unsigned int nIn , int nHashType ) ;
extern bool VerifyScript ( const CScript & scriptSig , const CScript & scriptPubKey , const CTransaction & txTo , unsigned int nIn ,
bool fValidatePayToScriptHash , bool fStrictEncodings , int nHashType ) ;
static const unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC ;
CScript
CScript
ParseScript ( string s )
ParseScript ( string s )
@ -143,7 +143,7 @@ BOOST_AUTO_TEST_CASE(script_valid)
CScript scriptPubKey = ParseScript ( scriptPubKeyString ) ;
CScript scriptPubKey = ParseScript ( scriptPubKeyString ) ;
CTransaction tx ;
CTransaction tx ;
BOOST_CHECK_MESSAGE ( VerifyScript ( scriptSig , scriptPubKey , tx , 0 , true , true , SIGHASH_NONE ) , strTest ) ;
BOOST_CHECK_MESSAGE ( VerifyScript ( scriptSig , scriptPubKey , tx , 0 , flags , SIGHASH_NONE ) , strTest ) ;
}
}
}
}
@ -167,7 +167,7 @@ BOOST_AUTO_TEST_CASE(script_invalid)
CScript scriptPubKey = ParseScript ( scriptPubKeyString ) ;
CScript scriptPubKey = ParseScript ( scriptPubKeyString ) ;
CTransaction tx ;
CTransaction tx ;
BOOST_CHECK_MESSAGE ( ! VerifyScript ( scriptSig , scriptPubKey , tx , 0 , true , true , SIGHASH_NONE ) , strTest ) ;
BOOST_CHECK_MESSAGE ( ! VerifyScript ( scriptSig , scriptPubKey , tx , 0 , flags , SIGHASH_NONE ) , strTest ) ;
}
}
}
}
@ -250,15 +250,15 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG12)
txTo12 . vout [ 0 ] . nValue = 1 ;
txTo12 . vout [ 0 ] . nValue = 1 ;
CScript goodsig1 = sign_multisig ( scriptPubKey12 , key1 , txTo12 ) ;
CScript goodsig1 = sign_multisig ( scriptPubKey12 , key1 , txTo12 ) ;
BOOST_CHECK ( VerifyScript ( goodsig1 , scriptPubKey12 , txTo12 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( VerifyScript ( goodsig1 , scriptPubKey12 , txTo12 , 0 , flags , 0 ) ) ;
txTo12 . vout [ 0 ] . nValue = 2 ;
txTo12 . vout [ 0 ] . nValue = 2 ;
BOOST_CHECK ( ! VerifyScript ( goodsig1 , scriptPubKey12 , txTo12 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( goodsig1 , scriptPubKey12 , txTo12 , 0 , flags , 0 ) ) ;
CScript goodsig2 = sign_multisig ( scriptPubKey12 , key2 , txTo12 ) ;
CScript goodsig2 = sign_multisig ( scriptPubKey12 , key2 , txTo12 ) ;
BOOST_CHECK ( VerifyScript ( goodsig2 , scriptPubKey12 , txTo12 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( VerifyScript ( goodsig2 , scriptPubKey12 , txTo12 , 0 , flags , 0 ) ) ;
CScript badsig1 = sign_multisig ( scriptPubKey12 , key3 , txTo12 ) ;
CScript badsig1 = sign_multisig ( scriptPubKey12 , key3 , txTo12 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig1 , scriptPubKey12 , txTo12 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig1 , scriptPubKey12 , txTo12 , 0 , flags , 0 ) ) ;
}
}
BOOST_AUTO_TEST_CASE ( script_CHECKMULTISIG23 )
BOOST_AUTO_TEST_CASE ( script_CHECKMULTISIG23 )
@ -286,46 +286,46 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23)
std : : vector < CKey > keys ;
std : : vector < CKey > keys ;
keys . push_back ( key1 ) ; keys . push_back ( key2 ) ;
keys . push_back ( key1 ) ; keys . push_back ( key2 ) ;
CScript goodsig1 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript goodsig1 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( VerifyScript ( goodsig1 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( VerifyScript ( goodsig1 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key1 ) ; keys . push_back ( key3 ) ;
keys . push_back ( key1 ) ; keys . push_back ( key3 ) ;
CScript goodsig2 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript goodsig2 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( VerifyScript ( goodsig2 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( VerifyScript ( goodsig2 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key2 ) ; keys . push_back ( key3 ) ;
keys . push_back ( key2 ) ; keys . push_back ( key3 ) ;
CScript goodsig3 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript goodsig3 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( VerifyScript ( goodsig3 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( VerifyScript ( goodsig3 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key2 ) ; keys . push_back ( key2 ) ; // Can't re-use sig
keys . push_back ( key2 ) ; keys . push_back ( key2 ) ; // Can't re-use sig
CScript badsig1 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript badsig1 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig1 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig1 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key2 ) ; keys . push_back ( key1 ) ; // sigs must be in correct order
keys . push_back ( key2 ) ; keys . push_back ( key1 ) ; // sigs must be in correct order
CScript badsig2 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript badsig2 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig2 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig2 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key3 ) ; keys . push_back ( key2 ) ; // sigs must be in correct order
keys . push_back ( key3 ) ; keys . push_back ( key2 ) ; // sigs must be in correct order
CScript badsig3 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript badsig3 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig3 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig3 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key4 ) ; keys . push_back ( key2 ) ; // sigs must match pubkeys
keys . push_back ( key4 ) ; keys . push_back ( key2 ) ; // sigs must match pubkeys
CScript badsig4 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript badsig4 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig4 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig4 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ;
keys . clear ( ) ;
keys . push_back ( key1 ) ; keys . push_back ( key4 ) ; // sigs must match pubkeys
keys . push_back ( key1 ) ; keys . push_back ( key4 ) ; // sigs must match pubkeys
CScript badsig5 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript badsig5 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig5 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig5 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
keys . clear ( ) ; // Must have signatures
keys . clear ( ) ; // Must have signatures
CScript badsig6 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
CScript badsig6 = sign_multisig ( scriptPubKey23 , keys , txTo23 ) ;
BOOST_CHECK ( ! VerifyScript ( badsig6 , scriptPubKey23 , txTo23 , 0 , true , true , 0 ) ) ;
BOOST_CHECK ( ! VerifyScript ( badsig6 , scriptPubKey23 , txTo23 , 0 , flags , 0 ) ) ;
}
}
BOOST_AUTO_TEST_CASE ( script_combineSigs )
BOOST_AUTO_TEST_CASE ( script_combineSigs )