test: Fix ZIP 244 implementation

Script codes must be serialized in their field encoding, which
includes the CompactSize length prefix.

Co-authored-by: Jack Grigg <jack@z.cash>
This commit is contained in:
Larry Ruane 2022-01-04 17:42:47 -07:00 committed by Jack Grigg
parent dfefab2f55
commit 97a76f1b61
1 changed files with 3 additions and 3 deletions

View File

@ -15,7 +15,7 @@ import struct
from pyblake2 import blake2b from pyblake2 import blake2b
from .mininode import ser_uint256 from .mininode import ser_string, ser_uint256
from .script import ( from .script import (
SIGHASH_ANYONECANPAY, SIGHASH_ANYONECANPAY,
SIGHASH_NONE, SIGHASH_NONE,
@ -41,7 +41,7 @@ def transparent_digest(tx):
def transparent_scripts_digest(tx): def transparent_scripts_digest(tx):
digest = blake2b(digest_size=32, person=b'ZTxAuthTransHash') digest = blake2b(digest_size=32, person=b'ZTxAuthTransHash')
for x in tx.vin: for x in tx.vin:
digest.update(bytes(x.scriptSig)) digest.update(ser_string(x.scriptSig))
return digest.digest() return digest.digest()
# Sapling # Sapling
@ -288,7 +288,7 @@ def outputs_sig_digest(tx, nHashType, txin):
def txin_sig_digest(tx, txin): def txin_sig_digest(tx, txin):
digest = blake2b(digest_size=32, person=b'Zcash___TxInHash') digest = blake2b(digest_size=32, person=b'Zcash___TxInHash')
digest.update(bytes(tx.vin[txin.nIn].prevout)) digest.update(bytes(tx.vin[txin.nIn].prevout))
digest.update(bytes(txin.scriptCode)) digest.update(ser_string(txin.scriptCode))
digest.update(struct.pack('<Q', txin.amount)) digest.update(struct.pack('<Q', txin.amount))
digest.update(struct.pack('<I', tx.vin[txin.nIn].nSequence)) digest.update(struct.pack('<I', tx.vin[txin.nIn].nSequence))
return digest.digest() return digest.digest()