mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-23 14:58:09 +00:00
refactor(core): Rename bitcoin_varint to compact_size.
This commit is contained in:
parent
a5824ed1ff
commit
f17a435cdf
@ -7,13 +7,13 @@ from trezor.enums import InputScriptType
|
||||
from trezor.utils import HashWriter
|
||||
|
||||
from apps.bitcoin.writers import (
|
||||
write_bitcoin_varint,
|
||||
write_bytes_fixed,
|
||||
write_bytes_prefixed,
|
||||
write_compact_size,
|
||||
write_uint8,
|
||||
)
|
||||
from apps.common.keychain import Keychain
|
||||
from apps.common.readers import read_bitcoin_varint
|
||||
from apps.common.readers import read_compact_size
|
||||
|
||||
from . import common
|
||||
from .scripts import read_bip322_signature_proof, write_bip322_signature_proof
|
||||
@ -51,7 +51,7 @@ def generate_proof(
|
||||
|
||||
write_bytes_fixed(proof, _VERSION_MAGIC, 4)
|
||||
write_uint8(proof, flags)
|
||||
write_bitcoin_varint(proof, len(ownership_ids))
|
||||
write_compact_size(proof, len(ownership_ids))
|
||||
for ownership_id in ownership_ids:
|
||||
write_bytes_fixed(proof, ownership_id, _OWNERSHIP_ID_LEN)
|
||||
|
||||
@ -94,7 +94,7 @@ def verify_nonownership(
|
||||
raise wire.DataError("Unknown flags in proof of ownership")
|
||||
|
||||
# Determine whether our ownership ID appears in the proof.
|
||||
id_count = read_bitcoin_varint(r)
|
||||
id_count = read_compact_size(r)
|
||||
ownership_id = get_identifier(script_pubkey, keychain)
|
||||
not_owned = True
|
||||
for _ in range(id_count):
|
||||
@ -134,7 +134,7 @@ def read_scriptsig_witness(ownership_proof: bytes) -> tuple[memoryview, memoryvi
|
||||
raise wire.DataError("Unknown flags in proof of ownership")
|
||||
|
||||
# Skip ownership IDs.
|
||||
id_count = read_bitcoin_varint(r)
|
||||
id_count = read_compact_size(r)
|
||||
r.read_memoryview(_OWNERSHIP_ID_LEN * id_count)
|
||||
|
||||
return read_bip322_signature_proof(r)
|
||||
|
@ -1,10 +1,10 @@
|
||||
from trezor.utils import BufferReader
|
||||
|
||||
from apps.common.readers import read_bitcoin_varint
|
||||
from apps.common.readers import read_compact_size
|
||||
|
||||
|
||||
def read_memoryview_prefixed(r: BufferReader) -> memoryview:
|
||||
n = read_bitcoin_varint(r)
|
||||
n = read_compact_size(r)
|
||||
return r.read_memoryview(n)
|
||||
|
||||
|
||||
|
@ -6,8 +6,8 @@ from trezor.crypto.hashlib import sha256
|
||||
from trezor.enums import InputScriptType
|
||||
|
||||
from apps.common import address_type
|
||||
from apps.common.readers import read_bitcoin_varint
|
||||
from apps.common.writers import write_bitcoin_varint
|
||||
from apps.common.readers import read_compact_size
|
||||
from apps.common.writers import write_compact_size
|
||||
|
||||
from . import common
|
||||
from .common import SigHashType
|
||||
@ -155,7 +155,7 @@ def write_bip143_script_code_prefixed(
|
||||
def write_input_script_p2pkh_or_p2sh_prefixed(
|
||||
w: Writer, pubkey: bytes, signature: bytes, sighash_type: SigHashType
|
||||
) -> None:
|
||||
write_bitcoin_varint(w, 1 + len(signature) + 1 + 1 + len(pubkey))
|
||||
write_compact_size(w, 1 + len(signature) + 1 + 1 + len(pubkey))
|
||||
append_signature(w, signature, sighash_type)
|
||||
append_pubkey(w, pubkey)
|
||||
|
||||
@ -183,7 +183,7 @@ def write_output_script_p2pkh(
|
||||
w: Writer, pubkeyhash: bytes, prefixed: bool = False
|
||||
) -> None:
|
||||
if prefixed:
|
||||
write_bitcoin_varint(w, 25)
|
||||
write_compact_size(w, 25)
|
||||
w.append(0x76) # OP_DUP
|
||||
w.append(0xA9) # OP_HASH160
|
||||
w.append(0x14) # OP_DATA_20
|
||||
@ -281,7 +281,7 @@ def write_input_script_p2wpkh_in_p2sh(
|
||||
# 16 00 14 <pubkeyhash>
|
||||
# Signature is moved to the witness.
|
||||
if prefixed:
|
||||
write_bitcoin_varint(w, 23)
|
||||
write_compact_size(w, 23)
|
||||
|
||||
w.append(0x16) # length of the data
|
||||
w.append(0x00) # witness version byte
|
||||
@ -303,7 +303,7 @@ def write_input_script_p2wsh_in_p2sh(
|
||||
# 22 00 20 <redeem script hash>
|
||||
# Signature is moved to the witness.
|
||||
if prefixed:
|
||||
write_bitcoin_varint(w, 35)
|
||||
write_compact_size(w, 35)
|
||||
|
||||
w.append(0x22) # length of the data
|
||||
w.append(0x00) # witness version byte
|
||||
@ -318,7 +318,7 @@ def write_input_script_p2wsh_in_p2sh(
|
||||
def write_witness_p2wpkh(
|
||||
w: Writer, signature: bytes, pubkey: bytes, sighash_type: SigHashType
|
||||
) -> None:
|
||||
write_bitcoin_varint(w, 0x02) # num of segwit items, in P2WPKH it's always 2
|
||||
write_compact_size(w, 0x02) # num of segwit items, in P2WPKH it's always 2
|
||||
write_signature_prefixed(w, signature, sighash_type)
|
||||
write_bytes_prefixed(w, pubkey)
|
||||
|
||||
@ -331,7 +331,7 @@ def parse_witness_p2wpkh(witness: bytes) -> tuple[memoryview, memoryview, SigHas
|
||||
# num of stack items, in P2WPKH it's always 2
|
||||
raise ValueError
|
||||
|
||||
n = read_bitcoin_varint(r)
|
||||
n = read_compact_size(r)
|
||||
signature = r.read_memoryview(n - 1)
|
||||
sighash_type = SigHashType.from_int(r.get())
|
||||
|
||||
@ -363,12 +363,12 @@ def write_witness_multisig(
|
||||
|
||||
# witness program + signatures + redeem script
|
||||
num_of_witness_items = 1 + sum(1 for s in signatures if s) + 1
|
||||
write_bitcoin_varint(w, num_of_witness_items)
|
||||
write_compact_size(w, num_of_witness_items)
|
||||
|
||||
# Starts with OP_FALSE because of an old OP_CHECKMULTISIG bug, which
|
||||
# consumes one additional item on the stack:
|
||||
# https://bitcoin.org/en/developer-guide#standard-transactions
|
||||
write_bitcoin_varint(w, 0)
|
||||
write_compact_size(w, 0)
|
||||
|
||||
for s in signatures:
|
||||
if s:
|
||||
@ -386,7 +386,7 @@ def parse_witness_multisig(
|
||||
r = utils.BufferReader(witness)
|
||||
|
||||
# Get number of witness stack items.
|
||||
item_count = read_bitcoin_varint(r)
|
||||
item_count = read_compact_size(r)
|
||||
|
||||
# Skip over OP_FALSE, which is due to the old OP_CHECKMULTISIG bug.
|
||||
if r.get() != 0:
|
||||
@ -394,7 +394,7 @@ def parse_witness_multisig(
|
||||
|
||||
signatures = []
|
||||
for _ in range(item_count - 2):
|
||||
n = read_bitcoin_varint(r)
|
||||
n = read_compact_size(r)
|
||||
signature = r.read_memoryview(n - 1)
|
||||
sighash_type = SigHashType.from_int(r.get())
|
||||
signatures.append((signature, sighash_type))
|
||||
@ -414,7 +414,7 @@ def parse_witness_multisig(
|
||||
|
||||
def write_witness_p2tr(w: Writer, signature: bytes, sighash_type: SigHashType) -> None:
|
||||
# Taproot key path spending without annex.
|
||||
write_bitcoin_varint(w, 0x01) # num of segwit items
|
||||
write_compact_size(w, 0x01) # num of segwit items
|
||||
write_signature_prefixed(w, signature, sighash_type)
|
||||
|
||||
|
||||
@ -426,7 +426,7 @@ def parse_witness_p2tr(witness: bytes) -> tuple[memoryview, SigHashType]:
|
||||
# Only Taproot key path spending without annex is supported.
|
||||
raise ValueError
|
||||
|
||||
n = read_bitcoin_varint(r)
|
||||
n = read_compact_size(r)
|
||||
if n not in (64, 65):
|
||||
raise ValueError
|
||||
|
||||
@ -473,7 +473,7 @@ def write_input_script_multisig_prefixed(
|
||||
if s:
|
||||
total_length += 1 + len(s) + 1 # length, signature, sighash_type
|
||||
total_length += op_push_length(redeem_script_length) + redeem_script_length
|
||||
write_bitcoin_varint(w, total_length)
|
||||
write_compact_size(w, total_length)
|
||||
|
||||
# Starts with OP_FALSE because of an old OP_CHECKMULTISIG bug, which
|
||||
# consumes one additional item on the stack:
|
||||
@ -536,7 +536,7 @@ def write_output_script_multisig(
|
||||
raise wire.DataError("Invalid multisig parameters")
|
||||
|
||||
if prefixed:
|
||||
write_bitcoin_varint(w, output_script_multisig_length(pubkeys, m))
|
||||
write_compact_size(w, output_script_multisig_length(pubkeys, m))
|
||||
|
||||
w.append(0x50 + m) # numbers 1 to 16 are pushed as 0x50 + value
|
||||
for p in pubkeys:
|
||||
@ -644,7 +644,7 @@ def write_signature_prefixed(
|
||||
if sighash_type != SigHashType.SIGHASH_ALL_TAPROOT:
|
||||
length += 1
|
||||
|
||||
write_bitcoin_varint(w, length)
|
||||
write_compact_size(w, length)
|
||||
write_bytes_unchecked(w, signature)
|
||||
if sighash_type != SigHashType.SIGHASH_ALL_TAPROOT:
|
||||
w.append(sighash_type)
|
||||
|
@ -15,7 +15,7 @@ from .scripts import ( # noqa: F401
|
||||
write_output_script_multisig,
|
||||
write_output_script_p2pkh,
|
||||
)
|
||||
from .writers import op_push_length, write_bitcoin_varint, write_op_push
|
||||
from .writers import op_push_length, write_compact_size, write_op_push
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from trezor.messages import MultisigRedeemScriptType
|
||||
@ -73,7 +73,7 @@ def write_input_script_multisig_prefixed(
|
||||
if s:
|
||||
total_length += 1 + len(s) + 1 # length, signature, hash_type
|
||||
total_length += op_push_length(redeem_script_length) + redeem_script_length
|
||||
write_bitcoin_varint(w, total_length)
|
||||
write_compact_size(w, total_length)
|
||||
|
||||
for s in signatures:
|
||||
if s:
|
||||
@ -113,7 +113,7 @@ def output_script_sstxchange(addr: str) -> bytearray:
|
||||
# Spend from a stake revocation.
|
||||
def write_output_script_ssrtx_prefixed(w: Writer, pkh: bytes) -> None:
|
||||
utils.ensure(len(pkh) == 20)
|
||||
write_bitcoin_varint(w, 26)
|
||||
write_compact_size(w, 26)
|
||||
w.append(0xBC) # OP_SSRTX
|
||||
scripts.write_output_script_p2pkh(w, pkh)
|
||||
|
||||
@ -121,7 +121,7 @@ def write_output_script_ssrtx_prefixed(w: Writer, pkh: bytes) -> None:
|
||||
# Spend from a stake generation.
|
||||
def write_output_script_ssgen_prefixed(w: Writer, pkh: bytes) -> None:
|
||||
utils.ensure(len(pkh) == 20)
|
||||
write_bitcoin_varint(w, 26)
|
||||
write_compact_size(w, 26)
|
||||
w.append(0xBB) # OP_SSGEN
|
||||
scripts.write_output_script_p2pkh(w, pkh)
|
||||
|
||||
|
@ -7,7 +7,7 @@ from trezor.enums import InputScriptType, OutputScriptType
|
||||
from trezor.messages import TxRequest, TxRequestDetailsType, TxRequestSerializedType
|
||||
from trezor.utils import HashWriter, empty_bytearray, ensure
|
||||
|
||||
from apps.common.writers import write_bitcoin_varint
|
||||
from apps.common.writers import write_compact_size
|
||||
|
||||
from .. import addresses, common, multisig, scripts, writers
|
||||
from ..common import (
|
||||
@ -241,7 +241,7 @@ class Bitcoin:
|
||||
|
||||
async def step4_serialize_inputs(self) -> None:
|
||||
self.write_tx_header(self.serialized_tx, self.tx_info.tx, bool(self.segwit))
|
||||
write_bitcoin_varint(self.serialized_tx, self.tx_info.tx.inputs_count)
|
||||
write_compact_size(self.serialized_tx, self.tx_info.tx.inputs_count)
|
||||
for i in range(self.tx_info.tx.inputs_count):
|
||||
progress.advance()
|
||||
if i in self.external:
|
||||
@ -252,7 +252,7 @@ class Bitcoin:
|
||||
await self.sign_nonsegwit_input(i)
|
||||
|
||||
async def step5_serialize_outputs(self) -> None:
|
||||
write_bitcoin_varint(self.serialized_tx, self.tx_info.tx.outputs_count)
|
||||
write_compact_size(self.serialized_tx, self.tx_info.tx.outputs_count)
|
||||
for i in range(self.tx_info.tx.outputs_count):
|
||||
progress.advance()
|
||||
await self.serialize_output(i)
|
||||
@ -626,7 +626,7 @@ class Bitcoin:
|
||||
h_check = HashWriter(sha256())
|
||||
|
||||
self.write_tx_header(h_sign, tx_info.tx, witness_marker=False)
|
||||
write_bitcoin_varint(h_sign, tx_info.tx.inputs_count)
|
||||
write_compact_size(h_sign, tx_info.tx.inputs_count)
|
||||
|
||||
txi_sign = None
|
||||
node = None
|
||||
@ -664,7 +664,7 @@ class Bitcoin:
|
||||
if txi_sign is None:
|
||||
raise RuntimeError # index >= tx_info.tx.inputs_count
|
||||
|
||||
write_bitcoin_varint(h_sign, tx_info.tx.outputs_count)
|
||||
write_compact_size(h_sign, tx_info.tx.outputs_count)
|
||||
|
||||
for i in range(tx_info.tx.outputs_count):
|
||||
# STAGE_REQUEST_4_OUTPUT in legacy
|
||||
@ -722,7 +722,7 @@ class Bitcoin:
|
||||
|
||||
# witnesses are not included in txid hash
|
||||
self.write_tx_header(txh, tx, witness_marker=False)
|
||||
write_bitcoin_varint(txh, tx.inputs_count)
|
||||
write_compact_size(txh, tx.inputs_count)
|
||||
|
||||
for i in range(tx.inputs_count):
|
||||
# STAGE_REQUEST_3_PREV_INPUT in legacy
|
||||
@ -731,7 +731,7 @@ class Bitcoin:
|
||||
)
|
||||
self.write_tx_input(txh, txi, txi.script_sig)
|
||||
|
||||
write_bitcoin_varint(txh, tx.outputs_count)
|
||||
write_compact_size(txh, tx.outputs_count)
|
||||
|
||||
script_pubkey: bytes | None = None
|
||||
for i in range(tx.outputs_count):
|
||||
@ -822,8 +822,8 @@ class Bitcoin:
|
||||
) -> None:
|
||||
writers.write_uint32(w, tx.version) # nVersion
|
||||
if witness_marker:
|
||||
write_bitcoin_varint(w, 0x00) # segwit witness marker
|
||||
write_bitcoin_varint(w, 0x01) # segwit witness flag
|
||||
write_compact_size(w, 0x00) # segwit witness marker
|
||||
write_compact_size(w, 0x01) # segwit witness flag
|
||||
|
||||
def write_tx_footer(self, w: writers.Writer, tx: SignTx | PrevTx) -> None:
|
||||
writers.write_uint32(w, tx.lock_time)
|
||||
|
@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
|
||||
from trezor import wire
|
||||
from trezor.messages import PrevTx, SignTx, TxInput
|
||||
|
||||
from apps.common.writers import write_bitcoin_varint
|
||||
from apps.common.writers import write_compact_size
|
||||
|
||||
from .. import multisig, writers
|
||||
from ..common import NONSEGWIT_INPUT_SCRIPT_TYPES, SigHashType
|
||||
@ -79,8 +79,8 @@ class Bitcoinlike(Bitcoin):
|
||||
assert tx.timestamp is not None # checked in sanitize_*
|
||||
writers.write_uint32(w, tx.timestamp)
|
||||
if witness_marker:
|
||||
write_bitcoin_varint(w, 0x00) # segwit witness marker
|
||||
write_bitcoin_varint(w, 0x01) # segwit witness flag
|
||||
write_compact_size(w, 0x00) # segwit witness marker
|
||||
write_compact_size(w, 0x01) # segwit witness flag
|
||||
|
||||
async def write_prev_tx_footer(
|
||||
self, w: writers.Writer, tx: PrevTx, prev_hash: bytes
|
||||
|
@ -7,7 +7,7 @@ from trezor.enums import DecredStakingSpendType, InputScriptType
|
||||
from trezor.messages import PrevOutput
|
||||
from trezor.utils import HashWriter, ensure
|
||||
|
||||
from apps.common.writers import write_bitcoin_varint
|
||||
from apps.common.writers import write_compact_size
|
||||
|
||||
from .. import multisig, scripts_decred, writers
|
||||
from ..common import SigHashType, ecdsa_hash_pubkey, ecdsa_sign
|
||||
@ -96,12 +96,12 @@ class Decred(Bitcoin):
|
||||
super().__init__(tx, keychain, coin, approver)
|
||||
|
||||
self.write_tx_header(self.serialized_tx, self.tx_info.tx, witness_marker=True)
|
||||
write_bitcoin_varint(self.serialized_tx, self.tx_info.tx.inputs_count)
|
||||
write_compact_size(self.serialized_tx, self.tx_info.tx.inputs_count)
|
||||
|
||||
writers.write_uint32(
|
||||
self.h_prefix, self.tx_info.tx.version | DECRED_SERIALIZE_NO_WITNESS
|
||||
)
|
||||
write_bitcoin_varint(self.h_prefix, self.tx_info.tx.inputs_count)
|
||||
write_compact_size(self.h_prefix, self.tx_info.tx.inputs_count)
|
||||
|
||||
def create_hash_writer(self) -> HashWriter:
|
||||
return HashWriter(blake256())
|
||||
@ -110,8 +110,8 @@ class Decred(Bitcoin):
|
||||
return DecredSigHasher(self.h_prefix)
|
||||
|
||||
async def step2_approve_outputs(self) -> None:
|
||||
write_bitcoin_varint(self.serialized_tx, self.tx_info.tx.outputs_count)
|
||||
write_bitcoin_varint(self.h_prefix, self.tx_info.tx.outputs_count)
|
||||
write_compact_size(self.serialized_tx, self.tx_info.tx.outputs_count)
|
||||
write_compact_size(self.h_prefix, self.tx_info.tx.outputs_count)
|
||||
|
||||
if self.tx_info.tx.decred_staking_ticket:
|
||||
await self.approve_staking_ticket()
|
||||
@ -143,7 +143,7 @@ class Decred(Bitcoin):
|
||||
self.write_tx_output(self.serialized_tx, txo, script_pubkey)
|
||||
|
||||
async def step4_serialize_inputs(self) -> None:
|
||||
write_bitcoin_varint(self.serialized_tx, self.tx_info.tx.inputs_count)
|
||||
write_compact_size(self.serialized_tx, self.tx_info.tx.inputs_count)
|
||||
|
||||
prefix_hash = self.h_prefix.get_digest()
|
||||
|
||||
@ -161,7 +161,7 @@ class Decred(Bitcoin):
|
||||
writers.write_uint32(
|
||||
h_witness, self.tx_info.tx.version | DECRED_SERIALIZE_WITNESS_SIGNING
|
||||
)
|
||||
write_bitcoin_varint(h_witness, self.tx_info.tx.inputs_count)
|
||||
write_compact_size(h_witness, self.tx_info.tx.inputs_count)
|
||||
|
||||
for ii in range(self.tx_info.tx.inputs_count):
|
||||
if ii == i_sign:
|
||||
@ -190,7 +190,7 @@ class Decred(Bitcoin):
|
||||
else:
|
||||
raise wire.DataError("Unsupported input script type")
|
||||
else:
|
||||
write_bitcoin_varint(h_witness, 0)
|
||||
write_compact_size(h_witness, 0)
|
||||
|
||||
witness_hash = writers.get_tx_hash(
|
||||
h_witness, double=self.coin.sign_hash_double, reverse=False
|
||||
|
@ -50,7 +50,7 @@ class PaymentRequestVerifier:
|
||||
writers.write_bytes_fixed(self.h_pr, b"SL\x00\x24", 4)
|
||||
writers.write_bytes_prefixed(self.h_pr, nonce)
|
||||
writers.write_bytes_prefixed(self.h_pr, msg.recipient_name.encode())
|
||||
writers.write_bitcoin_varint(self.h_pr, len(msg.memos))
|
||||
writers.write_compact_size(self.h_pr, len(msg.memos))
|
||||
for m in msg.memos:
|
||||
if m.text_memo is not None:
|
||||
memo = m.text_memo
|
||||
|
@ -143,7 +143,7 @@ class OriginalTxInfo(TxInfoBase):
|
||||
# Transaction hasher to compute the TXID.
|
||||
self.h_tx = signer.create_hash_writer()
|
||||
signer.write_tx_header(self.h_tx, tx, witness_marker=False)
|
||||
writers.write_bitcoin_varint(self.h_tx, tx.inputs_count)
|
||||
writers.write_compact_size(self.h_tx, tx.inputs_count)
|
||||
|
||||
# The input which will be used for verification and its index in the original transaction.
|
||||
self.verification_input: TxInput | None = None
|
||||
@ -162,7 +162,7 @@ class OriginalTxInfo(TxInfoBase):
|
||||
super().add_output(txo, script_pubkey)
|
||||
|
||||
if self.index == 0:
|
||||
writers.write_bitcoin_varint(self.h_tx, self.tx.outputs_count)
|
||||
writers.write_compact_size(self.h_tx, self.tx.outputs_count)
|
||||
|
||||
writers.write_tx_output(self.h_tx, txo, script_pubkey)
|
||||
|
||||
|
@ -58,9 +58,9 @@ class TxWeightCalculator:
|
||||
n = len(i.multisig.nodes) if i.multisig.nodes else len(i.multisig.pubkeys)
|
||||
multisig_script_size = _TXSIZE_MULTISIGSCRIPT + n * (1 + _TXSIZE_PUBKEY)
|
||||
if i.script_type in common.SEGWIT_INPUT_SCRIPT_TYPES:
|
||||
multisig_script_size += self.varint_size(multisig_script_size)
|
||||
multisig_script_size += self.compact_size_len(multisig_script_size)
|
||||
else:
|
||||
multisig_script_size += self.op_push_size(multisig_script_size)
|
||||
multisig_script_size += self.op_push_len(multisig_script_size)
|
||||
|
||||
input_script_size = (
|
||||
1 # the OP_FALSE bug in multisig
|
||||
@ -75,7 +75,7 @@ class TxWeightCalculator:
|
||||
self.counter += 4 * _TXSIZE_INPUT
|
||||
|
||||
if i.script_type in common.NONSEGWIT_INPUT_SCRIPT_TYPES:
|
||||
input_script_size += self.varint_size(input_script_size)
|
||||
input_script_size += self.compact_size_len(input_script_size)
|
||||
self.counter += 4 * input_script_size
|
||||
elif i.script_type in common.SEGWIT_INPUT_SCRIPT_TYPES:
|
||||
self.segwit_inputs_count += 1
|
||||
@ -102,20 +102,22 @@ class TxWeightCalculator:
|
||||
if witness_size > 1:
|
||||
self.segwit_inputs_count += 1
|
||||
|
||||
self.counter += 4 * (self.varint_size(script_sig_size) + script_sig_size)
|
||||
self.counter += 4 * (
|
||||
self.compact_size_len(script_sig_size) + script_sig_size
|
||||
)
|
||||
self.counter += witness_size
|
||||
else:
|
||||
raise wire.DataError("Invalid script type")
|
||||
|
||||
def add_output(self, script: bytes) -> None:
|
||||
self.outputs_count += 1
|
||||
script_size = self.varint_size(len(script)) + len(script)
|
||||
script_size = self.compact_size_len(len(script)) + len(script)
|
||||
self.counter += 4 * (_TXSIZE_OUTPUT + script_size)
|
||||
|
||||
def get_total(self) -> int:
|
||||
total = self.counter
|
||||
total += 4 * self.varint_size(self.inputs_count)
|
||||
total += 4 * self.varint_size(self.outputs_count)
|
||||
total += 4 * self.compact_size_len(self.inputs_count)
|
||||
total += 4 * self.compact_size_len(self.outputs_count)
|
||||
if self.segwit_inputs_count:
|
||||
total += _TXSIZE_SEGWIT_OVERHEAD
|
||||
# add one byte of witness stack item count per non-segwit input
|
||||
@ -124,7 +126,7 @@ class TxWeightCalculator:
|
||||
return total
|
||||
|
||||
@staticmethod
|
||||
def varint_size(length: int) -> int:
|
||||
def compact_size_len(length: int) -> int:
|
||||
if length < 253:
|
||||
return 1
|
||||
if length < 0x1_0000:
|
||||
@ -132,7 +134,7 @@ class TxWeightCalculator:
|
||||
return 5
|
||||
|
||||
@staticmethod
|
||||
def op_push_size(length: int) -> int:
|
||||
def op_push_len(length: int) -> int:
|
||||
if length < 0x4C:
|
||||
return 1
|
||||
if length < 0x100:
|
||||
|
@ -9,7 +9,7 @@ from trezor.utils import HashWriter, ensure
|
||||
|
||||
from apps.common.coininfo import CoinInfo
|
||||
from apps.common.keychain import Keychain
|
||||
from apps.common.writers import write_bitcoin_varint
|
||||
from apps.common.writers import write_compact_size
|
||||
|
||||
from ..scripts import write_bip143_script_code_prefixed
|
||||
from ..writers import (
|
||||
@ -135,9 +135,9 @@ class Zcashlike(Bitcoinlike):
|
||||
self.write_tx_footer(self.serialized_tx, self.tx_info.tx)
|
||||
|
||||
write_uint64(self.serialized_tx, 0) # valueBalance
|
||||
write_bitcoin_varint(self.serialized_tx, 0) # nShieldedSpend
|
||||
write_bitcoin_varint(self.serialized_tx, 0) # nShieldedOutput
|
||||
write_bitcoin_varint(self.serialized_tx, 0) # nJoinSplit
|
||||
write_compact_size(self.serialized_tx, 0) # nShieldedSpend
|
||||
write_compact_size(self.serialized_tx, 0) # nShieldedOutput
|
||||
write_compact_size(self.serialized_tx, 0) # nJoinSplit
|
||||
|
||||
await helpers.request_tx_finish(self.tx_req)
|
||||
|
||||
|
@ -5,10 +5,10 @@ from trezor.crypto.hashlib import sha256
|
||||
from trezor.utils import ensure
|
||||
|
||||
from apps.common.writers import ( # noqa: F401
|
||||
write_bitcoin_varint,
|
||||
write_bytes_fixed,
|
||||
write_bytes_reversed,
|
||||
write_bytes_unchecked,
|
||||
write_compact_size,
|
||||
write_uint8,
|
||||
write_uint16_le,
|
||||
write_uint32_le,
|
||||
@ -34,7 +34,7 @@ TX_HASH_SIZE = const(32)
|
||||
|
||||
|
||||
def write_bytes_prefixed(w: Writer, b: bytes) -> None:
|
||||
write_bitcoin_varint(w, len(b))
|
||||
write_compact_size(w, len(b))
|
||||
write_bytes_unchecked(w, b)
|
||||
|
||||
|
||||
|
@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
|
||||
from trezor import utils, wire
|
||||
from trezor.crypto import hashlib, hmac
|
||||
|
||||
from .writers import write_bitcoin_varint, write_bytes_unchecked, write_uint32_le
|
||||
from .writers import write_bytes_unchecked, write_compact_size, write_uint32_le
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from apps.common.keychain import Keychain
|
||||
@ -27,6 +27,6 @@ def get_address_mac(address: str, slip44: int, keychain: Keychain) -> bytes:
|
||||
mac = utils.HashWriter(hmac(hmac.SHA256, node.key()))
|
||||
address_bytes = address.encode()
|
||||
write_uint32_le(mac, slip44)
|
||||
write_bitcoin_varint(mac, len(address_bytes))
|
||||
write_compact_size(mac, len(address_bytes))
|
||||
write_bytes_unchecked(mac, address_bytes)
|
||||
return mac.get_digest()
|
||||
|
@ -1,7 +1,7 @@
|
||||
from trezor.utils import BufferReader
|
||||
|
||||
|
||||
def read_bitcoin_varint(r: BufferReader) -> int:
|
||||
def read_compact_size(r: BufferReader) -> int:
|
||||
prefix = r.get()
|
||||
if prefix < 253:
|
||||
n = prefix
|
||||
@ -13,6 +13,15 @@ def read_bitcoin_varint(r: BufferReader) -> int:
|
||||
n += r.get() << 8
|
||||
n += r.get() << 16
|
||||
n += r.get() << 24
|
||||
elif prefix == 255:
|
||||
n = r.get()
|
||||
n += r.get() << 8
|
||||
n += r.get() << 16
|
||||
n += r.get() << 24
|
||||
n += r.get() << 32
|
||||
n += r.get() << 40
|
||||
n += r.get() << 48
|
||||
n += r.get() << 56
|
||||
else:
|
||||
raise ValueError
|
||||
return n
|
||||
|
@ -4,7 +4,7 @@ from ubinascii import hexlify
|
||||
from trezor import utils, wire
|
||||
from trezor.crypto.hashlib import blake256, sha256
|
||||
|
||||
from apps.common.writers import write_bitcoin_varint
|
||||
from apps.common.writers import write_compact_size
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from apps.common.coininfo import CoinInfo
|
||||
@ -17,9 +17,9 @@ def message_digest(coin: CoinInfo, message: bytes) -> bytes:
|
||||
h = utils.HashWriter(sha256())
|
||||
if not coin.signed_message_header:
|
||||
raise wire.DataError("Empty message header not allowed.")
|
||||
write_bitcoin_varint(h, len(coin.signed_message_header))
|
||||
write_compact_size(h, len(coin.signed_message_header))
|
||||
h.extend(coin.signed_message_header.encode())
|
||||
write_bitcoin_varint(h, len(message))
|
||||
write_compact_size(h, len(message))
|
||||
h.extend(message)
|
||||
ret = h.get_digest()
|
||||
if coin.sign_hash_double:
|
||||
|
@ -87,20 +87,19 @@ def write_bytes_reversed(w: Writer, b: bytes, length: int) -> int:
|
||||
return length
|
||||
|
||||
|
||||
def write_bitcoin_varint(w: Writer, n: int) -> None:
|
||||
def write_compact_size(w: Writer, n: int) -> None:
|
||||
ensure(0 <= n <= 0xFFFF_FFFF)
|
||||
if n < 253:
|
||||
w.append(n & 0xFF)
|
||||
elif n < 0x1_0000:
|
||||
w.append(253)
|
||||
w.append(n & 0xFF)
|
||||
w.append((n >> 8) & 0xFF)
|
||||
else:
|
||||
write_uint16_le(w, n)
|
||||
elif n < 0x1_0000_0000:
|
||||
w.append(254)
|
||||
w.append(n & 0xFF)
|
||||
w.append((n >> 8) & 0xFF)
|
||||
w.append((n >> 16) & 0xFF)
|
||||
w.append((n >> 24) & 0xFF)
|
||||
write_uint32_le(w, n)
|
||||
else:
|
||||
w.append(255)
|
||||
write_uint64_le(w, n)
|
||||
|
||||
|
||||
def write_uvarint(w: Writer, n: int) -> None:
|
||||
|
@ -134,7 +134,7 @@ class TestApprover(unittest.TestCase):
|
||||
writers.write_bytes_fixed(h_pr, b"SL\x00\x24", 4)
|
||||
writers.write_bytes_prefixed(h_pr, b"") # Empty nonce.
|
||||
writers.write_bytes_prefixed(h_pr, self.coordinator_name.encode())
|
||||
writers.write_bitcoin_varint(h_pr, 0) # No memos.
|
||||
writers.write_compact_size(h_pr, 0) # No memos.
|
||||
writers.write_uint32(h_pr, self.coin.slip44)
|
||||
h_outputs = HashWriter(sha256())
|
||||
for txo in outputs:
|
||||
|
Loading…
Reference in New Issue
Block a user