mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-31 09:50:58 +00:00
core/bitcoin: Implement BIP-322 SignatureProof container.
This commit is contained in:
parent
c723c78529
commit
d52de28704
@ -515,6 +515,45 @@ def output_script_paytoopreturn(data: bytes) -> bytearray:
|
|||||||
return w
|
return w
|
||||||
|
|
||||||
|
|
||||||
|
# BIP-322: SignatureProof container for scriptSig & witness
|
||||||
|
# ===
|
||||||
|
# https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki
|
||||||
|
|
||||||
|
|
||||||
|
def write_bip322_signature_proof(
|
||||||
|
w: Writer,
|
||||||
|
script_type: EnumTypeInputScriptType,
|
||||||
|
multisig: MultisigRedeemScriptType,
|
||||||
|
coin: CoinInfo,
|
||||||
|
public_key: bytes,
|
||||||
|
signature: bytes,
|
||||||
|
) -> None:
|
||||||
|
script_sig = input_derive_script(
|
||||||
|
script_type, multisig, coin, common.SIGHASH_ALL, public_key, signature
|
||||||
|
)
|
||||||
|
if script_type in common.SEGWIT_INPUT_SCRIPT_TYPES:
|
||||||
|
if multisig:
|
||||||
|
# find the place of our signature based on the public key
|
||||||
|
signature_index = multisig_pubkey_index(multisig, public_key)
|
||||||
|
witness = witness_p2wsh(
|
||||||
|
multisig, signature, signature_index, common.SIGHASH_ALL
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
witness = witness_p2wpkh(signature, public_key, common.SIGHASH_ALL)
|
||||||
|
else:
|
||||||
|
# Zero entries in witness stack.
|
||||||
|
witness = bytearray(b"\x00")
|
||||||
|
|
||||||
|
write_bytes_prefixed(w, script_sig)
|
||||||
|
w.extend(witness)
|
||||||
|
|
||||||
|
|
||||||
|
def read_bip322_signature_proof(r: BytearrayReader) -> Tuple[bytes, bytes]:
|
||||||
|
script_sig = read_bytes_prefixed(r)
|
||||||
|
witness = r.read()
|
||||||
|
return script_sig, witness
|
||||||
|
|
||||||
|
|
||||||
# Helpers
|
# Helpers
|
||||||
# ===
|
# ===
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user