mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 06:52:36 +01:00
tests: abstract out precomputed BIP341 signature hash elements
This commit is contained in:
parent
a5bde018b4
commit
c98c53f20c
1 changed files with 20 additions and 5 deletions
|
@ -755,6 +755,21 @@ class TestFrameworkScript(unittest.TestCase):
|
||||||
for value in values:
|
for value in values:
|
||||||
self.assertEqual(CScriptNum.decode(CScriptNum.encode(CScriptNum(value))), value)
|
self.assertEqual(CScriptNum.decode(CScriptNum.encode(CScriptNum(value))), value)
|
||||||
|
|
||||||
|
def BIP341_sha_prevouts(txTo):
|
||||||
|
return sha256(b"".join(i.prevout.serialize() for i in txTo.vin))
|
||||||
|
|
||||||
|
def BIP341_sha_amounts(spent_utxos):
|
||||||
|
return sha256(b"".join(struct.pack("<q", u.nValue) for u in spent_utxos))
|
||||||
|
|
||||||
|
def BIP341_sha_scriptpubkeys(spent_utxos):
|
||||||
|
return sha256(b"".join(ser_string(u.scriptPubKey) for u in spent_utxos))
|
||||||
|
|
||||||
|
def BIP341_sha_sequences(txTo):
|
||||||
|
return sha256(b"".join(struct.pack("<I", i.nSequence) for i in txTo.vin))
|
||||||
|
|
||||||
|
def BIP341_sha_outputs(txTo):
|
||||||
|
return sha256(b"".join(o.serialize() for o in txTo.vout))
|
||||||
|
|
||||||
def TaprootSignatureMsg(txTo, spent_utxos, hash_type, input_index = 0, scriptpath = False, script = CScript(), codeseparator_pos = -1, annex = None, leaf_ver = LEAF_VERSION_TAPSCRIPT):
|
def TaprootSignatureMsg(txTo, spent_utxos, hash_type, input_index = 0, scriptpath = False, script = CScript(), codeseparator_pos = -1, annex = None, leaf_ver = LEAF_VERSION_TAPSCRIPT):
|
||||||
assert (len(txTo.vin) == len(spent_utxos))
|
assert (len(txTo.vin) == len(spent_utxos))
|
||||||
assert (input_index < len(txTo.vin))
|
assert (input_index < len(txTo.vin))
|
||||||
|
@ -765,12 +780,12 @@ def TaprootSignatureMsg(txTo, spent_utxos, hash_type, input_index = 0, scriptpat
|
||||||
ss += struct.pack("<i", txTo.nVersion)
|
ss += struct.pack("<i", txTo.nVersion)
|
||||||
ss += struct.pack("<I", txTo.nLockTime)
|
ss += struct.pack("<I", txTo.nLockTime)
|
||||||
if in_type != SIGHASH_ANYONECANPAY:
|
if in_type != SIGHASH_ANYONECANPAY:
|
||||||
ss += sha256(b"".join(i.prevout.serialize() for i in txTo.vin))
|
ss += BIP341_sha_prevouts(txTo)
|
||||||
ss += sha256(b"".join(struct.pack("<q", u.nValue) for u in spent_utxos))
|
ss += BIP341_sha_amounts(spent_utxos)
|
||||||
ss += sha256(b"".join(ser_string(u.scriptPubKey) for u in spent_utxos))
|
ss += BIP341_sha_scriptpubkeys(spent_utxos)
|
||||||
ss += sha256(b"".join(struct.pack("<I", i.nSequence) for i in txTo.vin))
|
ss += BIP341_sha_sequences(txTo)
|
||||||
if out_type == SIGHASH_ALL:
|
if out_type == SIGHASH_ALL:
|
||||||
ss += sha256(b"".join(o.serialize() for o in txTo.vout))
|
ss += BIP341_sha_outputs(txTo)
|
||||||
spend_type = 0
|
spend_type = 0
|
||||||
if annex is not None:
|
if annex is not None:
|
||||||
spend_type |= 1
|
spend_type |= 1
|
||||||
|
|
Loading…
Add table
Reference in a new issue