chore(core): remove CoSi functionality

trezorctl CoSi feature is removed from all models
pull/3551/head
obrusvit 3 months ago
parent 6084785e83
commit 7b3fa24cdc

@ -89,44 +89,3 @@ message ECDHSessionKey {
required bytes session_key = 1; // ECDH session key
optional bytes public_key = 2; // identity public key
}
/**
* Request: Ask device to commit to CoSi signing
* @start
* @next CosiCommitment
* @next Failure
*/
message CosiCommit {
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node
optional bytes data = 2 [deprecated=true]; // Data to be signed. Deprecated in 1.10.2, the field is not needed, since CoSi commitments are no longer deterministic.
}
/**
* Response: Contains a CoSi commitment
* @end
*/
message CosiCommitment {
required bytes commitment = 1; // Commitment
required bytes pubkey = 2; // Public key
}
/**
* Request: Ask device to sign using CoSi
* @start
* @next CosiSignature
* @next Failure
*/
message CosiSign {
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node
required bytes data = 2; // Data to be signed
required bytes global_commitment = 3; // Aggregated commitment
required bytes global_pubkey = 4; // Aggregated public key
}
/**
* Response: Contains a CoSi signature
* @end
*/
message CosiSignature {
required bytes signature = 1; // Signature
}

@ -169,11 +169,6 @@ enum MessageType {
MessageType_GetECDHSessionKey = 61 [(bitcoin_only) = true, (wire_in) = true];
MessageType_ECDHSessionKey = 62 [(bitcoin_only) = true, (wire_out) = true];
MessageType_CosiCommit = 71 [(bitcoin_only) = true, (wire_in) = true];
MessageType_CosiCommitment = 72 [(bitcoin_only) = true, (wire_out) = true];
MessageType_CosiSign = 73 [(bitcoin_only) = true, (wire_in) = true];
MessageType_CosiSignature = 74 [(bitcoin_only) = true, (wire_out) = true];
// Debug
MessageType_DebugLinkDecision = 100 [(bitcoin_only) = true, (wire_debug_in) = true, (wire_tiny) = true, (wire_no_fsm) = true];
MessageType_DebugLinkGetState = 101 [(bitcoin_only) = true, (wire_debug_in) = true, (wire_tiny) = true];

@ -0,0 +1 @@
CoSi functionality

@ -359,8 +359,6 @@ apps.misc
import apps.misc
apps.misc.cipher_key_value
import apps.misc.cipher_key_value
apps.misc.cosi_commit
import apps.misc.cosi_commit
apps.misc.get_ecdh_session_key
import apps.misc.get_ecdh_session_key
apps.misc.get_entropy

@ -1,113 +0,0 @@
from typing import TYPE_CHECKING
from trezor.enums import ButtonRequestType
from trezor.messages import CosiCommitment, CosiSign, CosiSignature
from trezor.wire import DataError
from apps.common.paths import PathSchema, unharden
if TYPE_CHECKING:
from trezor.messages import CosiCommit
# This module implements the cosigner part of the CoSi collective signatures
# as described in https://dedis.cs.yale.edu/dissent/papers/witness.pdf
SCHEMA_SLIP18 = PathSchema.parse("m/10018'/address_index'/*'", slip44_id=())
# SLIP-26: m/10026'/model'/type'/rotation_index'
# - `model`: typically ASCII string T1B1 etc. parsed as little-endian number,
# but can also be 0 or other values. Maximum allowed value is 0x7F7F7F7F,
# the maximum 4-byte ASCII string.
# - `type`: 0 = bootloader, 1 = vendorheader, 2 = firmware, 3 = definitions, 4 = reserved
# - `rotation_index`: a fixed 0' for now
SCHEMA_SLIP26 = PathSchema.parse("m/10026'/[0-2139062143]'/[0-4]'/0'", slip44_id=())
def _decode_path(address_n: list[int]) -> str | None:
signing_types = {
0: "bootloader",
1: "vendor header",
2: "firmware",
}
if len(address_n) == 2 and SCHEMA_SLIP18.match(address_n):
signing_type = signing_types.get(unharden(address_n[1]))
if signing_type is None:
return None
return f"T2T1 {signing_type} (old-style)"
if SCHEMA_SLIP26.match(address_n):
model = unharden(address_n[1])
signing_type = unharden(address_n[2])
if model == 0 and signing_type == 3:
return "External definitions"
model_bytes = model.to_bytes(4, "little")
signing_type_str = signing_types.get(signing_type)
if (
signing_type_str is not None
and len(model_bytes) == 4
and all(0x20 <= b <= 0x7E for b in model_bytes)
):
return f"{model_bytes.decode()} {signing_type_str}"
return None
async def cosi_commit(msg: CosiCommit) -> CosiSignature:
import storage.cache as storage_cache
from trezor.crypto import cosi
from trezor.crypto.curve import ed25519
from trezor.ui.layouts import confirm_blob, confirm_text
from trezor.wire.context import call
from apps.common import paths
from apps.common.keychain import get_keychain
keychain = await get_keychain("ed25519", [SCHEMA_SLIP18, SCHEMA_SLIP26])
await paths.validate_path(keychain, msg.address_n)
node = keychain.derive(msg.address_n)
seckey = node.private_key()
pubkey = ed25519.publickey(seckey)
if not storage_cache.is_set(storage_cache.APP_MISC_COSI_COMMITMENT):
nonce, commitment = cosi.commit()
storage_cache.set(storage_cache.APP_MISC_COSI_NONCE, nonce)
storage_cache.set(storage_cache.APP_MISC_COSI_COMMITMENT, commitment)
commitment = storage_cache.get(storage_cache.APP_MISC_COSI_COMMITMENT)
if commitment is None:
raise RuntimeError
sign_msg = await call(
CosiCommitment(commitment=commitment, pubkey=pubkey), CosiSign
)
if sign_msg.address_n != msg.address_n:
raise DataError("Mismatched address_n")
path_description = _decode_path(sign_msg.address_n)
await confirm_text(
"cosi_confirm_key",
"COSI KEYS",
paths.address_n_to_str(sign_msg.address_n),
path_description,
)
await confirm_blob(
"cosi_sign",
"COSI DATA",
sign_msg.data,
br_code=ButtonRequestType.ProtectCall,
)
# clear nonce from cache
nonce = storage_cache.get(storage_cache.APP_MISC_COSI_NONCE)
storage_cache.delete(storage_cache.APP_MISC_COSI_COMMITMENT)
storage_cache.delete(storage_cache.APP_MISC_COSI_NONCE)
if nonce is None:
raise RuntimeError
signature = cosi.sign(
seckey, sign_msg.data, nonce, sign_msg.global_commitment, sign_msg.global_pubkey
)
return CosiSignature(signature=signature)

@ -93,8 +93,6 @@ def _find_message_handler_module(msg_type: int) -> str:
return "apps.misc.cipher_key_value"
if msg_type == MessageType.GetFirmwareHash:
return "apps.misc.get_firmware_hash"
if msg_type == MessageType.CosiCommit:
return "apps.misc.cosi_commit"
if not utils.BITCOIN_ONLY:
if msg_type == MessageType.SetU2FCounter:

@ -78,10 +78,6 @@ SignIdentity = 53
SignedIdentity = 54
GetECDHSessionKey = 61
ECDHSessionKey = 62
CosiCommit = 71
CosiCommitment = 72
CosiSign = 73
CosiSignature = 74
DebugLinkDecision = 100
DebugLinkGetState = 101
DebugLinkState = 102

@ -101,10 +101,6 @@ if TYPE_CHECKING:
SignedIdentity = 54
GetECDHSessionKey = 61
ECDHSessionKey = 62
CosiCommit = 71
CosiCommitment = 72
CosiSign = 73
CosiSignature = 74
DebugLinkDecision = 100
DebugLinkGetState = 101
DebugLinkState = 102

@ -2001,70 +2001,6 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["ECDHSessionKey"]:
return isinstance(msg, cls)
class CosiCommit(protobuf.MessageType):
address_n: "list[int]"
def __init__(
self,
*,
address_n: "list[int] | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["CosiCommit"]:
return isinstance(msg, cls)
class CosiCommitment(protobuf.MessageType):
commitment: "bytes"
pubkey: "bytes"
def __init__(
self,
*,
commitment: "bytes",
pubkey: "bytes",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["CosiCommitment"]:
return isinstance(msg, cls)
class CosiSign(protobuf.MessageType):
address_n: "list[int]"
data: "bytes"
global_commitment: "bytes"
global_pubkey: "bytes"
def __init__(
self,
*,
data: "bytes",
global_commitment: "bytes",
global_pubkey: "bytes",
address_n: "list[int] | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["CosiSign"]:
return isinstance(msg, cls)
class CosiSignature(protobuf.MessageType):
signature: "bytes"
def __init__(
self,
*,
signature: "bytes",
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["CosiSignature"]:
return isinstance(msg, cls)
class Initialize(protobuf.MessageType):
session_id: "bytes | None"
derive_cardano: "bool | None"

@ -24,10 +24,3 @@ GetECDHSessionKey.ecdsa_curve_name max_size:32
ECDHSessionKey.session_key max_size:65
ECDHSessionKey.public_key max_size:33
# Unused messages.
# TODO might delete as-well?
CosiCommit skip_message:true
CosiCommitment skip_message:true
CosiSign skip_message:true
CosiSignature skip_message:true

@ -1,82 +0,0 @@
# This file is part of the Trezor project.
#
# Copyright (C) 2012-2022 SatoshiLabs and contributors
#
# This library is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the License along with this library.
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
from typing import TYPE_CHECKING, Optional
import click
from .. import cosi, tools
from . import with_client
if TYPE_CHECKING:
from .. import messages
from ..client import TrezorClient
PATH_HELP = "BIP-32 path, e.g. m/10018h/0h"
@click.group(name="cosi")
def cli() -> None:
"""CoSi (Cothority / collective signing) commands."""
def cosi_warn(client: "TrezorClient") -> None:
if client.features.model == "1" and client.version < (1, 11, 2):
click.echo("WARNING: CoSi signing on your Trezor is insecure.")
click.echo("Please update your Trezor to firmware version 1.11.2 or newer.")
click.echo("If you used CoSi in the past, consider rotating your keys.")
raise click.Abort()
@cli.command()
@click.option("-n", "--address", required=True, help=PATH_HELP)
@click.argument("data_deprecated", required=False)
@with_client
def commit(
client: "TrezorClient", address: str, data_deprecated: Optional[str]
) -> "messages.CosiCommitment":
"""Ask device to commit to CoSi signing."""
cosi_warn(client)
if data_deprecated is not None:
click.echo("Warning: data argument is deprecated", err=True)
address_n = tools.parse_path(address)
return cosi.commit(client, address_n)
@cli.command()
@click.option("-n", "--address", required=True, help=PATH_HELP)
@click.argument("data")
@click.argument("global_commitment")
@click.argument("global_pubkey")
@with_client
def sign(
client: "TrezorClient",
address: str,
data: str,
global_commitment: str,
global_pubkey: str,
) -> "messages.CosiSignature":
"""Ask device to sign using CoSi."""
cosi_warn(client)
address_n = tools.parse_path(address)
return cosi.sign(
client,
address_n,
bytes.fromhex(data),
bytes.fromhex(global_commitment),
bytes.fromhex(global_pubkey),
)

@ -34,7 +34,6 @@ from . import (
binance,
btc,
cardano,
cosi,
crypto,
debug,
device,
@ -402,7 +401,6 @@ def wait_for_emulator(obj: TrezorConnection, timeout: float) -> None:
cli.add_command(binance.cli)
cli.add_command(btc.cli)
cli.add_command(cardano.cli)
cli.add_command(cosi.cli)
cli.add_command(crypto.cli)
cli.add_command(device.cli)
cli.add_command(eos.cli)

@ -14,17 +14,10 @@
# You should have received a copy of the License along with this library.
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
import warnings
from functools import reduce
from typing import TYPE_CHECKING, Iterable, Optional, Sequence, Tuple
from typing import Iterable, Sequence, Tuple
from . import _ed25519, messages
from .tools import expect
if TYPE_CHECKING:
from .client import TrezorClient
from .protobuf import MessageType
from .tools import Address
from . import _ed25519
# XXX, these could be NewType's, but that would infect users of the cosi module with these types as well.
# Unsure if we want that.
@ -111,7 +104,7 @@ def verify(
if len(selected_keys) < sigs_required:
raise _ed25519.SignatureMismatch("Insufficient number of signatures.")
global_pk = combine_keys(selected_keys)
return verify_combined(signature, digest, global_pk)
verify_combined(signature, digest, global_pk)
def pubkey_from_privkey(privkey: Ed25519PrivateKey) -> Ed25519PublicPoint:
@ -152,38 +145,3 @@ def sign_with_privkeys(digest: bytes, privkeys: Sequence[bytes]) -> bytes:
]
return combine_sig(global_R, sigs)
# ====== Client functions ====== #
@expect(messages.CosiCommitment)
def commit(
client: "TrezorClient", n: "Address", data: Optional[bytes] = None
) -> "MessageType":
if data is not None:
warnings.warn(
"'data' argument is deprecated",
DeprecationWarning,
stacklevel=2,
)
return client.call(messages.CosiCommit(address_n=n))
@expect(messages.CosiSignature)
def sign(
client: "TrezorClient",
n: "Address",
data: bytes,
global_commitment: bytes,
global_pubkey: bytes,
) -> "MessageType":
return client.call(
messages.CosiSign(
address_n=n,
data=data,
global_commitment=global_commitment,
global_pubkey=global_pubkey,
)
)

@ -109,10 +109,6 @@ class MessageType(IntEnum):
SignedIdentity = 54
GetECDHSessionKey = 61
ECDHSessionKey = 62
CosiCommit = 71
CosiCommitment = 72
CosiSign = 73
CosiSignature = 74
DebugLinkDecision = 100
DebugLinkGetState = 101
DebugLinkState = 102
@ -3068,77 +3064,6 @@ class ECDHSessionKey(protobuf.MessageType):
self.public_key = public_key
class CosiCommit(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 71
FIELDS = {
1: protobuf.Field("address_n", "uint32", repeated=True, required=False, default=None),
2: protobuf.Field("data", "bytes", repeated=False, required=False, default=None),
}
def __init__(
self,
*,
address_n: Optional[Sequence["int"]] = None,
data: Optional["bytes"] = None,
) -> None:
self.address_n: Sequence["int"] = address_n if address_n is not None else []
self.data = data
class CosiCommitment(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 72
FIELDS = {
1: protobuf.Field("commitment", "bytes", repeated=False, required=True),
2: protobuf.Field("pubkey", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
commitment: "bytes",
pubkey: "bytes",
) -> None:
self.commitment = commitment
self.pubkey = pubkey
class CosiSign(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 73
FIELDS = {
1: protobuf.Field("address_n", "uint32", repeated=True, required=False, default=None),
2: protobuf.Field("data", "bytes", repeated=False, required=True),
3: protobuf.Field("global_commitment", "bytes", repeated=False, required=True),
4: protobuf.Field("global_pubkey", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
data: "bytes",
global_commitment: "bytes",
global_pubkey: "bytes",
address_n: Optional[Sequence["int"]] = None,
) -> None:
self.address_n: Sequence["int"] = address_n if address_n is not None else []
self.data = data
self.global_commitment = global_commitment
self.global_pubkey = global_pubkey
class CosiSignature(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 74
FIELDS = {
1: protobuf.Field("signature", "bytes", repeated=False, required=True),
}
def __init__(
self,
*,
signature: "bytes",
) -> None:
self.signature = signature
class Initialize(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 0
FIELDS = {

@ -63,10 +63,6 @@ trezor_message_impl! {
SignedIdentity => MessageType_SignedIdentity,
GetECDHSessionKey => MessageType_GetECDHSessionKey,
ECDHSessionKey => MessageType_ECDHSessionKey,
CosiCommit => MessageType_CosiCommit,
CosiCommitment => MessageType_CosiCommitment,
CosiSign => MessageType_CosiSign,
CosiSignature => MessageType_CosiSignature,
DebugLinkDecision => MessageType_DebugLinkDecision,
DebugLinkGetState => MessageType_DebugLinkGetState,
DebugLinkState => MessageType_DebugLinkState,

@ -188,14 +188,6 @@ pub enum MessageType {
MessageType_GetECDHSessionKey = 61,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_ECDHSessionKey)
MessageType_ECDHSessionKey = 62,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_CosiCommit)
MessageType_CosiCommit = 71,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_CosiCommitment)
MessageType_CosiCommitment = 72,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_CosiSign)
MessageType_CosiSign = 73,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_CosiSignature)
MessageType_CosiSignature = 74,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkDecision)
MessageType_DebugLinkDecision = 100,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkGetState)
@ -605,10 +597,6 @@ impl ::protobuf::Enum for MessageType {
54 => ::std::option::Option::Some(MessageType::MessageType_SignedIdentity),
61 => ::std::option::Option::Some(MessageType::MessageType_GetECDHSessionKey),
62 => ::std::option::Option::Some(MessageType::MessageType_ECDHSessionKey),
71 => ::std::option::Option::Some(MessageType::MessageType_CosiCommit),
72 => ::std::option::Option::Some(MessageType::MessageType_CosiCommitment),
73 => ::std::option::Option::Some(MessageType::MessageType_CosiSign),
74 => ::std::option::Option::Some(MessageType::MessageType_CosiSignature),
100 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkDecision),
101 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkGetState),
102 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkState),
@ -854,10 +842,6 @@ impl ::protobuf::Enum for MessageType {
"MessageType_SignedIdentity" => ::std::option::Option::Some(MessageType::MessageType_SignedIdentity),
"MessageType_GetECDHSessionKey" => ::std::option::Option::Some(MessageType::MessageType_GetECDHSessionKey),
"MessageType_ECDHSessionKey" => ::std::option::Option::Some(MessageType::MessageType_ECDHSessionKey),
"MessageType_CosiCommit" => ::std::option::Option::Some(MessageType::MessageType_CosiCommit),
"MessageType_CosiCommitment" => ::std::option::Option::Some(MessageType::MessageType_CosiCommitment),
"MessageType_CosiSign" => ::std::option::Option::Some(MessageType::MessageType_CosiSign),
"MessageType_CosiSignature" => ::std::option::Option::Some(MessageType::MessageType_CosiSignature),
"MessageType_DebugLinkDecision" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkDecision),
"MessageType_DebugLinkGetState" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkGetState),
"MessageType_DebugLinkState" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkState),
@ -1102,10 +1086,6 @@ impl ::protobuf::Enum for MessageType {
MessageType::MessageType_SignedIdentity,
MessageType::MessageType_GetECDHSessionKey,
MessageType::MessageType_ECDHSessionKey,
MessageType::MessageType_CosiCommit,
MessageType::MessageType_CosiCommitment,
MessageType::MessageType_CosiSign,
MessageType::MessageType_CosiSignature,
MessageType::MessageType_DebugLinkDecision,
MessageType::MessageType_DebugLinkGetState,
MessageType::MessageType_DebugLinkState,
@ -1356,169 +1336,165 @@ impl ::protobuf::EnumFull for MessageType {
MessageType::MessageType_SignedIdentity => 77,
MessageType::MessageType_GetECDHSessionKey => 78,
MessageType::MessageType_ECDHSessionKey => 79,
MessageType::MessageType_CosiCommit => 80,
MessageType::MessageType_CosiCommitment => 81,
MessageType::MessageType_CosiSign => 82,
MessageType::MessageType_CosiSignature => 83,
MessageType::MessageType_DebugLinkDecision => 84,
MessageType::MessageType_DebugLinkGetState => 85,
MessageType::MessageType_DebugLinkState => 86,
MessageType::MessageType_DebugLinkStop => 87,
MessageType::MessageType_DebugLinkLog => 88,
MessageType::MessageType_DebugLinkMemoryRead => 89,
MessageType::MessageType_DebugLinkMemory => 90,
MessageType::MessageType_DebugLinkMemoryWrite => 91,
MessageType::MessageType_DebugLinkFlashErase => 92,
MessageType::MessageType_DebugLinkLayout => 93,
MessageType::MessageType_DebugLinkReseedRandom => 94,
MessageType::MessageType_DebugLinkRecordScreen => 95,
MessageType::MessageType_DebugLinkEraseSdCard => 96,
MessageType::MessageType_DebugLinkWatchLayout => 97,
MessageType::MessageType_DebugLinkResetDebugEvents => 98,
MessageType::MessageType_EthereumGetPublicKey => 99,
MessageType::MessageType_EthereumPublicKey => 100,
MessageType::MessageType_EthereumGetAddress => 101,
MessageType::MessageType_EthereumAddress => 102,
MessageType::MessageType_EthereumSignTx => 103,
MessageType::MessageType_EthereumSignTxEIP1559 => 104,
MessageType::MessageType_EthereumTxRequest => 105,
MessageType::MessageType_EthereumTxAck => 106,
MessageType::MessageType_EthereumSignMessage => 107,
MessageType::MessageType_EthereumVerifyMessage => 108,
MessageType::MessageType_EthereumMessageSignature => 109,
MessageType::MessageType_EthereumSignTypedData => 110,
MessageType::MessageType_EthereumTypedDataStructRequest => 111,
MessageType::MessageType_EthereumTypedDataStructAck => 112,
MessageType::MessageType_EthereumTypedDataValueRequest => 113,
MessageType::MessageType_EthereumTypedDataValueAck => 114,
MessageType::MessageType_EthereumTypedDataSignature => 115,
MessageType::MessageType_EthereumSignTypedHash => 116,
MessageType::MessageType_NEMGetAddress => 117,
MessageType::MessageType_NEMAddress => 118,
MessageType::MessageType_NEMSignTx => 119,
MessageType::MessageType_NEMSignedTx => 120,
MessageType::MessageType_NEMDecryptMessage => 121,
MessageType::MessageType_NEMDecryptedMessage => 122,
MessageType::MessageType_TezosGetAddress => 123,
MessageType::MessageType_TezosAddress => 124,
MessageType::MessageType_TezosSignTx => 125,
MessageType::MessageType_TezosSignedTx => 126,
MessageType::MessageType_TezosGetPublicKey => 127,
MessageType::MessageType_TezosPublicKey => 128,
MessageType::MessageType_StellarSignTx => 129,
MessageType::MessageType_StellarTxOpRequest => 130,
MessageType::MessageType_StellarGetAddress => 131,
MessageType::MessageType_StellarAddress => 132,
MessageType::MessageType_StellarCreateAccountOp => 133,
MessageType::MessageType_StellarPaymentOp => 134,
MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 135,
MessageType::MessageType_StellarManageSellOfferOp => 136,
MessageType::MessageType_StellarCreatePassiveSellOfferOp => 137,
MessageType::MessageType_StellarSetOptionsOp => 138,
MessageType::MessageType_StellarChangeTrustOp => 139,
MessageType::MessageType_StellarAllowTrustOp => 140,
MessageType::MessageType_StellarAccountMergeOp => 141,
MessageType::MessageType_StellarManageDataOp => 142,
MessageType::MessageType_StellarBumpSequenceOp => 143,
MessageType::MessageType_StellarManageBuyOfferOp => 144,
MessageType::MessageType_StellarPathPaymentStrictSendOp => 145,
MessageType::MessageType_StellarClaimClaimableBalanceOp => 146,
MessageType::MessageType_StellarSignedTx => 147,
MessageType::MessageType_CardanoGetPublicKey => 148,
MessageType::MessageType_CardanoPublicKey => 149,
MessageType::MessageType_CardanoGetAddress => 150,
MessageType::MessageType_CardanoAddress => 151,
MessageType::MessageType_CardanoTxItemAck => 152,
MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 153,
MessageType::MessageType_CardanoTxWitnessRequest => 154,
MessageType::MessageType_CardanoTxWitnessResponse => 155,
MessageType::MessageType_CardanoTxHostAck => 156,
MessageType::MessageType_CardanoTxBodyHash => 157,
MessageType::MessageType_CardanoSignTxFinished => 158,
MessageType::MessageType_CardanoSignTxInit => 159,
MessageType::MessageType_CardanoTxInput => 160,
MessageType::MessageType_CardanoTxOutput => 161,
MessageType::MessageType_CardanoAssetGroup => 162,
MessageType::MessageType_CardanoToken => 163,
MessageType::MessageType_CardanoTxCertificate => 164,
MessageType::MessageType_CardanoTxWithdrawal => 165,
MessageType::MessageType_CardanoTxAuxiliaryData => 166,
MessageType::MessageType_CardanoPoolOwner => 167,
MessageType::MessageType_CardanoPoolRelayParameters => 168,
MessageType::MessageType_CardanoGetNativeScriptHash => 169,
MessageType::MessageType_CardanoNativeScriptHash => 170,
MessageType::MessageType_CardanoTxMint => 171,
MessageType::MessageType_CardanoTxCollateralInput => 172,
MessageType::MessageType_CardanoTxRequiredSigner => 173,
MessageType::MessageType_CardanoTxInlineDatumChunk => 174,
MessageType::MessageType_CardanoTxReferenceScriptChunk => 175,
MessageType::MessageType_CardanoTxReferenceInput => 176,
MessageType::MessageType_RippleGetAddress => 177,
MessageType::MessageType_RippleAddress => 178,
MessageType::MessageType_RippleSignTx => 179,
MessageType::MessageType_RippleSignedTx => 180,
MessageType::MessageType_MoneroTransactionInitRequest => 181,
MessageType::MessageType_MoneroTransactionInitAck => 182,
MessageType::MessageType_MoneroTransactionSetInputRequest => 183,
MessageType::MessageType_MoneroTransactionSetInputAck => 184,
MessageType::MessageType_MoneroTransactionInputViniRequest => 185,
MessageType::MessageType_MoneroTransactionInputViniAck => 186,
MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 187,
MessageType::MessageType_MoneroTransactionAllInputsSetAck => 188,
MessageType::MessageType_MoneroTransactionSetOutputRequest => 189,
MessageType::MessageType_MoneroTransactionSetOutputAck => 190,
MessageType::MessageType_MoneroTransactionAllOutSetRequest => 191,
MessageType::MessageType_MoneroTransactionAllOutSetAck => 192,
MessageType::MessageType_MoneroTransactionSignInputRequest => 193,
MessageType::MessageType_MoneroTransactionSignInputAck => 194,
MessageType::MessageType_MoneroTransactionFinalRequest => 195,
MessageType::MessageType_MoneroTransactionFinalAck => 196,
MessageType::MessageType_MoneroKeyImageExportInitRequest => 197,
MessageType::MessageType_MoneroKeyImageExportInitAck => 198,
MessageType::MessageType_MoneroKeyImageSyncStepRequest => 199,
MessageType::MessageType_MoneroKeyImageSyncStepAck => 200,
MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 201,
MessageType::MessageType_MoneroKeyImageSyncFinalAck => 202,
MessageType::MessageType_MoneroGetAddress => 203,
MessageType::MessageType_MoneroAddress => 204,
MessageType::MessageType_MoneroGetWatchKey => 205,
MessageType::MessageType_MoneroWatchKey => 206,
MessageType::MessageType_DebugMoneroDiagRequest => 207,
MessageType::MessageType_DebugMoneroDiagAck => 208,
MessageType::MessageType_MoneroGetTxKeyRequest => 209,
MessageType::MessageType_MoneroGetTxKeyAck => 210,
MessageType::MessageType_MoneroLiveRefreshStartRequest => 211,
MessageType::MessageType_MoneroLiveRefreshStartAck => 212,
MessageType::MessageType_MoneroLiveRefreshStepRequest => 213,
MessageType::MessageType_MoneroLiveRefreshStepAck => 214,
MessageType::MessageType_MoneroLiveRefreshFinalRequest => 215,
MessageType::MessageType_MoneroLiveRefreshFinalAck => 216,
MessageType::MessageType_EosGetPublicKey => 217,
MessageType::MessageType_EosPublicKey => 218,
MessageType::MessageType_EosSignTx => 219,
MessageType::MessageType_EosTxActionRequest => 220,
MessageType::MessageType_EosTxActionAck => 221,
MessageType::MessageType_EosSignedTx => 222,
MessageType::MessageType_BinanceGetAddress => 223,
MessageType::MessageType_BinanceAddress => 224,
MessageType::MessageType_BinanceGetPublicKey => 225,
MessageType::MessageType_BinancePublicKey => 226,
MessageType::MessageType_BinanceSignTx => 227,
MessageType::MessageType_BinanceTxRequest => 228,
MessageType::MessageType_BinanceTransferMsg => 229,
MessageType::MessageType_BinanceOrderMsg => 230,
MessageType::MessageType_BinanceCancelMsg => 231,
MessageType::MessageType_BinanceSignedTx => 232,
MessageType::MessageType_WebAuthnListResidentCredentials => 233,
MessageType::MessageType_WebAuthnCredentials => 234,
MessageType::MessageType_WebAuthnAddResidentCredential => 235,
MessageType::MessageType_WebAuthnRemoveResidentCredential => 236,
MessageType::MessageType_SolanaGetPublicKey => 237,
MessageType::MessageType_SolanaPublicKey => 238,
MessageType::MessageType_SolanaGetAddress => 239,
MessageType::MessageType_SolanaAddress => 240,
MessageType::MessageType_SolanaSignTx => 241,
MessageType::MessageType_SolanaTxSignature => 242,
MessageType::MessageType_DebugLinkDecision => 80,
MessageType::MessageType_DebugLinkGetState => 81,
MessageType::MessageType_DebugLinkState => 82,
MessageType::MessageType_DebugLinkStop => 83,
MessageType::MessageType_DebugLinkLog => 84,
MessageType::MessageType_DebugLinkMemoryRead => 85,
MessageType::MessageType_DebugLinkMemory => 86,
MessageType::MessageType_DebugLinkMemoryWrite => 87,
MessageType::MessageType_DebugLinkFlashErase => 88,
MessageType::MessageType_DebugLinkLayout => 89,
MessageType::MessageType_DebugLinkReseedRandom => 90,
MessageType::MessageType_DebugLinkRecordScreen => 91,
MessageType::MessageType_DebugLinkEraseSdCard => 92,
MessageType::MessageType_DebugLinkWatchLayout => 93,
MessageType::MessageType_DebugLinkResetDebugEvents => 94,
MessageType::MessageType_EthereumGetPublicKey => 95,
MessageType::MessageType_EthereumPublicKey => 96,
MessageType::MessageType_EthereumGetAddress => 97,
MessageType::MessageType_EthereumAddress => 98,
MessageType::MessageType_EthereumSignTx => 99,
MessageType::MessageType_EthereumSignTxEIP1559 => 100,
MessageType::MessageType_EthereumTxRequest => 101,
MessageType::MessageType_EthereumTxAck => 102,
MessageType::MessageType_EthereumSignMessage => 103,
MessageType::MessageType_EthereumVerifyMessage => 104,
MessageType::MessageType_EthereumMessageSignature => 105,
MessageType::MessageType_EthereumSignTypedData => 106,
MessageType::MessageType_EthereumTypedDataStructRequest => 107,
MessageType::MessageType_EthereumTypedDataStructAck => 108,
MessageType::MessageType_EthereumTypedDataValueRequest => 109,
MessageType::MessageType_EthereumTypedDataValueAck => 110,
MessageType::MessageType_EthereumTypedDataSignature => 111,
MessageType::MessageType_EthereumSignTypedHash => 112,
MessageType::MessageType_NEMGetAddress => 113,
MessageType::MessageType_NEMAddress => 114,
MessageType::MessageType_NEMSignTx => 115,
MessageType::MessageType_NEMSignedTx => 116,
MessageType::MessageType_NEMDecryptMessage => 117,
MessageType::MessageType_NEMDecryptedMessage => 118,
MessageType::MessageType_TezosGetAddress => 119,
MessageType::MessageType_TezosAddress => 120,
MessageType::MessageType_TezosSignTx => 121,
MessageType::MessageType_TezosSignedTx => 122,
MessageType::MessageType_TezosGetPublicKey => 123,
MessageType::MessageType_TezosPublicKey => 124,
MessageType::MessageType_StellarSignTx => 125,
MessageType::MessageType_StellarTxOpRequest => 126,
MessageType::MessageType_StellarGetAddress => 127,
MessageType::MessageType_StellarAddress => 128,
MessageType::MessageType_StellarCreateAccountOp => 129,
MessageType::MessageType_StellarPaymentOp => 130,
MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 131,
MessageType::MessageType_StellarManageSellOfferOp => 132,
MessageType::MessageType_StellarCreatePassiveSellOfferOp => 133,
MessageType::MessageType_StellarSetOptionsOp => 134,
MessageType::MessageType_StellarChangeTrustOp => 135,
MessageType::MessageType_StellarAllowTrustOp => 136,
MessageType::MessageType_StellarAccountMergeOp => 137,
MessageType::MessageType_StellarManageDataOp => 138,
MessageType::MessageType_StellarBumpSequenceOp => 139,
MessageType::MessageType_StellarManageBuyOfferOp => 140,
MessageType::MessageType_StellarPathPaymentStrictSendOp => 141,
MessageType::MessageType_StellarClaimClaimableBalanceOp => 142,
MessageType::MessageType_StellarSignedTx => 143,
MessageType::MessageType_CardanoGetPublicKey => 144,
MessageType::MessageType_CardanoPublicKey => 145,
MessageType::MessageType_CardanoGetAddress => 146,
MessageType::MessageType_CardanoAddress => 147,
MessageType::MessageType_CardanoTxItemAck => 148,
MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 149,
MessageType::MessageType_CardanoTxWitnessRequest => 150,
MessageType::MessageType_CardanoTxWitnessResponse => 151,
MessageType::MessageType_CardanoTxHostAck => 152,
MessageType::MessageType_CardanoTxBodyHash => 153,
MessageType::MessageType_CardanoSignTxFinished => 154,
MessageType::MessageType_CardanoSignTxInit => 155,
MessageType::MessageType_CardanoTxInput => 156,
MessageType::MessageType_CardanoTxOutput => 157,
MessageType::MessageType_CardanoAssetGroup => 158,
MessageType::MessageType_CardanoToken => 159,
MessageType::MessageType_CardanoTxCertificate => 160,
MessageType::MessageType_CardanoTxWithdrawal => 161,
MessageType::MessageType_CardanoTxAuxiliaryData => 162,
MessageType::MessageType_CardanoPoolOwner => 163,
MessageType::MessageType_CardanoPoolRelayParameters => 164,
MessageType::MessageType_CardanoGetNativeScriptHash => 165,
MessageType::MessageType_CardanoNativeScriptHash => 166,
MessageType::MessageType_CardanoTxMint => 167,
MessageType::MessageType_CardanoTxCollateralInput => 168,
MessageType::MessageType_CardanoTxRequiredSigner => 169,
MessageType::MessageType_CardanoTxInlineDatumChunk => 170,
MessageType::MessageType_CardanoTxReferenceScriptChunk => 171,
MessageType::MessageType_CardanoTxReferenceInput => 172,
MessageType::MessageType_RippleGetAddress => 173,
MessageType::MessageType_RippleAddress => 174,
MessageType::MessageType_RippleSignTx => 175,
MessageType::MessageType_RippleSignedTx => 176,
MessageType::MessageType_MoneroTransactionInitRequest => 177,
MessageType::MessageType_MoneroTransactionInitAck => 178,
MessageType::MessageType_MoneroTransactionSetInputRequest => 179,
MessageType::MessageType_MoneroTransactionSetInputAck => 180,
MessageType::MessageType_MoneroTransactionInputViniRequest => 181,
MessageType::MessageType_MoneroTransactionInputViniAck => 182,
MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 183,
MessageType::MessageType_MoneroTransactionAllInputsSetAck => 184,
MessageType::MessageType_MoneroTransactionSetOutputRequest => 185,
MessageType::MessageType_MoneroTransactionSetOutputAck => 186,
MessageType::MessageType_MoneroTransactionAllOutSetRequest => 187,
MessageType::MessageType_MoneroTransactionAllOutSetAck => 188,
MessageType::MessageType_MoneroTransactionSignInputRequest => 189,
MessageType::MessageType_MoneroTransactionSignInputAck => 190,
MessageType::MessageType_MoneroTransactionFinalRequest => 191,
MessageType::MessageType_MoneroTransactionFinalAck => 192,
MessageType::MessageType_MoneroKeyImageExportInitRequest => 193,
MessageType::MessageType_MoneroKeyImageExportInitAck => 194,
MessageType::MessageType_MoneroKeyImageSyncStepRequest => 195,
MessageType::MessageType_MoneroKeyImageSyncStepAck => 196,
MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 197,
MessageType::MessageType_MoneroKeyImageSyncFinalAck => 198,
MessageType::MessageType_MoneroGetAddress => 199,
MessageType::MessageType_MoneroAddress => 200,
MessageType::MessageType_MoneroGetWatchKey => 201,
MessageType::MessageType_MoneroWatchKey => 202,
MessageType::MessageType_DebugMoneroDiagRequest => 203,
MessageType::MessageType_DebugMoneroDiagAck => 204,
MessageType::MessageType_MoneroGetTxKeyRequest => 205,
MessageType::MessageType_MoneroGetTxKeyAck => 206,
MessageType::MessageType_MoneroLiveRefreshStartRequest => 207,
MessageType::MessageType_MoneroLiveRefreshStartAck => 208,
MessageType::MessageType_MoneroLiveRefreshStepRequest => 209,
MessageType::MessageType_MoneroLiveRefreshStepAck => 210,
MessageType::MessageType_MoneroLiveRefreshFinalRequest => 211,
MessageType::MessageType_MoneroLiveRefreshFinalAck => 212,
MessageType::MessageType_EosGetPublicKey => 213,
MessageType::MessageType_EosPublicKey => 214,
MessageType::MessageType_EosSignTx => 215,
MessageType::MessageType_EosTxActionRequest => 216,
MessageType::MessageType_EosTxActionAck => 217,
MessageType::MessageType_EosSignedTx => 218,
MessageType::MessageType_BinanceGetAddress => 219,
MessageType::MessageType_BinanceAddress => 220,
MessageType::MessageType_BinanceGetPublicKey => 221,
MessageType::MessageType_BinancePublicKey => 222,
MessageType::MessageType_BinanceSignTx => 223,
MessageType::MessageType_BinanceTxRequest => 224,
MessageType::MessageType_BinanceTransferMsg => 225,
MessageType::MessageType_BinanceOrderMsg => 226,
MessageType::MessageType_BinanceCancelMsg => 227,
MessageType::MessageType_BinanceSignedTx => 228,
MessageType::MessageType_WebAuthnListResidentCredentials => 229,
MessageType::MessageType_WebAuthnCredentials => 230,
MessageType::MessageType_WebAuthnAddResidentCredential => 231,
MessageType::MessageType_WebAuthnRemoveResidentCredential => 232,
MessageType::MessageType_SolanaGetPublicKey => 233,
MessageType::MessageType_SolanaPublicKey => 234,
MessageType::MessageType_SolanaGetAddress => 235,
MessageType::MessageType_SolanaAddress => 236,
MessageType::MessageType_SolanaSignTx => 237,
MessageType::MessageType_SolanaTxSignature => 238,
};
Self::enum_descriptor().value_by_index(index)
}
@ -1568,7 +1544,7 @@ pub mod exts {
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\x20google/protobuf/de\
scriptor.proto*\x9aT\n\x0bMessageType\x12(\n\x16MessageType_Initialize\
scriptor.proto*\xfdR\n\x0bMessageType\x12(\n\x16MessageType_Initialize\
\x10\0\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\
\x10MessageType_Ping\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12\
%\n\x13MessageType_Success\x10\x02\x1a\x0c\x80\xa6\x1d\x01\xa8\xb5\x18\
@ -1662,211 +1638,206 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageType_SignedIdentity\x106\
\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12+\n\x1dMessageType_GetECDHSe\
ssionKey\x10=\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12(\n\x1aMessageT\
ype_ECDHSessionKey\x10>\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x12$\n\
\x16MessageType_CosiCommit\x10G\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\
\x12(\n\x1aMessageType_CosiCommitment\x10H\x1a\x08\x80\xa6\x1d\x01\x98\
\xb5\x18\x01\x12\"\n\x14MessageType_CosiSign\x10I\x1a\x08\x80\xa6\x1d\
\x01\x90\xb5\x18\x01\x12'\n\x19MessageType_CosiSignature\x10J\x1a\x08\
\x80\xa6\x1d\x01\x98\xb5\x18\x01\x123\n\x1dMessageType_DebugLinkDecision\
\x10d\x1a\x10\xc0\xb5\x18\x01\xb0\xb5\x18\x01\x80\xa6\x1d\x01\xa0\xb5\
\x18\x01\x12/\n\x1dMessageType_DebugLinkGetState\x10e\x1a\x0c\x80\xa6\
\x1d\x01\xb0\xb5\x18\x01\xa0\xb5\x18\x01\x12(\n\x1aMessageType_DebugLink\
State\x10f\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12'\n\x19MessageType\
_DebugLinkStop\x10g\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12&\n\x18Me\
ssageType_DebugLinkLog\x10h\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12-\
\n\x1fMessageType_DebugLinkMemoryRead\x10n\x1a\x08\x80\xa6\x1d\x01\xa0\
\xb5\x18\x01\x12)\n\x1bMessageType_DebugLinkMemory\x10o\x1a\x08\x80\xa6\
\x1d\x01\xa8\xb5\x18\x01\x12.\n\x20MessageType_DebugLinkMemoryWrite\x10p\
\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12-\n\x1fMessageType_DebugLink\
FlashErase\x10q\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12*\n\x1bMessag\
eType_DebugLinkLayout\x10\xa9F\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\
\x120\n!MessageType_DebugLinkReseedRandom\x10\xaaF\x1a\x08\x80\xa6\x1d\
\x01\xa0\xb5\x18\x01\x120\n!MessageType_DebugLinkRecordScreen\x10\xabF\
\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20MessageType_DebugLink\
EraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20M\
essageType_DebugLinkWatchLayout\x10\xaeF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\
\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvents\x10\xafF\x1a\x08\
\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12+\n\x20MessageType_EthereumGetPublic\
Key\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_EthereumPu\
blicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\x01\x12(\n\x1eMessageType_Ethere\
umGetAddress\x108\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_Ethereum\
Address\x109\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumSignT\
x\x10:\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_EthereumSignTxEIP1559\
\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageType_EthereumTxReq\
uest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\
\x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\
\x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVerifyMessage\
\x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMessageSignatur\
e\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\
\x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDat\
aStructRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_Et\
hereumTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)Mess\
ageType_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\
\x01\x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\
\x90\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignature\x10\xd5\
\x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedHash\
\x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\
\x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\
\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\
\x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\
\x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\
\x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\
\x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\
\xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\
\xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\
\xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\
\xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\
\x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\
\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\
\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\
\xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\
\x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAc\
countOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_Stella\
rPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_Stella\
rPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$M\
essageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\
\x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\
\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\
\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\
\xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrust\
Op\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccount\
MergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Stella\
rManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ste\
llarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageTyp\
e_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*Mes\
sageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\
\x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\
\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\
\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\
\xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\
\x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAdd\
ress\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAd\
dress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoT\
xItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoT\
xAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#Mess\
ageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\
\n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\
\x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\
\x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\
\xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\
\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\
\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\
\x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\
\xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\
\x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\
\x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCert\
ificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Cardan\
oTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_Ca\
rdanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\
geType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Messa\
geType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\
\x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\
\xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\
\x04\x90\xb5\x18\x01\x12/\n$MessageType_CardanoTxCollateralInput\x10\xcd\
\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_CardanoTxRequiredSigner\
\x10\xce\x02\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_CardanoTxInlineD\
atumChunk\x10\xcf\x02\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_Cardano\
TxReferenceScriptChunk\x10\xd0\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#Messag\
eType_CardanoTxReferenceInput\x10\xd1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\
\x1cMessageType_RippleGetAddress\x10\x90\x03\x1a\x04\x90\xb5\x18\x01\x12\
$\n\x19MessageType_RippleAddress\x10\x91\x03\x1a\x04\x98\xb5\x18\x01\x12\
#\n\x18MessageType_RippleSignTx\x10\x92\x03\x1a\x04\x90\xb5\x18\x01\x12%\
\n\x1aMessageType_RippleSignedTx\x10\x93\x03\x1a\x04\x90\xb5\x18\x01\x12\
3\n(MessageType_MoneroTransactionInitRequest\x10\xf5\x03\x1a\x04\x98\xb5\
\x18\x01\x12/\n$MessageType_MoneroTransactionInitAck\x10\xf6\x03\x1a\x04\
\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionSetInputRequest\x10\
\xf7\x03\x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroTransactionSet\
InputAck\x10\xf8\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTr\
ansactionInputViniRequest\x10\xfb\x03\x1a\x04\x98\xb5\x18\x01\x124\n)Mes\
sageType_MoneroTransactionInputViniAck\x10\xfc\x03\x1a\x04\x98\xb5\x18\
\x01\x12;\n0MessageType_MoneroTransactionAllInputsSetRequest\x10\xfd\x03\
\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionAllInputsSe\
tAck\x10\xfe\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransa\
ctionSetOutputRequest\x10\xff\x03\x1a\x04\x98\xb5\x18\x01\x124\n)Message\
Type_MoneroTransactionSetOutputAck\x10\x80\x04\x1a\x04\x98\xb5\x18\x01\
\x128\n-MessageType_MoneroTransactionAllOutSetRequest\x10\x81\x04\x1a\
\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroTransactionAllOutSetAck\
\x10\x82\x04\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactio\
nSignInputRequest\x10\x83\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\
_MoneroTransactionSignInputAck\x10\x84\x04\x1a\x04\x98\xb5\x18\x01\x124\
\n)MessageType_MoneroTransactionFinalRequest\x10\x85\x04\x1a\x04\x98\xb5\
\x18\x01\x120\n%MessageType_MoneroTransactionFinalAck\x10\x86\x04\x1a\
\x04\x98\xb5\x18\x01\x126\n+MessageType_MoneroKeyImageExportInitRequest\
\x10\x92\x04\x1a\x04\x98\xb5\x18\x01\x122\n'MessageType_MoneroKeyImageEx\
portInitAck\x10\x93\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_Moner\
oKeyImageSyncStepRequest\x10\x94\x04\x1a\x04\x98\xb5\x18\x01\x120\n%Mess\
ageType_MoneroKeyImageSyncStepAck\x10\x95\x04\x1a\x04\x98\xb5\x18\x01\
\x125\n*MessageType_MoneroKeyImageSyncFinalRequest\x10\x96\x04\x1a\x04\
\x98\xb5\x18\x01\x121\n&MessageType_MoneroKeyImageSyncFinalAck\x10\x97\
\x04\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_MoneroGetAddress\x10\
\x9c\x04\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_MoneroAddress\x10\
\x9d\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_MoneroGetWatchKey\
\x10\x9e\x04\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_MoneroWatchKe\
y\x10\x9f\x04\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_DebugMoneroDia\
gRequest\x10\xa2\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_Debug\
MoneroDiagAck\x10\xa3\x04\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_Mon\
eroGetTxKeyRequest\x10\xa6\x04\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessage\
Type_MoneroGetTxKeyAck\x10\xa7\x04\x1a\x04\x98\xb5\x18\x01\x124\n)Messag\
eType_MoneroLiveRefreshStartRequest\x10\xa8\x04\x1a\x04\x90\xb5\x18\x01\
\x120\n%MessageType_MoneroLiveRefreshStartAck\x10\xa9\x04\x1a\x04\x98\
\xb5\x18\x01\x123\n(MessageType_MoneroLiveRefreshStepRequest\x10\xaa\x04\
\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_MoneroLiveRefreshStepAck\x10\
\xab\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroLiveRefreshFin\
alRequest\x10\xac\x04\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_MoneroL\
iveRefreshFinalAck\x10\xad\x04\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bMessage\
Type_EosGetPublicKey\x10\xd8\x04\x1a\x04\x90\xb5\x18\x01\x12#\n\x18Messa\
geType_EosPublicKey\x10\xd9\x04\x1a\x04\x98\xb5\x18\x01\x12\x20\n\x15Mes\
sageType_EosSignTx\x10\xda\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessage\
Type_EosTxActionRequest\x10\xdb\x04\x1a\x04\x98\xb5\x18\x01\x12%\n\x1aMe\
ssageType_EosTxActionAck\x10\xdc\x04\x1a\x04\x90\xb5\x18\x01\x12\"\n\x17\
MessageType_EosSignedTx\x10\xdd\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMe\
ssageType_BinanceGetAddress\x10\xbc\x05\x1a\x04\x90\xb5\x18\x01\x12%\n\
\x1aMessageType_BinanceAddress\x10\xbd\x05\x1a\x04\x98\xb5\x18\x01\x12*\
\n\x1fMessageType_BinanceGetPublicKey\x10\xbe\x05\x1a\x04\x90\xb5\x18\
\x01\x12'\n\x1cMessageType_BinancePublicKey\x10\xbf\x05\x1a\x04\x98\xb5\
\x18\x01\x12$\n\x19MessageType_BinanceSignTx\x10\xc0\x05\x1a\x04\x90\xb5\
\x18\x01\x12'\n\x1cMessageType_BinanceTxRequest\x10\xc1\x05\x1a\x04\x98\
\xb5\x18\x01\x12)\n\x1eMessageType_BinanceTransferMsg\x10\xc2\x05\x1a\
\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_BinanceOrderMsg\x10\xc3\x05\
\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_BinanceCancelMsg\x10\xc4\
\x05\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_BinanceSignedTx\x10\
\xc5\x05\x1a\x04\x98\xb5\x18\x01\x126\n+MessageType_WebAuthnListResident\
Credentials\x10\xa0\x06\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_We\
bAuthnCredentials\x10\xa1\x06\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType\
_WebAuthnAddResidentCredential\x10\xa2\x06\x1a\x04\x90\xb5\x18\x01\x127\
\n,MessageType_WebAuthnRemoveResidentCredential\x10\xa3\x06\x1a\x04\x90\
\xb5\x18\x01\x12)\n\x1eMessageType_SolanaGetPublicKey\x10\x84\x07\x1a\
\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_SolanaPublicKey\x10\x85\x07\
\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_SolanaGetAddress\x10\x86\
\x07\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_SolanaAddress\x10\x87\
\x07\x1a\x04\x98\xb5\x18\x01\x12#\n\x18MessageType_SolanaSignTx\x10\x88\
\x07\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_SolanaTxSignature\x10\
\x89\x07\x1a\x04\x98\xb5\x18\x01\x1a\x04\xc8\xf3\x18\x01\"\x04\x08Z\x10\
\\\"\x04\x08r\x10z\"\x06\x08\xdb\x01\x10\xdb\x01\"\x06\x08\xe0\x01\x10\
\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\x02\x10\xb8\x02:<\n\
\x07wire_in\x18\xd2\x86\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueO\
ptionsR\x06wireIn:>\n\x08wire_out\x18\xd3\x86\x03\x20\x01(\x08\x12!.goog\
le.protobuf.EnumValueOptionsR\x07wireOut:G\n\rwire_debug_in\x18\xd4\x86\
\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueOptionsR\x0bwireDebugIn:\
I\n\x0ewire_debug_out\x18\xd5\x86\x03\x20\x01(\x08\x12!.google.protobuf.\
EnumValueOptionsR\x0cwireDebugOut:@\n\twire_tiny\x18\xd6\x86\x03\x20\x01\
(\x08\x12!.google.protobuf.EnumValueOptionsR\x08wireTiny:L\n\x0fwire_boo\
tloader\x18\xd7\x86\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueOptio\
nsR\x0ewireBootloader:C\n\x0bwire_no_fsm\x18\xd8\x86\x03\x20\x01(\x08\
\x12!.google.protobuf.EnumValueOptionsR\twireNoFsm:F\n\x0cbitcoin_only\
\x18\xe0\xd4\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueOptionsR\x0b\
bitcoinOnly:U\n\x17has_bitcoin_only_values\x18\xb9\x8e\x03\x20\x01(\x08\
\x12\x1c.google.protobuf.EnumOptionsR\x14hasBitcoinOnlyValues:T\n\x14exp\
erimental_message\x18\xa1\x96\x03\x20\x01(\x08\x12\x1f.google.protobuf.M\
essageOptionsR\x13experimentalMessage:>\n\twire_type\x18\xa2\x96\x03\x20\
\x01(\r\x12\x1f.google.protobuf.MessageOptionsR\x08wireType:N\n\x12exper\
imental_field\x18\x89\x9e\x03\x20\x01(\x08\x12\x1d.google.protobuf.Field\
OptionsR\x11experimentalField:U\n\x17include_in_bitcoin_only\x18\xe0\xd4\
\x03\x20\x01(\x08\x12\x1c.google.protobuf.FileOptionsR\x14includeInBitco\
inOnlyB8\n#com.satoshilabs.trezor.lib.protobufB\rTrezorMessage\x80\xa6\
\x1d\x01\
ype_ECDHSessionKey\x10>\x1a\x08\x80\xa6\x1d\x01\x98\xb5\x18\x01\x123\n\
\x1dMessageType_DebugLinkDecision\x10d\x1a\x10\xc0\xb5\x18\x01\xb0\xb5\
\x18\x01\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x1dMessageType_DebugLink\
GetState\x10e\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\xa0\xb5\x18\x01\
\x12(\n\x1aMessageType_DebugLinkState\x10f\x1a\x08\x80\xa6\x1d\x01\xa8\
\xb5\x18\x01\x12'\n\x19MessageType_DebugLinkStop\x10g\x1a\x08\x80\xa6\
\x1d\x01\xa0\xb5\x18\x01\x12&\n\x18MessageType_DebugLinkLog\x10h\x1a\x08\
\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12-\n\x1fMessageType_DebugLinkMemoryRe\
ad\x10n\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12)\n\x1bMessageType_De\
bugLinkMemory\x10o\x1a\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x12.\n\x20Mes\
sageType_DebugLinkMemoryWrite\x10p\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\
\x01\x12-\n\x1fMessageType_DebugLinkFlashErase\x10q\x1a\x08\x80\xa6\x1d\
\x01\xa0\xb5\x18\x01\x12*\n\x1bMessageType_DebugLinkLayout\x10\xa9F\x1a\
\x08\x80\xa6\x1d\x01\xa8\xb5\x18\x01\x120\n!MessageType_DebugLinkReseedR\
andom\x10\xaaF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x120\n!MessageTyp\
e_DebugLinkRecordScreen\x10\xabF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\
\x12/\n\x20MessageType_DebugLinkEraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\
\x01\xa0\xb5\x18\x01\x12/\n\x20MessageType_DebugLinkWatchLayout\x10\xaeF\
\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x124\n%MessageType_DebugLinkRes\
etDebugEvents\x10\xafF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12+\n\
\x20MessageType_EthereumGetPublicKey\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\
\x12(\n\x1dMessageType_EthereumPublicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\
\x01\x12(\n\x1eMessageType_EthereumGetAddress\x108\x1a\x04\x90\xb5\x18\
\x01\x12%\n\x1bMessageType_EthereumAddress\x109\x1a\x04\x98\xb5\x18\x01\
\x12$\n\x1aMessageType_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\x01\x12,\
\n!MessageType_EthereumSignTxEIP1559\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\
\x12'\n\x1dMessageType_EthereumTxRequest\x10;\x1a\x04\x98\xb5\x18\x01\
\x12#\n\x19MessageType_EthereumTxAck\x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\
\x1fMessageType_EthereumSignMessage\x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!\
MessageType_EthereumVerifyMessage\x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$Me\
ssageType_EthereumMessageSignature\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!M\
essageType_EthereumSignTypedData\x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x12\
5\n*MessageType_EthereumTypedDataStructRequest\x10\xd1\x03\x1a\x04\x98\
\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataStructAck\x10\xd2\x03\
\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_EthereumTypedDataValueReques\
t\x10\xd3\x03\x1a\x04\x98\xb5\x18\x01\x120\n%MessageType_EthereumTypedDa\
taValueAck\x10\xd4\x03\x1a\x04\x90\xb5\x18\x01\x121\n&MessageType_Ethere\
umTypedDataSignature\x10\xd5\x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageT\
ype_EthereumSignTypedHash\x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19\
MessageType_NEMGetAddress\x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16Mess\
ageType_NEMAddress\x10D\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType\
_NEMSignTx\x10E\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedT\
x\x10F\x1a\x04\x98\xb5\x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\
\x10K\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\
\x10L\x1a\x04\x98\xb5\x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\
\x96\x01\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\
\x97\x01\x1a\x04\x98\xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\
\x98\x01\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\
\x99\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\
\x10\x9a\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKe\
y\x10\x9b\x01\x1a\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignT\
x\x10\xca\x01\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpR\
equest\x10\xcb\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_Stellar\
GetAddress\x10\xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_Ste\
llarAddress\x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_Stel\
larCreateAccountOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessage\
Type_StellarPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-Message\
Type_StellarPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\
\x01\x12/\n$MessageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\
\xb5\x18\x01\x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\
\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\
\x10\xd7\x01\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChange\
TrustOp\x10\xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Stella\
rAllowTrustOp\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ste\
llarAccountMergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessage\
Type_StellarManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!Mess\
ageType_StellarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n\
#MessageType_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\
\x125\n*MessageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\
\x90\xb5\x18\x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\
\xe1\x01\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\
\x10\xe6\x01\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPub\
licKey\x10\xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_Cardano\
PublicKey\x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_Card\
anoGetAddress\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_\
CardanoAddress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType\
_CardanoTxItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType\
_CardanoTxAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\
\x12.\n#MessageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\
\x18\x01\x12/\n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\
\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\
\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\
\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\
\xbf\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\
\x10\xc0\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInpu\
t\x10\xc1\x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOut\
put\x10\xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAss\
etGroup\x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_Cardan\
oToken\x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_Cardano\
TxCertificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_\
CardanoTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageT\
ype_CardanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\
\x1cMessageType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x12\
1\n&MessageType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\
\x18\x01\x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\
\x04\x90\xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\
\x02\x1a\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\
\x02\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_CardanoTxCollateralInput\
\x10\xcd\x02\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageType_CardanoTxRequire\
dSigner\x10\xce\x02\x1a\x04\x90\xb5\x18\x01\x120\n%MessageType_CardanoTx\
InlineDatumChunk\x10\xcf\x02\x1a\x04\x90\xb5\x18\x01\x124\n)MessageType_\
CardanoTxReferenceScriptChunk\x10\xd0\x02\x1a\x04\x90\xb5\x18\x01\x12.\n\
#MessageType_CardanoTxReferenceInput\x10\xd1\x02\x1a\x04\x90\xb5\x18\x01\
\x12'\n\x1cMessageType_RippleGetAddress\x10\x90\x03\x1a\x04\x90\xb5\x18\
\x01\x12$\n\x19MessageType_RippleAddress\x10\x91\x03\x1a\x04\x98\xb5\x18\
\x01\x12#\n\x18MessageType_RippleSignTx\x10\x92\x03\x1a\x04\x90\xb5\x18\
\x01\x12%\n\x1aMessageType_RippleSignedTx\x10\x93\x03\x1a\x04\x90\xb5\
\x18\x01\x123\n(MessageType_MoneroTransactionInitRequest\x10\xf5\x03\x1a\
\x04\x98\xb5\x18\x01\x12/\n$MessageType_MoneroTransactionInitAck\x10\xf6\
\x03\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransactionSetInpu\
tRequest\x10\xf7\x03\x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroTr\
ansactionSetInputAck\x10\xf8\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageT\
ype_MoneroTransactionInputViniRequest\x10\xfb\x03\x1a\x04\x98\xb5\x18\
\x01\x124\n)MessageType_MoneroTransactionInputViniAck\x10\xfc\x03\x1a\
\x04\x98\xb5\x18\x01\x12;\n0MessageType_MoneroTransactionAllInputsSetReq\
uest\x10\xfd\x03\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_MoneroTransa\
ctionAllInputsSetAck\x10\xfe\x03\x1a\x04\x98\xb5\x18\x01\x128\n-MessageT\
ype_MoneroTransactionSetOutputRequest\x10\xff\x03\x1a\x04\x98\xb5\x18\
\x01\x124\n)MessageType_MoneroTransactionSetOutputAck\x10\x80\x04\x1a\
\x04\x98\xb5\x18\x01\x128\n-MessageType_MoneroTransactionAllOutSetReques\
t\x10\x81\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_MoneroTransacti\
onAllOutSetAck\x10\x82\x04\x1a\x04\x98\xb5\x18\x01\x128\n-MessageType_Mo\
neroTransactionSignInputRequest\x10\x83\x04\x1a\x04\x98\xb5\x18\x01\x124\
\n)MessageType_MoneroTransactionSignInputAck\x10\x84\x04\x1a\x04\x98\xb5\
\x18\x01\x124\n)MessageType_MoneroTransactionFinalRequest\x10\x85\x04\
\x1a\x04\x98\xb5\x18\x01\x120\n%MessageType_MoneroTransactionFinalAck\
\x10\x86\x04\x1a\x04\x98\xb5\x18\x01\x126\n+MessageType_MoneroKeyImageEx\
portInitRequest\x10\x92\x04\x1a\x04\x98\xb5\x18\x01\x122\n'MessageType_M\
oneroKeyImageExportInitAck\x10\x93\x04\x1a\x04\x98\xb5\x18\x01\x124\n)Me\
ssageType_MoneroKeyImageSyncStepRequest\x10\x94\x04\x1a\x04\x98\xb5\x18\
\x01\x120\n%MessageType_MoneroKeyImageSyncStepAck\x10\x95\x04\x1a\x04\
\x98\xb5\x18\x01\x125\n*MessageType_MoneroKeyImageSyncFinalRequest\x10\
\x96\x04\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_MoneroKeyImageSyncFi\
nalAck\x10\x97\x04\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_MoneroG\
etAddress\x10\x9c\x04\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_Mone\
roAddress\x10\x9d\x04\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_Mone\
roGetWatchKey\x10\x9e\x04\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_\
MoneroWatchKey\x10\x9f\x04\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_D\
ebugMoneroDiagRequest\x10\xa2\x04\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMess\
ageType_DebugMoneroDiagAck\x10\xa3\x04\x1a\x04\x98\xb5\x18\x01\x12,\n!Me\
ssageType_MoneroGetTxKeyRequest\x10\xa6\x04\x1a\x04\x90\xb5\x18\x01\x12(\
\n\x1dMessageType_MoneroGetTxKeyAck\x10\xa7\x04\x1a\x04\x98\xb5\x18\x01\
\x124\n)MessageType_MoneroLiveRefreshStartRequest\x10\xa8\x04\x1a\x04\
\x90\xb5\x18\x01\x120\n%MessageType_MoneroLiveRefreshStartAck\x10\xa9\
\x04\x1a\x04\x98\xb5\x18\x01\x123\n(MessageType_MoneroLiveRefreshStepReq\
uest\x10\xaa\x04\x1a\x04\x90\xb5\x18\x01\x12/\n$MessageType_MoneroLiveRe\
freshStepAck\x10\xab\x04\x1a\x04\x98\xb5\x18\x01\x124\n)MessageType_Mone\
roLiveRefreshFinalRequest\x10\xac\x04\x1a\x04\x90\xb5\x18\x01\x120\n%Mes\
sageType_MoneroLiveRefreshFinalAck\x10\xad\x04\x1a\x04\x98\xb5\x18\x01\
\x12&\n\x1bMessageType_EosGetPublicKey\x10\xd8\x04\x1a\x04\x90\xb5\x18\
\x01\x12#\n\x18MessageType_EosPublicKey\x10\xd9\x04\x1a\x04\x98\xb5\x18\
\x01\x12\x20\n\x15MessageType_EosSignTx\x10\xda\x04\x1a\x04\x90\xb5\x18\
\x01\x12)\n\x1eMessageType_EosTxActionRequest\x10\xdb\x04\x1a\x04\x98\
\xb5\x18\x01\x12%\n\x1aMessageType_EosTxActionAck\x10\xdc\x04\x1a\x04\
\x90\xb5\x18\x01\x12\"\n\x17MessageType_EosSignedTx\x10\xdd\x04\x1a\x04\
\x98\xb5\x18\x01\x12(\n\x1dMessageType_BinanceGetAddress\x10\xbc\x05\x1a\
\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_BinanceAddress\x10\xbd\x05\
\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_BinanceGetPublicKey\x10\
\xbe\x05\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_BinancePublicKey\
\x10\xbf\x05\x1a\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_BinanceSignTx\
\x10\xc0\x05\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_BinanceTxRequ\
est\x10\xc1\x05\x1a\x04\x98\xb5\x18\x01\x12)\n\x1eMessageType_BinanceTra\
nsferMsg\x10\xc2\x05\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_Binan\
ceOrderMsg\x10\xc3\x05\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_Bin\
anceCancelMsg\x10\xc4\x05\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_\
BinanceSignedTx\x10\xc5\x05\x1a\x04\x98\xb5\x18\x01\x126\n+MessageType_W\
ebAuthnListResidentCredentials\x10\xa0\x06\x1a\x04\x90\xb5\x18\x01\x12*\
\n\x1fMessageType_WebAuthnCredentials\x10\xa1\x06\x1a\x04\x98\xb5\x18\
\x01\x124\n)MessageType_WebAuthnAddResidentCredential\x10\xa2\x06\x1a\
\x04\x90\xb5\x18\x01\x127\n,MessageType_WebAuthnRemoveResidentCredential\
\x10\xa3\x06\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_SolanaGetPubl\
icKey\x10\x84\x07\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_SolanaPu\
blicKey\x10\x85\x07\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_Solana\
GetAddress\x10\x86\x07\x1a\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_Sol\
anaAddress\x10\x87\x07\x1a\x04\x98\xb5\x18\x01\x12#\n\x18MessageType_Sol\
anaSignTx\x10\x88\x07\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_Sola\
naTxSignature\x10\x89\x07\x1a\x04\x98\xb5\x18\x01\x1a\x04\xc8\xf3\x18\
\x01\"\x04\x08Z\x10\\\"\x04\x08r\x10z\"\x06\x08\xdb\x01\x10\xdb\x01\"\
\x06\x08\xe0\x01\x10\xe0\x01\"\x06\x08\xac\x02\x10\xb0\x02\"\x06\x08\xb5\
\x02\x10\xb8\x02:<\n\x07wire_in\x18\xd2\x86\x03\x20\x01(\x08\x12!.google\
.protobuf.EnumValueOptionsR\x06wireIn:>\n\x08wire_out\x18\xd3\x86\x03\
\x20\x01(\x08\x12!.google.protobuf.EnumValueOptionsR\x07wireOut:G\n\rwir\
e_debug_in\x18\xd4\x86\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueOp\
tionsR\x0bwireDebugIn:I\n\x0ewire_debug_out\x18\xd5\x86\x03\x20\x01(\x08\
\x12!.google.protobuf.EnumValueOptionsR\x0cwireDebugOut:@\n\twire_tiny\
\x18\xd6\x86\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueOptionsR\x08\
wireTiny:L\n\x0fwire_bootloader\x18\xd7\x86\x03\x20\x01(\x08\x12!.google\
.protobuf.EnumValueOptionsR\x0ewireBootloader:C\n\x0bwire_no_fsm\x18\xd8\
\x86\x03\x20\x01(\x08\x12!.google.protobuf.EnumValueOptionsR\twireNoFsm:\
F\n\x0cbitcoin_only\x18\xe0\xd4\x03\x20\x01(\x08\x12!.google.protobuf.En\
umValueOptionsR\x0bbitcoinOnly:U\n\x17has_bitcoin_only_values\x18\xb9\
\x8e\x03\x20\x01(\x08\x12\x1c.google.protobuf.EnumOptionsR\x14hasBitcoin\
OnlyValues:T\n\x14experimental_message\x18\xa1\x96\x03\x20\x01(\x08\x12\
\x1f.google.protobuf.MessageOptionsR\x13experimentalMessage:>\n\twire_ty\
pe\x18\xa2\x96\x03\x20\x01(\r\x12\x1f.google.protobuf.MessageOptionsR\
\x08wireType:N\n\x12experimental_field\x18\x89\x9e\x03\x20\x01(\x08\x12\
\x1d.google.protobuf.FieldOptionsR\x11experimentalField:U\n\x17include_i\
n_bitcoin_only\x18\xe0\xd4\x03\x20\x01(\x08\x12\x1c.google.protobuf.File\
OptionsR\x14includeInBitcoinOnlyB8\n#com.satoshilabs.trezor.lib.protobuf\
B\rTrezorMessage\x80\xa6\x1d\x01\
";
/// `FileDescriptorProto` object which was a source for this generated file

@ -2023,860 +2023,6 @@ impl ::protobuf::reflect::ProtobufValue for ECDHSessionKey {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.crypto.CosiCommit)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct CosiCommit {
// message fields
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiCommit.address_n)
pub address_n: ::std::vec::Vec<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiCommit.data)
pub data: ::std::option::Option<::std::vec::Vec<u8>>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.crypto.CosiCommit.special_fields)
pub special_fields: ::protobuf::SpecialFields,
}
impl<'a> ::std::default::Default for &'a CosiCommit {
fn default() -> &'a CosiCommit {
<CosiCommit as ::protobuf::Message>::default_instance()
}
}
impl CosiCommit {
pub fn new() -> CosiCommit {
::std::default::Default::default()
}
// optional bytes data = 2;
pub fn data(&self) -> &[u8] {
match self.data.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_data(&mut self) {
self.data = ::std::option::Option::None;
}
pub fn has_data(&self) -> bool {
self.data.is_some()
}
// Param is passed by value, moved
pub fn set_data(&mut self, v: ::std::vec::Vec<u8>) {
self.data = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_data(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.data.is_none() {
self.data = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.data.as_mut().unwrap()
}
// Take field
pub fn take_data(&mut self) -> ::std::vec::Vec<u8> {
self.data.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(2);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
"address_n",
|m: &CosiCommit| { &m.address_n },
|m: &mut CosiCommit| { &mut m.address_n },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"data",
|m: &CosiCommit| { &m.data },
|m: &mut CosiCommit| { &mut m.data },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<CosiCommit>(
"CosiCommit",
fields,
oneofs,
)
}
}
impl ::protobuf::Message for CosiCommit {
const NAME: &'static str = "CosiCommit";
fn is_initialized(&self) -> bool {
true
}
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
while let Some(tag) = is.read_raw_tag_or_eof()? {
match tag {
10 => {
is.read_repeated_packed_uint32_into(&mut self.address_n)?;
},
8 => {
self.address_n.push(is.read_uint32()?);
},
18 => {
self.data = ::std::option::Option::Some(is.read_bytes()?);
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
};
}
::std::result::Result::Ok(())
}
// Compute sizes of nested messages
#[allow(unused_variables)]
fn compute_size(&self) -> u64 {
let mut my_size = 0;
for value in &self.address_n {
my_size += ::protobuf::rt::uint32_size(1, *value);
};
if let Some(v) = self.data.as_ref() {
my_size += ::protobuf::rt::bytes_size(2, &v);
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
}
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
for v in &self.address_n {
os.write_uint32(1, *v)?;
};
if let Some(v) = self.data.as_ref() {
os.write_bytes(2, v)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
fn special_fields(&self) -> &::protobuf::SpecialFields {
&self.special_fields
}
fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
&mut self.special_fields
}
fn new() -> CosiCommit {
CosiCommit::new()
}
fn clear(&mut self) {
self.address_n.clear();
self.data = ::std::option::Option::None;
self.special_fields.clear();
}
fn default_instance() -> &'static CosiCommit {
static instance: CosiCommit = CosiCommit {
address_n: ::std::vec::Vec::new(),
data: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
}
}
impl ::protobuf::MessageFull for CosiCommit {
fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
descriptor.get(|| file_descriptor().message_by_package_relative_name("CosiCommit").unwrap()).clone()
}
}
impl ::std::fmt::Display for CosiCommit {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for CosiCommit {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.crypto.CosiCommitment)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct CosiCommitment {
// message fields
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiCommitment.commitment)
pub commitment: ::std::option::Option<::std::vec::Vec<u8>>,
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiCommitment.pubkey)
pub pubkey: ::std::option::Option<::std::vec::Vec<u8>>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.crypto.CosiCommitment.special_fields)
pub special_fields: ::protobuf::SpecialFields,
}
impl<'a> ::std::default::Default for &'a CosiCommitment {
fn default() -> &'a CosiCommitment {
<CosiCommitment as ::protobuf::Message>::default_instance()
}
}
impl CosiCommitment {
pub fn new() -> CosiCommitment {
::std::default::Default::default()
}
// required bytes commitment = 1;
pub fn commitment(&self) -> &[u8] {
match self.commitment.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_commitment(&mut self) {
self.commitment = ::std::option::Option::None;
}
pub fn has_commitment(&self) -> bool {
self.commitment.is_some()
}
// Param is passed by value, moved
pub fn set_commitment(&mut self, v: ::std::vec::Vec<u8>) {
self.commitment = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_commitment(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.commitment.is_none() {
self.commitment = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.commitment.as_mut().unwrap()
}
// Take field
pub fn take_commitment(&mut self) -> ::std::vec::Vec<u8> {
self.commitment.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
// required bytes pubkey = 2;
pub fn pubkey(&self) -> &[u8] {
match self.pubkey.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_pubkey(&mut self) {
self.pubkey = ::std::option::Option::None;
}
pub fn has_pubkey(&self) -> bool {
self.pubkey.is_some()
}
// Param is passed by value, moved
pub fn set_pubkey(&mut self, v: ::std::vec::Vec<u8>) {
self.pubkey = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_pubkey(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.pubkey.is_none() {
self.pubkey = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.pubkey.as_mut().unwrap()
}
// Take field
pub fn take_pubkey(&mut self) -> ::std::vec::Vec<u8> {
self.pubkey.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(2);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"commitment",
|m: &CosiCommitment| { &m.commitment },
|m: &mut CosiCommitment| { &mut m.commitment },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"pubkey",
|m: &CosiCommitment| { &m.pubkey },
|m: &mut CosiCommitment| { &mut m.pubkey },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<CosiCommitment>(
"CosiCommitment",
fields,
oneofs,
)
}
}
impl ::protobuf::Message for CosiCommitment {
const NAME: &'static str = "CosiCommitment";
fn is_initialized(&self) -> bool {
if self.commitment.is_none() {
return false;
}
if self.pubkey.is_none() {
return false;
}
true
}
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
while let Some(tag) = is.read_raw_tag_or_eof()? {
match tag {
10 => {
self.commitment = ::std::option::Option::Some(is.read_bytes()?);
},
18 => {
self.pubkey = ::std::option::Option::Some(is.read_bytes()?);
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
};
}
::std::result::Result::Ok(())
}
// Compute sizes of nested messages
#[allow(unused_variables)]
fn compute_size(&self) -> u64 {
let mut my_size = 0;
if let Some(v) = self.commitment.as_ref() {
my_size += ::protobuf::rt::bytes_size(1, &v);
}
if let Some(v) = self.pubkey.as_ref() {
my_size += ::protobuf::rt::bytes_size(2, &v);
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
}
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
if let Some(v) = self.commitment.as_ref() {
os.write_bytes(1, v)?;
}
if let Some(v) = self.pubkey.as_ref() {
os.write_bytes(2, v)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
fn special_fields(&self) -> &::protobuf::SpecialFields {
&self.special_fields
}
fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
&mut self.special_fields
}
fn new() -> CosiCommitment {
CosiCommitment::new()
}
fn clear(&mut self) {
self.commitment = ::std::option::Option::None;
self.pubkey = ::std::option::Option::None;
self.special_fields.clear();
}
fn default_instance() -> &'static CosiCommitment {
static instance: CosiCommitment = CosiCommitment {
commitment: ::std::option::Option::None,
pubkey: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
}
}
impl ::protobuf::MessageFull for CosiCommitment {
fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
descriptor.get(|| file_descriptor().message_by_package_relative_name("CosiCommitment").unwrap()).clone()
}
}
impl ::std::fmt::Display for CosiCommitment {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for CosiCommitment {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.crypto.CosiSign)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct CosiSign {
// message fields
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiSign.address_n)
pub address_n: ::std::vec::Vec<u32>,
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiSign.data)
pub data: ::std::option::Option<::std::vec::Vec<u8>>,
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiSign.global_commitment)
pub global_commitment: ::std::option::Option<::std::vec::Vec<u8>>,
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiSign.global_pubkey)
pub global_pubkey: ::std::option::Option<::std::vec::Vec<u8>>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.crypto.CosiSign.special_fields)
pub special_fields: ::protobuf::SpecialFields,
}
impl<'a> ::std::default::Default for &'a CosiSign {
fn default() -> &'a CosiSign {
<CosiSign as ::protobuf::Message>::default_instance()
}
}
impl CosiSign {
pub fn new() -> CosiSign {
::std::default::Default::default()
}
// required bytes data = 2;
pub fn data(&self) -> &[u8] {
match self.data.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_data(&mut self) {
self.data = ::std::option::Option::None;
}
pub fn has_data(&self) -> bool {
self.data.is_some()
}
// Param is passed by value, moved
pub fn set_data(&mut self, v: ::std::vec::Vec<u8>) {
self.data = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_data(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.data.is_none() {
self.data = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.data.as_mut().unwrap()
}
// Take field
pub fn take_data(&mut self) -> ::std::vec::Vec<u8> {
self.data.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
// required bytes global_commitment = 3;
pub fn global_commitment(&self) -> &[u8] {
match self.global_commitment.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_global_commitment(&mut self) {
self.global_commitment = ::std::option::Option::None;
}
pub fn has_global_commitment(&self) -> bool {
self.global_commitment.is_some()
}
// Param is passed by value, moved
pub fn set_global_commitment(&mut self, v: ::std::vec::Vec<u8>) {
self.global_commitment = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_global_commitment(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.global_commitment.is_none() {
self.global_commitment = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.global_commitment.as_mut().unwrap()
}
// Take field
pub fn take_global_commitment(&mut self) -> ::std::vec::Vec<u8> {
self.global_commitment.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
// required bytes global_pubkey = 4;
pub fn global_pubkey(&self) -> &[u8] {
match self.global_pubkey.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_global_pubkey(&mut self) {
self.global_pubkey = ::std::option::Option::None;
}
pub fn has_global_pubkey(&self) -> bool {
self.global_pubkey.is_some()
}
// Param is passed by value, moved
pub fn set_global_pubkey(&mut self, v: ::std::vec::Vec<u8>) {
self.global_pubkey = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_global_pubkey(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.global_pubkey.is_none() {
self.global_pubkey = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.global_pubkey.as_mut().unwrap()
}
// Take field
pub fn take_global_pubkey(&mut self) -> ::std::vec::Vec<u8> {
self.global_pubkey.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(4);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
"address_n",
|m: &CosiSign| { &m.address_n },
|m: &mut CosiSign| { &mut m.address_n },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"data",
|m: &CosiSign| { &m.data },
|m: &mut CosiSign| { &mut m.data },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"global_commitment",
|m: &CosiSign| { &m.global_commitment },
|m: &mut CosiSign| { &mut m.global_commitment },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"global_pubkey",
|m: &CosiSign| { &m.global_pubkey },
|m: &mut CosiSign| { &mut m.global_pubkey },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<CosiSign>(
"CosiSign",
fields,
oneofs,
)
}
}
impl ::protobuf::Message for CosiSign {
const NAME: &'static str = "CosiSign";
fn is_initialized(&self) -> bool {
if self.data.is_none() {
return false;
}
if self.global_commitment.is_none() {
return false;
}
if self.global_pubkey.is_none() {
return false;
}
true
}
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
while let Some(tag) = is.read_raw_tag_or_eof()? {
match tag {
10 => {
is.read_repeated_packed_uint32_into(&mut self.address_n)?;
},
8 => {
self.address_n.push(is.read_uint32()?);
},
18 => {
self.data = ::std::option::Option::Some(is.read_bytes()?);
},
26 => {
self.global_commitment = ::std::option::Option::Some(is.read_bytes()?);
},
34 => {
self.global_pubkey = ::std::option::Option::Some(is.read_bytes()?);
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
};
}
::std::result::Result::Ok(())
}
// Compute sizes of nested messages
#[allow(unused_variables)]
fn compute_size(&self) -> u64 {
let mut my_size = 0;
for value in &self.address_n {
my_size += ::protobuf::rt::uint32_size(1, *value);
};
if let Some(v) = self.data.as_ref() {
my_size += ::protobuf::rt::bytes_size(2, &v);
}
if let Some(v) = self.global_commitment.as_ref() {
my_size += ::protobuf::rt::bytes_size(3, &v);
}
if let Some(v) = self.global_pubkey.as_ref() {
my_size += ::protobuf::rt::bytes_size(4, &v);
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
}
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
for v in &self.address_n {
os.write_uint32(1, *v)?;
};
if let Some(v) = self.data.as_ref() {
os.write_bytes(2, v)?;
}
if let Some(v) = self.global_commitment.as_ref() {
os.write_bytes(3, v)?;
}
if let Some(v) = self.global_pubkey.as_ref() {
os.write_bytes(4, v)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
fn special_fields(&self) -> &::protobuf::SpecialFields {
&self.special_fields
}
fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
&mut self.special_fields
}
fn new() -> CosiSign {
CosiSign::new()
}
fn clear(&mut self) {
self.address_n.clear();
self.data = ::std::option::Option::None;
self.global_commitment = ::std::option::Option::None;
self.global_pubkey = ::std::option::Option::None;
self.special_fields.clear();
}
fn default_instance() -> &'static CosiSign {
static instance: CosiSign = CosiSign {
address_n: ::std::vec::Vec::new(),
data: ::std::option::Option::None,
global_commitment: ::std::option::Option::None,
global_pubkey: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
}
}
impl ::protobuf::MessageFull for CosiSign {
fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
descriptor.get(|| file_descriptor().message_by_package_relative_name("CosiSign").unwrap()).clone()
}
}
impl ::std::fmt::Display for CosiSign {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for CosiSign {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.crypto.CosiSignature)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct CosiSignature {
// message fields
// @@protoc_insertion_point(field:hw.trezor.messages.crypto.CosiSignature.signature)
pub signature: ::std::option::Option<::std::vec::Vec<u8>>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.crypto.CosiSignature.special_fields)
pub special_fields: ::protobuf::SpecialFields,
}
impl<'a> ::std::default::Default for &'a CosiSignature {
fn default() -> &'a CosiSignature {
<CosiSignature as ::protobuf::Message>::default_instance()
}
}
impl CosiSignature {
pub fn new() -> CosiSignature {
::std::default::Default::default()
}
// required bytes signature = 1;
pub fn signature(&self) -> &[u8] {
match self.signature.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_signature(&mut self) {
self.signature = ::std::option::Option::None;
}
pub fn has_signature(&self) -> bool {
self.signature.is_some()
}
// Param is passed by value, moved
pub fn set_signature(&mut self, v: ::std::vec::Vec<u8>) {
self.signature = ::std::option::Option::Some(v);
}
// Mutable pointer to the field.
// If field is not initialized, it is initialized with default value first.
pub fn mut_signature(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.signature.is_none() {
self.signature = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.signature.as_mut().unwrap()
}
// Take field
pub fn take_signature(&mut self) -> ::std::vec::Vec<u8> {
self.signature.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(1);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"signature",
|m: &CosiSignature| { &m.signature },
|m: &mut CosiSignature| { &mut m.signature },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<CosiSignature>(
"CosiSignature",
fields,
oneofs,
)
}
}
impl ::protobuf::Message for CosiSignature {
const NAME: &'static str = "CosiSignature";
fn is_initialized(&self) -> bool {
if self.signature.is_none() {
return false;
}
true
}
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
while let Some(tag) = is.read_raw_tag_or_eof()? {
match tag {
10 => {
self.signature = ::std::option::Option::Some(is.read_bytes()?);
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
};
}
::std::result::Result::Ok(())
}
// Compute sizes of nested messages
#[allow(unused_variables)]
fn compute_size(&self) -> u64 {
let mut my_size = 0;
if let Some(v) = self.signature.as_ref() {
my_size += ::protobuf::rt::bytes_size(1, &v);
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
}
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
if let Some(v) = self.signature.as_ref() {
os.write_bytes(1, v)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
fn special_fields(&self) -> &::protobuf::SpecialFields {
&self.special_fields
}
fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
&mut self.special_fields
}
fn new() -> CosiSignature {
CosiSignature::new()
}
fn clear(&mut self) {
self.signature = ::std::option::Option::None;
self.special_fields.clear();
}
fn default_instance() -> &'static CosiSignature {
static instance: CosiSignature = CosiSignature {
signature: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
}
}
impl ::protobuf::MessageFull for CosiSignature {
fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
descriptor.get(|| file_descriptor().message_by_package_relative_name("CosiSignature").unwrap()).clone()
}
}
impl ::std::fmt::Display for CosiSignature {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for CosiSignature {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x15messages-crypto.proto\x12\x19hw.trezor.messages.crypto\x1a\x0emess\
ages.proto\"\xcb\x01\n\x0eCipherKeyValue\x12\x1b\n\taddress_n\x18\x01\
@ -2902,17 +2048,9 @@ static file_descriptor_proto_data: &'static [u8] = b"\
peR\x08identity\x12&\n\x0fpeer_public_key\x18\x02\x20\x02(\x0cR\rpeerPub\
licKey\x12(\n\x10ecdsa_curve_name\x18\x03\x20\x01(\tR\x0eecdsaCurveName\
\"P\n\x0eECDHSessionKey\x12\x1f\n\x0bsession_key\x18\x01\x20\x02(\x0cR\n\
sessionKey\x12\x1d\n\npublic_key\x18\x02\x20\x01(\x0cR\tpublicKey\"A\n\n\
CosiCommit\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x16\
\n\x04data\x18\x02\x20\x01(\x0cR\x04dataB\x02\x18\x01\"H\n\x0eCosiCommit\
ment\x12\x1e\n\ncommitment\x18\x01\x20\x02(\x0cR\ncommitment\x12\x16\n\
\x06pubkey\x18\x02\x20\x02(\x0cR\x06pubkey\"\x8d\x01\n\x08CosiSign\x12\
\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x12\n\x04data\x18\
\x02\x20\x02(\x0cR\x04data\x12+\n\x11global_commitment\x18\x03\x20\x02(\
\x0cR\x10globalCommitment\x12#\n\rglobal_pubkey\x18\x04\x20\x02(\x0cR\
\x0cglobalPubkey\"-\n\rCosiSignature\x12\x1c\n\tsignature\x18\x01\x20\
\x02(\x0cR\tsignatureB>\n#com.satoshilabs.trezor.lib.protobufB\x13Trezor\
MessageCrypto\x80\xa6\x1d\x01\
sessionKey\x12\x1d\n\npublic_key\x18\x02\x20\x01(\x0cR\tpublicKeyB>\n#co\
m.satoshilabs.trezor.lib.protobufB\x13TrezorMessageCrypto\x80\xa6\x1d\
\x01\
";
/// `FileDescriptorProto` object which was a source for this generated file
@ -2931,7 +2069,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
let generated_file_descriptor = generated_file_descriptor_lazy.get(|| {
let mut deps = ::std::vec::Vec::with_capacity(1);
deps.push(super::messages::file_descriptor().clone());
let mut messages = ::std::vec::Vec::with_capacity(11);
let mut messages = ::std::vec::Vec::with_capacity(7);
messages.push(CipherKeyValue::generated_message_descriptor_data());
messages.push(CipheredKeyValue::generated_message_descriptor_data());
messages.push(IdentityType::generated_message_descriptor_data());
@ -2939,10 +2077,6 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
messages.push(SignedIdentity::generated_message_descriptor_data());
messages.push(GetECDHSessionKey::generated_message_descriptor_data());
messages.push(ECDHSessionKey::generated_message_descriptor_data());
messages.push(CosiCommit::generated_message_descriptor_data());
messages.push(CosiCommitment::generated_message_descriptor_data());
messages.push(CosiSign::generated_message_descriptor_data());
messages.push(CosiSignature::generated_message_descriptor_data());
let mut enums = ::std::vec::Vec::with_capacity(0);
::protobuf::reflect::GeneratedFileDescriptor::new_generated(
file_descriptor_proto(),

@ -1,164 +0,0 @@
# This file is part of the Trezor project.
#
# Copyright (C) 2012-2019 SatoshiLabs and contributors
#
# This library is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the License along with this library.
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
from hashlib import sha256
import pytest
from trezorlib import cosi
from trezorlib.debuglink import TrezorClientDebugLink as Client
from trezorlib.exceptions import TrezorFailure
from trezorlib.tools import H_, Address, parse_path
DIGEST = sha256(b"this is not a pipe").digest()
@pytest.mark.skip_t1
def test_cosi_pubkey(client: Client):
c0 = cosi.commit(client, parse_path("m/10018h/0h"))
c1 = cosi.commit(client, parse_path("m/10018h/1h"))
c2 = cosi.commit(client, parse_path("m/10018h/2h"))
assert c0.pubkey != c1.pubkey
assert c0.pubkey != c2.pubkey
assert c1.pubkey != c2.pubkey
@pytest.mark.skip_t1
def test_cosi_nonce(client: Client):
# The nonce/commitment must change after each signing.
c0 = cosi.commit(client, parse_path("m/10018h/0h"))
cosi.sign(client, parse_path("m/10018h/0h"), DIGEST, c0.commitment, c0.pubkey)
c1 = cosi.commit(client, parse_path("m/10018h/0h"))
assert c0.commitment != c1.commitment
@pytest.mark.skip_t1
def test_cosi_sign1(client: Client):
# Single party signature.
commit = cosi.commit(client, parse_path("m/10018h/0h"))
sig = cosi.sign(
client, parse_path("m/10018h/0h"), DIGEST, commit.commitment, commit.pubkey
)
signature = cosi.combine_sig(commit.commitment, [sig.signature])
cosi.verify_combined(signature, DIGEST, commit.pubkey)
@pytest.mark.skip_t1
def test_cosi_sign2(client: Client):
# Two party signature.
remote_commit = cosi.commit(client, parse_path("m/10018h/1h"))
local_privkey = sha256(b"private key").digest()[:32]
local_pubkey = cosi.pubkey_from_privkey(local_privkey)
local_nonce, local_commitment = cosi.get_nonce(local_privkey, DIGEST, 42)
global_pk = cosi.combine_keys([remote_commit.pubkey, local_pubkey])
global_R = cosi.combine_keys([remote_commit.commitment, local_commitment])
remote_sig = cosi.sign(
client, parse_path("m/10018h/1h"), DIGEST, global_R, global_pk
)
local_sig = cosi.sign_with_privkey(
DIGEST, local_privkey, global_pk, local_nonce, global_R
)
signature = cosi.combine_sig(global_R, [remote_sig.signature, local_sig])
cosi.verify_combined(signature, DIGEST, global_pk)
@pytest.mark.skip_t1
def test_cosi_sign3(client: Client):
# Three party signature.
remote_commit = cosi.commit(client, parse_path("m/10018h/2h"))
local_privkey1 = sha256(b"private key").digest()[:32]
local_pubkey1 = cosi.pubkey_from_privkey(local_privkey1)
local_nonce1, local_commitment1 = cosi.get_nonce(local_privkey1, DIGEST, 42)
local_privkey2 = sha256(b"private key").digest()[:32]
local_pubkey2 = cosi.pubkey_from_privkey(local_privkey2)
local_nonce2, local_commitment2 = cosi.get_nonce(local_privkey2, DIGEST, 42)
global_pk = cosi.combine_keys([remote_commit.pubkey, local_pubkey1, local_pubkey2])
global_R = cosi.combine_keys(
[remote_commit.commitment, local_commitment1, local_commitment2]
)
remote_sig = cosi.sign(
client, parse_path("m/10018h/2h"), DIGEST, global_R, global_pk
)
local_sig1 = cosi.sign_with_privkey(
DIGEST, local_privkey1, global_pk, local_nonce1, global_R
)
local_sig2 = cosi.sign_with_privkey(
DIGEST, local_privkey2, global_pk, local_nonce2, global_R
)
signature = cosi.combine_sig(
global_R, [remote_sig.signature, local_sig1, local_sig2]
)
cosi.verify_combined(signature, DIGEST, global_pk)
@pytest.mark.skip_t1
def test_cosi_different_key(client: Client):
with pytest.raises(TrezorFailure):
commit = cosi.commit(client, parse_path("m/10018h/0h"))
cosi.sign(
client, parse_path("m/10018h/1h"), DIGEST, commit.commitment, commit.pubkey
)
@pytest.mark.parametrize(
"model, image_type",
(
(b"T1B1", 0),
(b"T2T1", 0),
(b"T2B1", 0),
(b"T3W1", 0),
(b"\xfe\xfe\xfe\xfe", 0),
(b"\x00", 0),
(b"\x00", 3),
(b"dog", 0),
(b"42", 0),
(b"T2B1", 1),
(b"T2B1", 2),
(b"T2B1", 3),
),
)
@pytest.mark.skip_t1
def test_slip26_paths(client: Client, model: bytes, image_type: int):
slip26_model = int.from_bytes(model, "little")
path = Address([H_(10026), H_(slip26_model), H_(image_type), H_(0)])
commit = cosi.commit(client, path)
cosi.sign(client, path, DIGEST, commit.commitment, commit.pubkey)
@pytest.mark.parametrize(
"path",
(
"m/44h/0h/0h/0/0",
"m/44h/60h/0h/0/0",
"m/44h/60h/1h",
"m/84h/60h/1h/0",
"m/1",
"m/10018/0",
),
)
def test_invalid_path(client: Client, path: str) -> None:
with pytest.raises(TrezorFailure, match="DataError"):
cosi.commit(client, parse_path(path))
Loading…
Cancel
Save