def sign_transaction_input(tx, input_index, txout_script, intput_script_type, secret, compressed_pubkey=True): # Set all txin to empty txin_scripts_save = [txin.script for txin in tx.in_list] for txin in tx.in_list: txin.script = Script([]) # Set the current input script to the outpoint's script value tx.in_list[input_index].script = txout_script # Serialize and append hash type enctx = TxSerializer().serialize(tx) + b"\x01\x00\x00\x00" # Get hash and Sign txhash = doublesha256(enctx) key = KEY() key.set_secret(secret, compressed_pubkey) signature = key.sign(txhash) + "\x01" # append hash_type SIGHASH_ALL # Restore Txin scripts for txin, script_save in zip(tx.in_list, txin_scripts_save): txin.script = script_save # Set the signed script if intput_script_type == TX_PUBKEYHASH: tx.in_list[input_index].script = make_script_pubkeyhash_sig( key.get_pubkey(), signature) if intput_script_type == TX_PUBKEY: tx.in_list[input_index].script = make_script_pubkey_sig(signature)
def test_ssl_sign_verify(self): key = KEY() key.set_secret(decodehexstr("30d1d8d1d243ab41a80a3cc1481a626a137f771a636b2daca06c1f86cdfecffb")) sig = key.sign("cool") # verify on another key key2 = KEY() key2.set_pubkey(decodehexstr("030a43196c8bf389c0ce5987a3f4dac57f4ca0d9733c232659717d9404074b4504")) self.assertEquals(key2.verify("cool", sig), 1) self.assertEquals(key2.verify("coolx", sig), 0) self.assertEquals(key2.verify("cool", decodehexstr("3045022100ea3cbfca49123ecdcc419cf3277597307dca70b548ca1d4312f39186b043e86802201057af5c3889b65a59333d4f23bea915e76c2c26606dd35c57e00adf416ca31600")), 0)
def sign_transaction_input(tx, input_index, txout_script, intput_script_type, secret, compressed_pubkey=True): # Set all txin to empty txin_scripts_save = [txin.script for txin in tx.in_list] for txin in tx.in_list: txin.script = Script([]) # Set the current input script to the outpoint's script value tx.in_list[input_index].script = txout_script # Serialize and append hash type enctx = TxSerializer().serialize(tx) + b"\x01\x00\x00\x00" # Get hash and Sign txhash = doublesha256(enctx) key = KEY() key.set_secret(secret, compressed_pubkey) signature = key.sign(txhash) + "\x01" # append hash_type SIGHASH_ALL # Restore Txin scripts for txin, script_save in zip(tx.in_list, txin_scripts_save): txin.script = script_save # Set the signed script if intput_script_type == TX_PUBKEYHASH: tx.in_list[input_index].script = make_script_pubkeyhash_sig(key.get_pubkey(), signature) if intput_script_type == TX_PUBKEY: tx.in_list[input_index].script = make_script_pubkey_sig(signature)
def test_generate(self): key = KEY() key.generate() sig = key.sign("cool") self.assertEquals(key.verify("cool", sig), 1)