mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 04:18:10 +00:00
feat(python): add chunkify parameter to message signing/verification
This commit is contained in:
parent
18d6b4d647
commit
14335e5371
@ -234,6 +234,7 @@ def sign_message(
|
||||
message: AnyStr,
|
||||
script_type: messages.InputScriptType = messages.InputScriptType.SPENDADDRESS,
|
||||
no_script_type: bool = False,
|
||||
chunkify: bool = False,
|
||||
) -> "MessageType":
|
||||
return client.call(
|
||||
messages.SignMessage(
|
||||
@ -242,6 +243,7 @@ def sign_message(
|
||||
message=prepare_message_bytes(message),
|
||||
script_type=script_type,
|
||||
no_script_type=no_script_type,
|
||||
chunkify=chunkify,
|
||||
)
|
||||
)
|
||||
|
||||
@ -252,6 +254,7 @@ def verify_message(
|
||||
address: str,
|
||||
signature: bytes,
|
||||
message: AnyStr,
|
||||
chunkify: bool = False,
|
||||
) -> bool:
|
||||
try:
|
||||
resp = client.call(
|
||||
@ -260,6 +263,7 @@ def verify_message(
|
||||
signature=signature,
|
||||
message=prepare_message_bytes(message),
|
||||
coin_name=coin_name,
|
||||
chunkify=chunkify,
|
||||
)
|
||||
)
|
||||
except exceptions.TrezorFailure:
|
||||
|
@ -426,6 +426,7 @@ def sign_tx(client: "TrezorClient", json_file: TextIO, chunkify: bool) -> None:
|
||||
is_flag=True,
|
||||
help="Generate Electrum-compatible signature",
|
||||
)
|
||||
@click.option("-C", "--chunkify", is_flag=True)
|
||||
@click.argument("message")
|
||||
@with_client
|
||||
def sign_message(
|
||||
@ -435,13 +436,20 @@ def sign_message(
|
||||
message: str,
|
||||
script_type: Optional[messages.InputScriptType],
|
||||
electrum_compat: bool,
|
||||
chunkify: bool,
|
||||
) -> Dict[str, str]:
|
||||
"""Sign message using address of given path."""
|
||||
address_n = tools.parse_path(address)
|
||||
if script_type is None:
|
||||
script_type = guess_script_type_from_path(address_n)
|
||||
res = btc.sign_message(
|
||||
client, coin, address_n, message, script_type, electrum_compat
|
||||
client,
|
||||
coin,
|
||||
address_n,
|
||||
message,
|
||||
script_type,
|
||||
electrum_compat,
|
||||
chunkify=chunkify,
|
||||
)
|
||||
return {
|
||||
"message": message,
|
||||
@ -452,16 +460,24 @@ def sign_message(
|
||||
|
||||
@cli.command()
|
||||
@click.option("-c", "--coin", default=DEFAULT_COIN)
|
||||
@click.option("-C", "--chunkify", is_flag=True)
|
||||
@click.argument("address")
|
||||
@click.argument("signature")
|
||||
@click.argument("message")
|
||||
@with_client
|
||||
def verify_message(
|
||||
client: "TrezorClient", coin: str, address: str, signature: str, message: str
|
||||
client: "TrezorClient",
|
||||
coin: str,
|
||||
address: str,
|
||||
signature: str,
|
||||
message: str,
|
||||
chunkify: bool,
|
||||
) -> bool:
|
||||
"""Verify message."""
|
||||
signature_bytes = base64.b64decode(signature)
|
||||
return btc.verify_message(client, coin, address, signature_bytes, message)
|
||||
return btc.verify_message(
|
||||
client, coin, address, signature_bytes, message, chunkify=chunkify
|
||||
)
|
||||
|
||||
|
||||
#
|
||||
|
@ -524,13 +524,16 @@ def sign_tx(
|
||||
|
||||
@cli.command()
|
||||
@click.option("-n", "--address", required=True, help=PATH_HELP)
|
||||
@click.option("-C", "--chunkify", is_flag=True)
|
||||
@click.argument("message")
|
||||
@with_client
|
||||
def sign_message(client: "TrezorClient", address: str, message: str) -> Dict[str, str]:
|
||||
def sign_message(
|
||||
client: "TrezorClient", address: str, message: str, chunkify: bool
|
||||
) -> Dict[str, str]:
|
||||
"""Sign message with Ethereum address."""
|
||||
address_n = tools.parse_path(address)
|
||||
network = ethereum.network_from_address_n(address_n, DEFINITIONS_SOURCE)
|
||||
ret = ethereum.sign_message(client, address_n, message, network)
|
||||
ret = ethereum.sign_message(client, address_n, message, network, chunkify=chunkify)
|
||||
output = {
|
||||
"message": message,
|
||||
"address": ret.address,
|
||||
@ -576,16 +579,23 @@ def sign_typed_data(
|
||||
|
||||
|
||||
@cli.command()
|
||||
@click.option("-C", "--chunkify", is_flag=True)
|
||||
@click.argument("address")
|
||||
@click.argument("signature")
|
||||
@click.argument("message")
|
||||
@with_client
|
||||
def verify_message(
|
||||
client: "TrezorClient", address: str, signature: str, message: str
|
||||
client: "TrezorClient",
|
||||
address: str,
|
||||
signature: str,
|
||||
message: str,
|
||||
chunkify: bool,
|
||||
) -> bool:
|
||||
"""Verify message signed with Ethereum address."""
|
||||
signature_bytes = ethereum.decode_hex(signature)
|
||||
return ethereum.verify_message(client, address, signature_bytes, message)
|
||||
return ethereum.verify_message(
|
||||
client, address, signature_bytes, message, chunkify=chunkify
|
||||
)
|
||||
|
||||
|
||||
@cli.command()
|
||||
|
@ -303,12 +303,14 @@ def sign_message(
|
||||
n: "Address",
|
||||
message: AnyStr,
|
||||
encoded_network: Optional[bytes] = None,
|
||||
chunkify: bool = False,
|
||||
) -> "MessageType":
|
||||
return client.call(
|
||||
messages.EthereumSignMessage(
|
||||
address_n=n,
|
||||
message=prepare_message_bytes(message),
|
||||
encoded_network=encoded_network,
|
||||
chunkify=chunkify,
|
||||
)
|
||||
)
|
||||
|
||||
@ -389,7 +391,11 @@ def sign_typed_data(
|
||||
|
||||
|
||||
def verify_message(
|
||||
client: "TrezorClient", address: str, signature: bytes, message: AnyStr
|
||||
client: "TrezorClient",
|
||||
address: str,
|
||||
signature: bytes,
|
||||
message: AnyStr,
|
||||
chunkify: bool = False,
|
||||
) -> bool:
|
||||
try:
|
||||
resp = client.call(
|
||||
@ -397,6 +403,7 @@ def verify_message(
|
||||
address=address,
|
||||
signature=signature,
|
||||
message=prepare_message_bytes(message),
|
||||
chunkify=chunkify,
|
||||
)
|
||||
)
|
||||
except exceptions.TrezorFailure:
|
||||
|
@ -1138,6 +1138,7 @@ class SignMessage(protobuf.MessageType):
|
||||
3: protobuf.Field("coin_name", "string", repeated=False, required=False, default='Bitcoin'),
|
||||
4: protobuf.Field("script_type", "InputScriptType", repeated=False, required=False, default=InputScriptType.SPENDADDRESS),
|
||||
5: protobuf.Field("no_script_type", "bool", repeated=False, required=False, default=None),
|
||||
6: protobuf.Field("chunkify", "bool", repeated=False, required=False, default=None),
|
||||
}
|
||||
|
||||
def __init__(
|
||||
@ -1148,12 +1149,14 @@ class SignMessage(protobuf.MessageType):
|
||||
coin_name: Optional["str"] = 'Bitcoin',
|
||||
script_type: Optional["InputScriptType"] = InputScriptType.SPENDADDRESS,
|
||||
no_script_type: Optional["bool"] = None,
|
||||
chunkify: Optional["bool"] = None,
|
||||
) -> None:
|
||||
self.address_n: Sequence["int"] = address_n if address_n is not None else []
|
||||
self.message = message
|
||||
self.coin_name = coin_name
|
||||
self.script_type = script_type
|
||||
self.no_script_type = no_script_type
|
||||
self.chunkify = chunkify
|
||||
|
||||
|
||||
class MessageSignature(protobuf.MessageType):
|
||||
@ -1180,6 +1183,7 @@ class VerifyMessage(protobuf.MessageType):
|
||||
2: protobuf.Field("signature", "bytes", repeated=False, required=True),
|
||||
3: protobuf.Field("message", "bytes", repeated=False, required=True),
|
||||
4: protobuf.Field("coin_name", "string", repeated=False, required=False, default='Bitcoin'),
|
||||
5: protobuf.Field("chunkify", "bool", repeated=False, required=False, default=None),
|
||||
}
|
||||
|
||||
def __init__(
|
||||
@ -1189,11 +1193,13 @@ class VerifyMessage(protobuf.MessageType):
|
||||
signature: "bytes",
|
||||
message: "bytes",
|
||||
coin_name: Optional["str"] = 'Bitcoin',
|
||||
chunkify: Optional["bool"] = None,
|
||||
) -> None:
|
||||
self.address = address
|
||||
self.signature = signature
|
||||
self.message = message
|
||||
self.coin_name = coin_name
|
||||
self.chunkify = chunkify
|
||||
|
||||
|
||||
class SignTx(protobuf.MessageType):
|
||||
@ -5065,6 +5071,7 @@ class EthereumSignMessage(protobuf.MessageType):
|
||||
1: protobuf.Field("address_n", "uint32", repeated=True, required=False, default=None),
|
||||
2: protobuf.Field("message", "bytes", repeated=False, required=True),
|
||||
3: protobuf.Field("encoded_network", "bytes", repeated=False, required=False, default=None),
|
||||
4: protobuf.Field("chunkify", "bool", repeated=False, required=False, default=None),
|
||||
}
|
||||
|
||||
def __init__(
|
||||
@ -5073,10 +5080,12 @@ class EthereumSignMessage(protobuf.MessageType):
|
||||
message: "bytes",
|
||||
address_n: Optional[Sequence["int"]] = None,
|
||||
encoded_network: Optional["bytes"] = None,
|
||||
chunkify: Optional["bool"] = None,
|
||||
) -> None:
|
||||
self.address_n: Sequence["int"] = address_n if address_n is not None else []
|
||||
self.message = message
|
||||
self.encoded_network = encoded_network
|
||||
self.chunkify = chunkify
|
||||
|
||||
|
||||
class EthereumMessageSignature(protobuf.MessageType):
|
||||
@ -5102,6 +5111,7 @@ class EthereumVerifyMessage(protobuf.MessageType):
|
||||
2: protobuf.Field("signature", "bytes", repeated=False, required=True),
|
||||
3: protobuf.Field("message", "bytes", repeated=False, required=True),
|
||||
4: protobuf.Field("address", "string", repeated=False, required=True),
|
||||
5: protobuf.Field("chunkify", "bool", repeated=False, required=False, default=None),
|
||||
}
|
||||
|
||||
def __init__(
|
||||
@ -5110,10 +5120,12 @@ class EthereumVerifyMessage(protobuf.MessageType):
|
||||
signature: "bytes",
|
||||
message: "bytes",
|
||||
address: "str",
|
||||
chunkify: Optional["bool"] = None,
|
||||
) -> None:
|
||||
self.signature = signature
|
||||
self.message = message
|
||||
self.address = address
|
||||
self.chunkify = chunkify
|
||||
|
||||
|
||||
class EthereumSignTypedHash(protobuf.MessageType):
|
||||
|
Loading…
Reference in New Issue
Block a user