1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-05-29 04:08:46 +00:00

feat(common): Add PaymentRequest field to Ethereum signing.

This commit is contained in:
Andrew Kozlik 2025-04-10 13:45:05 +02:00
parent e8469d4994
commit 00fb041452
5 changed files with 128 additions and 62 deletions

View File

@ -7,6 +7,7 @@ option java_outer_classname = "TrezorMessageEthereum";
import "messages-common.proto";
import "messages-ethereum-definitions.proto";
import "options.proto";
/**
* Request: Ask device for public key corresponding to address_n path
@ -73,6 +74,7 @@ message EthereumSignTx {
optional uint32 tx_type = 10; // Used for Wanchain
optional ethereum_definitions.EthereumDefinitions definitions = 12; // network and/or token definitions for tx
optional bool chunkify = 13; // display the address in chunks of 4 characters
optional common.PaymentRequest payment_req = 14 [(experimental_field)=true]; // SLIP-24 payment request
}
/**
@ -96,6 +98,7 @@ message EthereumSignTxEIP1559 {
repeated EthereumAccessList access_list = 11; // Access List
optional ethereum_definitions.EthereumDefinitions definitions = 12; // network and/or token definitions for tx
optional bool chunkify = 13; // display the address in chunks of 4 characters
optional common.PaymentRequest payment_req = 14 [(experimental_field)=true]; // SLIP-24 payment request
message EthereumAccessList {
required string address = 1;

View File

@ -85,7 +85,6 @@ Q(apps.bitcoin.sign_tx.helpers)
Q(apps.bitcoin.sign_tx.layout)
Q(apps.bitcoin.sign_tx.matchcheck)
Q(apps.bitcoin.sign_tx.omni)
Q(apps.bitcoin.sign_tx.payment_request)
Q(apps.bitcoin.sign_tx.progress)
Q(apps.bitcoin.sign_tx.sig_hasher)
Q(apps.bitcoin.sign_tx.tx_info)
@ -106,6 +105,7 @@ Q(apps.common.coins)
Q(apps.common.keychain)
Q(apps.common.passphrase)
Q(apps.common.paths)
Q(apps.common.payment_request)
Q(apps.common.readers)
Q(apps.common.request_pin)
Q(apps.common.safety_checks)

View File

@ -3849,6 +3849,7 @@ if TYPE_CHECKING:
tx_type: "int | None"
definitions: "EthereumDefinitions | None"
chunkify: "bool | None"
payment_req: "PaymentRequest | None"
def __init__(
self,
@ -3865,6 +3866,7 @@ if TYPE_CHECKING:
tx_type: "int | None" = None,
definitions: "EthereumDefinitions | None" = None,
chunkify: "bool | None" = None,
payment_req: "PaymentRequest | None" = None,
) -> None:
pass
@ -3886,6 +3888,7 @@ if TYPE_CHECKING:
access_list: "list[EthereumAccessList]"
definitions: "EthereumDefinitions | None"
chunkify: "bool | None"
payment_req: "PaymentRequest | None"
def __init__(
self,
@ -3903,6 +3906,7 @@ if TYPE_CHECKING:
data_initial_chunk: "bytes | None" = None,
definitions: "EthereumDefinitions | None" = None,
chunkify: "bool | None" = None,
payment_req: "PaymentRequest | None" = None,
) -> None:
pass

View File

@ -5220,6 +5220,7 @@ class EthereumSignTx(protobuf.MessageType):
10: protobuf.Field("tx_type", "uint32", repeated=False, required=False, default=None),
12: protobuf.Field("definitions", "EthereumDefinitions", repeated=False, required=False, default=None),
13: protobuf.Field("chunkify", "bool", repeated=False, required=False, default=None),
14: protobuf.Field("payment_req", "PaymentRequest", repeated=False, required=False, default=None),
}
def __init__(
@ -5237,6 +5238,7 @@ class EthereumSignTx(protobuf.MessageType):
tx_type: Optional["int"] = None,
definitions: Optional["EthereumDefinitions"] = None,
chunkify: Optional["bool"] = None,
payment_req: Optional["PaymentRequest"] = None,
) -> None:
self.address_n: Sequence["int"] = address_n if address_n is not None else []
self.gas_price = gas_price
@ -5250,6 +5252,7 @@ class EthereumSignTx(protobuf.MessageType):
self.tx_type = tx_type
self.definitions = definitions
self.chunkify = chunkify
self.payment_req = payment_req
class EthereumSignTxEIP1559(protobuf.MessageType):
@ -5268,6 +5271,7 @@ class EthereumSignTxEIP1559(protobuf.MessageType):
11: protobuf.Field("access_list", "EthereumAccessList", repeated=True, required=False, default=None),
12: protobuf.Field("definitions", "EthereumDefinitions", repeated=False, required=False, default=None),
13: protobuf.Field("chunkify", "bool", repeated=False, required=False, default=None),
14: protobuf.Field("payment_req", "PaymentRequest", repeated=False, required=False, default=None),
}
def __init__(
@ -5286,6 +5290,7 @@ class EthereumSignTxEIP1559(protobuf.MessageType):
data_initial_chunk: Optional["bytes"] = b'',
definitions: Optional["EthereumDefinitions"] = None,
chunkify: Optional["bool"] = None,
payment_req: Optional["PaymentRequest"] = None,
) -> None:
self.address_n: Sequence["int"] = address_n if address_n is not None else []
self.access_list: Sequence["EthereumAccessList"] = access_list if access_list is not None else []
@ -5300,6 +5305,7 @@ class EthereumSignTxEIP1559(protobuf.MessageType):
self.data_initial_chunk = data_initial_chunk
self.definitions = definitions
self.chunkify = chunkify
self.payment_req = payment_req
class EthereumTxRequest(protobuf.MessageType):

View File

@ -922,6 +922,8 @@ pub struct EthereumSignTx {
pub definitions: ::protobuf::MessageField<super::messages_ethereum_definitions::EthereumDefinitions>,
// @@protoc_insertion_point(field:hw.trezor.messages.ethereum.EthereumSignTx.chunkify)
pub chunkify: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.ethereum.EthereumSignTx.payment_req)
pub payment_req: ::protobuf::MessageField<super::messages_common::PaymentRequest>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.ethereum.EthereumSignTx.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@ -1231,7 +1233,7 @@ impl EthereumSignTx {
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(12);
let mut fields = ::std::vec::Vec::with_capacity(13);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
"address_n",
@ -1293,6 +1295,11 @@ impl EthereumSignTx {
|m: &EthereumSignTx| { &m.chunkify },
|m: &mut EthereumSignTx| { &mut m.chunkify },
));
fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, super::messages_common::PaymentRequest>(
"payment_req",
|m: &EthereumSignTx| { &m.payment_req },
|m: &mut EthereumSignTx| { &mut m.payment_req },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<EthereumSignTx>(
"EthereumSignTx",
fields,
@ -1319,6 +1326,11 @@ impl ::protobuf::Message for EthereumSignTx {
return false;
}
};
for v in &self.payment_req {
if !v.is_initialized() {
return false;
}
};
true
}
@ -1364,6 +1376,9 @@ impl ::protobuf::Message for EthereumSignTx {
104 => {
self.chunkify = ::std::option::Option::Some(is.read_bool()?);
},
114 => {
::protobuf::rt::read_singular_message_into_field(is, &mut self.payment_req)?;
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@ -1413,6 +1428,10 @@ impl ::protobuf::Message for EthereumSignTx {
if let Some(v) = self.chunkify {
my_size += 1 + 1;
}
if let Some(v) = self.payment_req.as_ref() {
let len = v.compute_size();
my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@ -1455,6 +1474,9 @@ impl ::protobuf::Message for EthereumSignTx {
if let Some(v) = self.chunkify {
os.write_bool(13, v)?;
}
if let Some(v) = self.payment_req.as_ref() {
::protobuf::rt::write_message_field_with_cached_size(14, v, os)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@ -1484,6 +1506,7 @@ impl ::protobuf::Message for EthereumSignTx {
self.tx_type = ::std::option::Option::None;
self.definitions.clear();
self.chunkify = ::std::option::Option::None;
self.payment_req.clear();
self.special_fields.clear();
}
@ -1501,6 +1524,7 @@ impl ::protobuf::Message for EthereumSignTx {
tx_type: ::std::option::Option::None,
definitions: ::protobuf::MessageField::none(),
chunkify: ::std::option::Option::None,
payment_req: ::protobuf::MessageField::none(),
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@ -1554,6 +1578,8 @@ pub struct EthereumSignTxEIP1559 {
pub definitions: ::protobuf::MessageField<super::messages_ethereum_definitions::EthereumDefinitions>,
// @@protoc_insertion_point(field:hw.trezor.messages.ethereum.EthereumSignTxEIP1559.chunkify)
pub chunkify: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.ethereum.EthereumSignTxEIP1559.payment_req)
pub payment_req: ::protobuf::MessageField<super::messages_common::PaymentRequest>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.ethereum.EthereumSignTxEIP1559.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@ -1880,7 +1906,7 @@ impl EthereumSignTxEIP1559 {
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(13);
let mut fields = ::std::vec::Vec::with_capacity(14);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
"address_n",
@ -1947,6 +1973,11 @@ impl EthereumSignTxEIP1559 {
|m: &EthereumSignTxEIP1559| { &m.chunkify },
|m: &mut EthereumSignTxEIP1559| { &mut m.chunkify },
));
fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, super::messages_common::PaymentRequest>(
"payment_req",
|m: &EthereumSignTxEIP1559| { &m.payment_req },
|m: &mut EthereumSignTxEIP1559| { &mut m.payment_req },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<EthereumSignTxEIP1559>(
"EthereumSignTxEIP1559",
fields,
@ -1990,6 +2021,11 @@ impl ::protobuf::Message for EthereumSignTxEIP1559 {
return false;
}
};
for v in &self.payment_req {
if !v.is_initialized() {
return false;
}
};
true
}
@ -2038,6 +2074,9 @@ impl ::protobuf::Message for EthereumSignTxEIP1559 {
104 => {
self.chunkify = ::std::option::Option::Some(is.read_bool()?);
},
114 => {
::protobuf::rt::read_singular_message_into_field(is, &mut self.payment_req)?;
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@ -2091,6 +2130,10 @@ impl ::protobuf::Message for EthereumSignTxEIP1559 {
if let Some(v) = self.chunkify {
my_size += 1 + 1;
}
if let Some(v) = self.payment_req.as_ref() {
let len = v.compute_size();
my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@ -2136,6 +2179,9 @@ impl ::protobuf::Message for EthereumSignTxEIP1559 {
if let Some(v) = self.chunkify {
os.write_bool(13, v)?;
}
if let Some(v) = self.payment_req.as_ref() {
::protobuf::rt::write_message_field_with_cached_size(14, v, os)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@ -2166,6 +2212,7 @@ impl ::protobuf::Message for EthereumSignTxEIP1559 {
self.access_list.clear();
self.definitions.clear();
self.chunkify = ::std::option::Option::None;
self.payment_req.clear();
self.special_fields.clear();
}
@ -2184,6 +2231,7 @@ impl ::protobuf::Message for EthereumSignTxEIP1559 {
access_list: ::std::vec::Vec::new(),
definitions: ::protobuf::MessageField::none(),
chunkify: ::std::option::Option::None,
payment_req: ::protobuf::MessageField::none(),
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@ -4149,64 +4197,68 @@ impl ::protobuf::reflect::ProtobufValue for EthereumTypedDataSignature {
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x17messages-ethereum.proto\x12\x1bhw.trezor.messages.ethereum\x1a\x15\
messages-common.proto\x1a#messages-ethereum-definitions.proto\"V\n\x14Et\
hereumGetPublicKey\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\
\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08R\x0bshowDisplay\"b\n\x11Eth\
ereumPublicKey\x129\n\x04node\x18\x01\x20\x02(\x0b2%.hw.trezor.messages.\
common.HDNodeTypeR\x04node\x12\x12\n\x04xpub\x18\x02\x20\x02(\tR\x04xpub\
\"\x99\x01\n\x12EthereumGetAddress\x12\x1b\n\taddress_n\x18\x01\x20\x03(\
\rR\x08addressN\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08R\x0bshowDisp\
lay\x12'\n\x0fencoded_network\x18\x03\x20\x01(\x0cR\x0eencodedNetwork\
\x12\x1a\n\x08chunkify\x18\x04\x20\x01(\x08R\x08chunkify\"c\n\x0fEthereu\
mAddress\x12$\n\x0c_old_address\x18\x01\x20\x01(\x0cR\nOldAddressB\x02\
\x18\x01\x12\x18\n\x07address\x18\x02\x20\x01(\tR\x07address\x12\x10\n\
\x03mac\x18\x03\x20\x01(\x0cR\x03mac\"\xad\x03\n\x0eEthereumSignTx\x12\
\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x16\n\x05nonce\x18\
\x02\x20\x01(\x0c:\0R\x05nonce\x12\x1b\n\tgas_price\x18\x03\x20\x02(\x0c\
R\x08gasPrice\x12\x1b\n\tgas_limit\x18\x04\x20\x02(\x0cR\x08gasLimit\x12\
\x10\n\x02to\x18\x0b\x20\x01(\t:\0R\x02to\x12\x16\n\x05value\x18\x06\x20\
\x01(\x0c:\0R\x05value\x12.\n\x12data_initial_chunk\x18\x07\x20\x01(\x0c\
:\0R\x10dataInitialChunk\x12\"\n\x0bdata_length\x18\x08\x20\x01(\r:\x010\
R\ndataLength\x12\x19\n\x08chain_id\x18\t\x20\x02(\x04R\x07chainId\x12\
\x17\n\x07tx_type\x18\n\x20\x01(\rR\x06txType\x12^\n\x0bdefinitions\x18\
\x0c\x20\x01(\x0b2<.hw.trezor.messages.ethereum_definitions.EthereumDefi\
nitionsR\x0bdefinitions\x12\x1a\n\x08chunkify\x18\r\x20\x01(\x08R\x08chu\
nkify\"\xfc\x04\n\x15EthereumSignTxEIP1559\x12\x1b\n\taddress_n\x18\x01\
\x20\x03(\rR\x08addressN\x12\x14\n\x05nonce\x18\x02\x20\x02(\x0cR\x05non\
ce\x12\x1e\n\x0bmax_gas_fee\x18\x03\x20\x02(\x0cR\tmaxGasFee\x12(\n\x10m\
ax_priority_fee\x18\x04\x20\x02(\x0cR\x0emaxPriorityFee\x12\x1b\n\tgas_l\
imit\x18\x05\x20\x02(\x0cR\x08gasLimit\x12\x10\n\x02to\x18\x06\x20\x01(\
\t:\0R\x02to\x12\x14\n\x05value\x18\x07\x20\x02(\x0cR\x05value\x12.\n\
\x12data_initial_chunk\x18\x08\x20\x01(\x0c:\0R\x10dataInitialChunk\x12\
\x1f\n\x0bdata_length\x18\t\x20\x02(\rR\ndataLength\x12\x19\n\x08chain_i\
d\x18\n\x20\x02(\x04R\x07chainId\x12f\n\x0baccess_list\x18\x0b\x20\x03(\
\x0b2E.hw.trezor.messages.ethereum.EthereumSignTxEIP1559.EthereumAccessL\
istR\naccessList\x12^\n\x0bdefinitions\x18\x0c\x20\x01(\x0b2<.hw.trezor.\
messages.ethereum_definitions.EthereumDefinitionsR\x0bdefinitions\x12\
\x1a\n\x08chunkify\x18\r\x20\x01(\x08R\x08chunkify\x1aQ\n\x12EthereumAcc\
essList\x12\x18\n\x07address\x18\x01\x20\x02(\tR\x07address\x12!\n\x0cst\
orage_keys\x18\x02\x20\x03(\x0cR\x0bstorageKeys\"\x97\x01\n\x11EthereumT\
xRequest\x12\x1f\n\x0bdata_length\x18\x01\x20\x01(\rR\ndataLength\x12\
\x1f\n\x0bsignature_v\x18\x02\x20\x01(\rR\nsignatureV\x12\x1f\n\x0bsigna\
ture_r\x18\x03\x20\x01(\x0cR\nsignatureR\x12\x1f\n\x0bsignature_s\x18\
\x04\x20\x01(\x0cR\nsignatureS\".\n\rEthereumTxAck\x12\x1d\n\ndata_chunk\
\x18\x01\x20\x02(\x0cR\tdataChunk\"\x91\x01\n\x13EthereumSignMessage\x12\
\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x18\n\x07message\
\x18\x02\x20\x02(\x0cR\x07message\x12'\n\x0fencoded_network\x18\x03\x20\
\x01(\x0cR\x0eencodedNetwork\x12\x1a\n\x08chunkify\x18\x04\x20\x01(\x08R\
\x08chunkify\"R\n\x18EthereumMessageSignature\x12\x1c\n\tsignature\x18\
\x02\x20\x02(\x0cR\tsignature\x12\x18\n\x07address\x18\x03\x20\x02(\tR\
\x07address\"\x85\x01\n\x15EthereumVerifyMessage\x12\x1c\n\tsignature\
\x18\x02\x20\x02(\x0cR\tsignature\x12\x18\n\x07message\x18\x03\x20\x02(\
\x0cR\x07message\x12\x18\n\x07address\x18\x04\x20\x02(\tR\x07address\x12\
\x1a\n\x08chunkify\x18\x05\x20\x01(\x08R\x08chunkify\"\xb4\x01\n\x15Ethe\
reumSignTypedHash\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\
\x122\n\x15domain_separator_hash\x18\x02\x20\x02(\x0cR\x13domainSeparato\
rHash\x12!\n\x0cmessage_hash\x18\x03\x20\x01(\x0cR\x0bmessageHash\x12'\n\
\x0fencoded_network\x18\x04\x20\x01(\x0cR\x0eencodedNetwork\"T\n\x1aEthe\
reumTypedDataSignature\x12\x1c\n\tsignature\x18\x01\x20\x02(\x0cR\tsigna\
ture\x12\x18\n\x07address\x18\x02\x20\x02(\tR\x07addressB<\n#com.satoshi\
labs.trezor.lib.protobufB\x15TrezorMessageEthereum\
messages-common.proto\x1a#messages-ethereum-definitions.proto\x1a\roptio\
ns.proto\"V\n\x14EthereumGetPublicKey\x12\x1b\n\taddress_n\x18\x01\x20\
\x03(\rR\x08addressN\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08R\x0bsho\
wDisplay\"b\n\x11EthereumPublicKey\x129\n\x04node\x18\x01\x20\x02(\x0b2%\
.hw.trezor.messages.common.HDNodeTypeR\x04node\x12\x12\n\x04xpub\x18\x02\
\x20\x02(\tR\x04xpub\"\x99\x01\n\x12EthereumGetAddress\x12\x1b\n\taddres\
s_n\x18\x01\x20\x03(\rR\x08addressN\x12!\n\x0cshow_display\x18\x02\x20\
\x01(\x08R\x0bshowDisplay\x12'\n\x0fencoded_network\x18\x03\x20\x01(\x0c\
R\x0eencodedNetwork\x12\x1a\n\x08chunkify\x18\x04\x20\x01(\x08R\x08chunk\
ify\"c\n\x0fEthereumAddress\x12$\n\x0c_old_address\x18\x01\x20\x01(\x0cR\
\nOldAddressB\x02\x18\x01\x12\x18\n\x07address\x18\x02\x20\x01(\tR\x07ad\
dress\x12\x10\n\x03mac\x18\x03\x20\x01(\x0cR\x03mac\"\xff\x03\n\x0eEther\
eumSignTx\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x16\n\
\x05nonce\x18\x02\x20\x01(\x0c:\0R\x05nonce\x12\x1b\n\tgas_price\x18\x03\
\x20\x02(\x0cR\x08gasPrice\x12\x1b\n\tgas_limit\x18\x04\x20\x02(\x0cR\
\x08gasLimit\x12\x10\n\x02to\x18\x0b\x20\x01(\t:\0R\x02to\x12\x16\n\x05v\
alue\x18\x06\x20\x01(\x0c:\0R\x05value\x12.\n\x12data_initial_chunk\x18\
\x07\x20\x01(\x0c:\0R\x10dataInitialChunk\x12\"\n\x0bdata_length\x18\x08\
\x20\x01(\r:\x010R\ndataLength\x12\x19\n\x08chain_id\x18\t\x20\x02(\x04R\
\x07chainId\x12\x17\n\x07tx_type\x18\n\x20\x01(\rR\x06txType\x12^\n\x0bd\
efinitions\x18\x0c\x20\x01(\x0b2<.hw.trezor.messages.ethereum_definition\
s.EthereumDefinitionsR\x0bdefinitions\x12\x1a\n\x08chunkify\x18\r\x20\
\x01(\x08R\x08chunkify\x12P\n\x0bpayment_req\x18\x0e\x20\x01(\x0b2).hw.t\
rezor.messages.common.PaymentRequestR\npaymentReqB\x04\xc8\xf0\x19\x01\"\
\xce\x05\n\x15EthereumSignTxEIP1559\x12\x1b\n\taddress_n\x18\x01\x20\x03\
(\rR\x08addressN\x12\x14\n\x05nonce\x18\x02\x20\x02(\x0cR\x05nonce\x12\
\x1e\n\x0bmax_gas_fee\x18\x03\x20\x02(\x0cR\tmaxGasFee\x12(\n\x10max_pri\
ority_fee\x18\x04\x20\x02(\x0cR\x0emaxPriorityFee\x12\x1b\n\tgas_limit\
\x18\x05\x20\x02(\x0cR\x08gasLimit\x12\x10\n\x02to\x18\x06\x20\x01(\t:\0\
R\x02to\x12\x14\n\x05value\x18\x07\x20\x02(\x0cR\x05value\x12.\n\x12data\
_initial_chunk\x18\x08\x20\x01(\x0c:\0R\x10dataInitialChunk\x12\x1f\n\
\x0bdata_length\x18\t\x20\x02(\rR\ndataLength\x12\x19\n\x08chain_id\x18\
\n\x20\x02(\x04R\x07chainId\x12f\n\x0baccess_list\x18\x0b\x20\x03(\x0b2E\
.hw.trezor.messages.ethereum.EthereumSignTxEIP1559.EthereumAccessListR\n\
accessList\x12^\n\x0bdefinitions\x18\x0c\x20\x01(\x0b2<.hw.trezor.messag\
es.ethereum_definitions.EthereumDefinitionsR\x0bdefinitions\x12\x1a\n\
\x08chunkify\x18\r\x20\x01(\x08R\x08chunkify\x12P\n\x0bpayment_req\x18\
\x0e\x20\x01(\x0b2).hw.trezor.messages.common.PaymentRequestR\npaymentRe\
qB\x04\xc8\xf0\x19\x01\x1aQ\n\x12EthereumAccessList\x12\x18\n\x07address\
\x18\x01\x20\x02(\tR\x07address\x12!\n\x0cstorage_keys\x18\x02\x20\x03(\
\x0cR\x0bstorageKeys\"\x97\x01\n\x11EthereumTxRequest\x12\x1f\n\x0bdata_\
length\x18\x01\x20\x01(\rR\ndataLength\x12\x1f\n\x0bsignature_v\x18\x02\
\x20\x01(\rR\nsignatureV\x12\x1f\n\x0bsignature_r\x18\x03\x20\x01(\x0cR\
\nsignatureR\x12\x1f\n\x0bsignature_s\x18\x04\x20\x01(\x0cR\nsignatureS\
\".\n\rEthereumTxAck\x12\x1d\n\ndata_chunk\x18\x01\x20\x02(\x0cR\tdataCh\
unk\"\x91\x01\n\x13EthereumSignMessage\x12\x1b\n\taddress_n\x18\x01\x20\
\x03(\rR\x08addressN\x12\x18\n\x07message\x18\x02\x20\x02(\x0cR\x07messa\
ge\x12'\n\x0fencoded_network\x18\x03\x20\x01(\x0cR\x0eencodedNetwork\x12\
\x1a\n\x08chunkify\x18\x04\x20\x01(\x08R\x08chunkify\"R\n\x18EthereumMes\
sageSignature\x12\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\tsignature\x12\
\x18\n\x07address\x18\x03\x20\x02(\tR\x07address\"\x85\x01\n\x15Ethereum\
VerifyMessage\x12\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\tsignature\x12\
\x18\n\x07message\x18\x03\x20\x02(\x0cR\x07message\x12\x18\n\x07address\
\x18\x04\x20\x02(\tR\x07address\x12\x1a\n\x08chunkify\x18\x05\x20\x01(\
\x08R\x08chunkify\"\xb4\x01\n\x15EthereumSignTypedHash\x12\x1b\n\taddres\
s_n\x18\x01\x20\x03(\rR\x08addressN\x122\n\x15domain_separator_hash\x18\
\x02\x20\x02(\x0cR\x13domainSeparatorHash\x12!\n\x0cmessage_hash\x18\x03\
\x20\x01(\x0cR\x0bmessageHash\x12'\n\x0fencoded_network\x18\x04\x20\x01(\
\x0cR\x0eencodedNetwork\"T\n\x1aEthereumTypedDataSignature\x12\x1c\n\tsi\
gnature\x18\x01\x20\x02(\x0cR\tsignature\x12\x18\n\x07address\x18\x02\
\x20\x02(\tR\x07addressB<\n#com.satoshilabs.trezor.lib.protobufB\x15Trez\
orMessageEthereum\
";
/// `FileDescriptorProto` object which was a source for this generated file
@ -4223,9 +4275,10 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
static file_descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::FileDescriptor> = ::protobuf::rt::Lazy::new();
file_descriptor.get(|| {
let generated_file_descriptor = generated_file_descriptor_lazy.get(|| {
let mut deps = ::std::vec::Vec::with_capacity(2);
let mut deps = ::std::vec::Vec::with_capacity(3);
deps.push(super::messages_common::file_descriptor().clone());
deps.push(super::messages_ethereum_definitions::file_descriptor().clone());
deps.push(super::options::file_descriptor().clone());
let mut messages = ::std::vec::Vec::with_capacity(14);
messages.push(EthereumGetPublicKey::generated_message_descriptor_data());
messages.push(EthereumPublicKey::generated_message_descriptor_data());