message: tests: abstract out precomputed BIP341 signature hash elements
diff: @@ -755,6 +755,21 @@ class TestFrameworkScript(unittest.TestCase):
  for value in values:
  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):
  assert (len(txTo.vin) == len(spent_utxos))
  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.nLockTime)
  if in_type != SIGHASH_ANYONECANPAY:
  - ss += sha256(b"".join(i.prevout.serialize() for i in txTo.vin))
  - ss += sha256(b"".join(struct.pack("<q", u.nValue) for u in spent_utxos))
  - ss += sha256(b"".join(ser_string(u.scriptPubKey) for u in spent_utxos))
  - ss += sha256(b"".join(struct.pack("<I", i.nSequence) for i in txTo.vin))
  + ss += BIP341_sha_prevouts(txTo)
  + ss += BIP341_sha_amounts(spent_utxos)
  + ss += BIP341_sha_scriptpubkeys(spent_utxos)
  + ss += BIP341_sha_sequences(txTo)
  if out_type == SIGHASH_ALL:
  - ss += sha256(b"".join(o.serialize() for o in txTo.vout))
  + ss += BIP341_sha_outputs(txTo)
  spend_type = 0
  if annex is not None:
  spend_type |= 1
  