1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-01-03 12:00:59 +00:00

feat(common): Add messages for entropy check workflow.

[no changelog]
This commit is contained in:
Andrew Kozlik 2024-09-04 16:54:05 +02:00 committed by matejcik
parent f10dc86da2
commit b9b36ef737
11 changed files with 982 additions and 530 deletions

View File

@ -423,6 +423,7 @@ message ResetDevice {
optional bool skip_backup = 8; // postpone seed backup to BackupDevice workflow
optional bool no_backup = 9; // indicate that no backup is going to be made
optional BackupType backup_type = 10 [default=Bip39]; // type of the mnemonic backup
optional bool entropy_check = 11; // run with entropy check protocol
}
/**
@ -444,6 +445,8 @@ message BackupDevice {
* @next EntropyAck
*/
message EntropyRequest {
optional bytes entropy_commitment = 1; // HMAC-SHA256 of Trezor's internal entropy used in entropy check.
optional bytes prev_entropy = 2; // Trezor's internal entropy from the previous round of entropy check.
}
/**
@ -451,7 +454,22 @@ message EntropyRequest {
* @next Success
*/
message EntropyAck {
required bytes entropy = 1; // 256 bits (32 bytes) of random data
required bytes entropy = 1; // 256 bits (32 bytes) of the host's random data
}
/**
* Request: Ask Trezor to reveal its internal entropy.
* @next EntropyAck
*/
message ResetDeviceContinue {
}
/**
* Request: Last step in the entropy check protocol. Stores the generated seed.
* @start
* @next Success
*/
message ResetDeviceFinish {
}
/**

View File

@ -45,6 +45,8 @@ enum MessageType {
MessageType_BackupDevice = 34 [(bitcoin_only) = true, (wire_in) = true];
MessageType_EntropyRequest = 35 [(bitcoin_only) = true, (wire_out) = true];
MessageType_EntropyAck = 36 [(bitcoin_only) = true, (wire_in) = true];
MessageType_ResetDeviceContinue = 994 [(bitcoin_only) = true, (wire_in) = true];
MessageType_ResetDeviceFinish = 995 [(bitcoin_only) = true, (wire_in) = true];
MessageType_PassphraseRequest = 41 [(bitcoin_only) = true, (wire_out) = true];
MessageType_PassphraseAck = 42 [(bitcoin_only) = true, (wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true];
MessageType_RecoveryDevice = 45 [(bitcoin_only) = true, (wire_in) = true];

View File

@ -29,6 +29,8 @@ Nonce = 33
BackupDevice = 34
EntropyRequest = 35
EntropyAck = 36
ResetDeviceContinue = 994
ResetDeviceFinish = 995
PassphraseRequest = 41
PassphraseAck = 42
RecoveryDevice = 45

View File

@ -373,6 +373,8 @@ if TYPE_CHECKING:
BackupDevice = 34
EntropyRequest = 35
EntropyAck = 36
ResetDeviceContinue = 994
ResetDeviceFinish = 995
PassphraseRequest = 41
PassphraseAck = 42
RecoveryDevice = 45

View File

@ -2535,6 +2535,7 @@ if TYPE_CHECKING:
skip_backup: "bool | None"
no_backup: "bool | None"
backup_type: "BackupType"
entropy_check: "bool | None"
def __init__(
self,
@ -2547,6 +2548,7 @@ if TYPE_CHECKING:
skip_backup: "bool | None" = None,
no_backup: "bool | None" = None,
backup_type: "BackupType | None" = None,
entropy_check: "bool | None" = None,
) -> None:
pass
@ -2571,6 +2573,16 @@ if TYPE_CHECKING:
return isinstance(msg, cls)
class EntropyRequest(protobuf.MessageType):
entropy_commitment: "bytes | None"
prev_entropy: "bytes | None"
def __init__(
self,
*,
entropy_commitment: "bytes | None" = None,
prev_entropy: "bytes | None" = None,
) -> None:
pass
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["EntropyRequest"]:
@ -2590,6 +2602,18 @@ if TYPE_CHECKING:
def is_type_of(cls, msg: Any) -> TypeGuard["EntropyAck"]:
return isinstance(msg, cls)
class ResetDeviceContinue(protobuf.MessageType):
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["ResetDeviceContinue"]:
return isinstance(msg, cls)
class ResetDeviceFinish(protobuf.MessageType):
@classmethod
def is_type_of(cls, msg: Any) -> TypeGuard["ResetDeviceFinish"]:
return isinstance(msg, cls)
class RecoveryDevice(protobuf.MessageType):
word_count: "int | None"
passphrase_protection: "bool | None"

View File

@ -11,7 +11,7 @@ SKIPPED_MESSAGES := Binance Cardano DebugMonero Eos Monero Ontology Ripple SdPro
UnlockBootloader AuthenticateDevice AuthenticityProof \
Solana StellarClaimClaimableBalanceOp \
ChangeLanguage TranslationDataRequest TranslationDataAck \
SetBrightness DebugLinkOptigaSetSecMax \
SetBrightness DebugLinkOptigaSetSecMax ResetDeviceContinue GResetDeviceFinish \
BenchmarkListNames BenchmarkRun BenchmarkNames BenchmarkResult
ifeq ($(BITCOIN_ONLY), 1)

View File

@ -30,6 +30,9 @@ BackupDevice.groups type:FT_IGNORE
Entropy.entropy max_size:1024
EntropyRequest.entropy_commitment type:FT_IGNORE
EntropyRequest.prev_entropy type:FT_IGNORE
EntropyAck.entropy max_size:128
RecoveryDevice.language max_size:17

View File

@ -426,6 +426,8 @@ class MessageType(IntEnum):
BackupDevice = 34
EntropyRequest = 35
EntropyAck = 36
ResetDeviceContinue = 994
ResetDeviceFinish = 995
PassphraseRequest = 41
PassphraseAck = 42
RecoveryDevice = 45
@ -3735,6 +3737,7 @@ class ResetDevice(protobuf.MessageType):
8: protobuf.Field("skip_backup", "bool", repeated=False, required=False, default=None),
9: protobuf.Field("no_backup", "bool", repeated=False, required=False, default=None),
10: protobuf.Field("backup_type", "BackupType", repeated=False, required=False, default=BackupType.Bip39),
11: protobuf.Field("entropy_check", "bool", repeated=False, required=False, default=None),
}
def __init__(
@ -3749,6 +3752,7 @@ class ResetDevice(protobuf.MessageType):
skip_backup: Optional["bool"] = None,
no_backup: Optional["bool"] = None,
backup_type: Optional["BackupType"] = BackupType.Bip39,
entropy_check: Optional["bool"] = None,
) -> None:
self.strength = strength
self.passphrase_protection = passphrase_protection
@ -3759,6 +3763,7 @@ class ResetDevice(protobuf.MessageType):
self.skip_backup = skip_backup
self.no_backup = no_backup
self.backup_type = backup_type
self.entropy_check = entropy_check
class BackupDevice(protobuf.MessageType):
@ -3780,6 +3785,19 @@ class BackupDevice(protobuf.MessageType):
class EntropyRequest(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 35
FIELDS = {
1: protobuf.Field("entropy_commitment", "bytes", repeated=False, required=False, default=None),
2: protobuf.Field("prev_entropy", "bytes", repeated=False, required=False, default=None),
}
def __init__(
self,
*,
entropy_commitment: Optional["bytes"] = None,
prev_entropy: Optional["bytes"] = None,
) -> None:
self.entropy_commitment = entropy_commitment
self.prev_entropy = prev_entropy
class EntropyAck(protobuf.MessageType):
@ -3796,6 +3814,14 @@ class EntropyAck(protobuf.MessageType):
self.entropy = entropy
class ResetDeviceContinue(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 994
class ResetDeviceFinish(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 995
class RecoveryDevice(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 45
FIELDS = {

View File

@ -24,6 +24,8 @@ trezor_message_impl! {
BackupDevice => MessageType_BackupDevice,
EntropyRequest => MessageType_EntropyRequest,
EntropyAck => MessageType_EntropyAck,
ResetDeviceContinue => MessageType_ResetDeviceContinue,
ResetDeviceFinish => MessageType_ResetDeviceFinish,
PassphraseRequest => MessageType_PassphraseRequest,
PassphraseAck => MessageType_PassphraseAck,
RecoveryDevice => MessageType_RecoveryDevice,

File diff suppressed because it is too large Load Diff

View File

@ -6866,6 +6866,8 @@ pub struct ResetDevice {
pub no_backup: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.ResetDevice.backup_type)
pub backup_type: ::std::option::Option<::protobuf::EnumOrUnknown<BackupType>>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.ResetDevice.entropy_check)
pub entropy_check: ::std::option::Option<bool>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.ResetDevice.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@ -7090,8 +7092,27 @@ impl ResetDevice {
self.backup_type = ::std::option::Option::Some(::protobuf::EnumOrUnknown::new(v));
}
// optional bool entropy_check = 11;
pub fn entropy_check(&self) -> bool {
self.entropy_check.unwrap_or(false)
}
pub fn clear_entropy_check(&mut self) {
self.entropy_check = ::std::option::Option::None;
}
pub fn has_entropy_check(&self) -> bool {
self.entropy_check.is_some()
}
// Param is passed by value, moved
pub fn set_entropy_check(&mut self, v: bool) {
self.entropy_check = ::std::option::Option::Some(v);
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(9);
let mut fields = ::std::vec::Vec::with_capacity(10);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"strength",
@ -7138,6 +7159,11 @@ impl ResetDevice {
|m: &ResetDevice| { &m.backup_type },
|m: &mut ResetDevice| { &mut m.backup_type },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"entropy_check",
|m: &ResetDevice| { &m.entropy_check },
|m: &mut ResetDevice| { &mut m.entropy_check },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ResetDevice>(
"ResetDevice",
fields,
@ -7183,6 +7209,9 @@ impl ::protobuf::Message for ResetDevice {
80 => {
self.backup_type = ::std::option::Option::Some(is.read_enum_or_unknown()?);
},
88 => {
self.entropy_check = ::std::option::Option::Some(is.read_bool()?);
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@ -7222,6 +7251,9 @@ impl ::protobuf::Message for ResetDevice {
if let Some(v) = self.backup_type {
my_size += ::protobuf::rt::int32_size(10, v.value());
}
if let Some(v) = self.entropy_check {
my_size += 1 + 1;
}
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
self.special_fields.cached_size().set(my_size as u32);
my_size
@ -7255,6 +7287,9 @@ impl ::protobuf::Message for ResetDevice {
if let Some(v) = self.backup_type {
os.write_enum(10, ::protobuf::EnumOrUnknown::value(&v))?;
}
if let Some(v) = self.entropy_check {
os.write_bool(11, v)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@ -7281,6 +7316,7 @@ impl ::protobuf::Message for ResetDevice {
self.skip_backup = ::std::option::Option::None;
self.no_backup = ::std::option::Option::None;
self.backup_type = ::std::option::Option::None;
self.entropy_check = ::std::option::Option::None;
self.special_fields.clear();
}
@ -7295,6 +7331,7 @@ impl ::protobuf::Message for ResetDevice {
skip_backup: ::std::option::Option::None,
no_backup: ::std::option::Option::None,
backup_type: ::std::option::Option::None,
entropy_check: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@ -7673,6 +7710,11 @@ pub mod backup_device {
// @@protoc_insertion_point(message:hw.trezor.messages.management.EntropyRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct EntropyRequest {
// message fields
// @@protoc_insertion_point(field:hw.trezor.messages.management.EntropyRequest.entropy_commitment)
pub entropy_commitment: ::std::option::Option<::std::vec::Vec<u8>>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.EntropyRequest.prev_entropy)
pub prev_entropy: ::std::option::Option<::std::vec::Vec<u8>>,
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.EntropyRequest.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@ -7689,9 +7731,91 @@ impl EntropyRequest {
::std::default::Default::default()
}
// optional bytes entropy_commitment = 1;
pub fn entropy_commitment(&self) -> &[u8] {
match self.entropy_commitment.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_entropy_commitment(&mut self) {
self.entropy_commitment = ::std::option::Option::None;
}
pub fn has_entropy_commitment(&self) -> bool {
self.entropy_commitment.is_some()
}
// Param is passed by value, moved
pub fn set_entropy_commitment(&mut self, v: ::std::vec::Vec<u8>) {
self.entropy_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_entropy_commitment(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.entropy_commitment.is_none() {
self.entropy_commitment = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.entropy_commitment.as_mut().unwrap()
}
// Take field
pub fn take_entropy_commitment(&mut self) -> ::std::vec::Vec<u8> {
self.entropy_commitment.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
// optional bytes prev_entropy = 2;
pub fn prev_entropy(&self) -> &[u8] {
match self.prev_entropy.as_ref() {
Some(v) => v,
None => &[],
}
}
pub fn clear_prev_entropy(&mut self) {
self.prev_entropy = ::std::option::Option::None;
}
pub fn has_prev_entropy(&self) -> bool {
self.prev_entropy.is_some()
}
// Param is passed by value, moved
pub fn set_prev_entropy(&mut self, v: ::std::vec::Vec<u8>) {
self.prev_entropy = ::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_prev_entropy(&mut self) -> &mut ::std::vec::Vec<u8> {
if self.prev_entropy.is_none() {
self.prev_entropy = ::std::option::Option::Some(::std::vec::Vec::new());
}
self.prev_entropy.as_mut().unwrap()
}
// Take field
pub fn take_prev_entropy(&mut self) -> ::std::vec::Vec<u8> {
self.prev_entropy.take().unwrap_or_else(|| ::std::vec::Vec::new())
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(0);
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::<_, _>(
"entropy_commitment",
|m: &EntropyRequest| { &m.entropy_commitment },
|m: &mut EntropyRequest| { &mut m.entropy_commitment },
));
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"prev_entropy",
|m: &EntropyRequest| { &m.prev_entropy },
|m: &mut EntropyRequest| { &mut m.prev_entropy },
));
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<EntropyRequest>(
"EntropyRequest",
fields,
@ -7710,6 +7834,12 @@ impl ::protobuf::Message for EntropyRequest {
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.entropy_commitment = ::std::option::Option::Some(is.read_bytes()?);
},
18 => {
self.prev_entropy = ::std::option::Option::Some(is.read_bytes()?);
},
tag => {
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
},
@ -7722,12 +7852,24 @@ impl ::protobuf::Message for EntropyRequest {
#[allow(unused_variables)]
fn compute_size(&self) -> u64 {
let mut my_size = 0;
if let Some(v) = self.entropy_commitment.as_ref() {
my_size += ::protobuf::rt::bytes_size(1, &v);
}
if let Some(v) = self.prev_entropy.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.entropy_commitment.as_ref() {
os.write_bytes(1, v)?;
}
if let Some(v) = self.prev_entropy.as_ref() {
os.write_bytes(2, v)?;
}
os.write_unknown_fields(self.special_fields.unknown_fields())?;
::std::result::Result::Ok(())
}
@ -7745,11 +7887,15 @@ impl ::protobuf::Message for EntropyRequest {
}
fn clear(&mut self) {
self.entropy_commitment = ::std::option::Option::None;
self.prev_entropy = ::std::option::Option::None;
self.special_fields.clear();
}
fn default_instance() -> &'static EntropyRequest {
static instance: EntropyRequest = EntropyRequest {
entropy_commitment: ::std::option::Option::None,
prev_entropy: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@ -7934,6 +8080,212 @@ impl ::protobuf::reflect::ProtobufValue for EntropyAck {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.management.ResetDeviceContinue)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ResetDeviceContinue {
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.ResetDeviceContinue.special_fields)
pub special_fields: ::protobuf::SpecialFields,
}
impl<'a> ::std::default::Default for &'a ResetDeviceContinue {
fn default() -> &'a ResetDeviceContinue {
<ResetDeviceContinue as ::protobuf::Message>::default_instance()
}
}
impl ResetDeviceContinue {
pub fn new() -> ResetDeviceContinue {
::std::default::Default::default()
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(0);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ResetDeviceContinue>(
"ResetDeviceContinue",
fields,
oneofs,
)
}
}
impl ::protobuf::Message for ResetDeviceContinue {
const NAME: &'static str = "ResetDeviceContinue";
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 {
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;
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<()> {
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() -> ResetDeviceContinue {
ResetDeviceContinue::new()
}
fn clear(&mut self) {
self.special_fields.clear();
}
fn default_instance() -> &'static ResetDeviceContinue {
static instance: ResetDeviceContinue = ResetDeviceContinue {
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
}
}
impl ::protobuf::MessageFull for ResetDeviceContinue {
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("ResetDeviceContinue").unwrap()).clone()
}
}
impl ::std::fmt::Display for ResetDeviceContinue {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for ResetDeviceContinue {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.management.ResetDeviceFinish)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ResetDeviceFinish {
// special fields
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.ResetDeviceFinish.special_fields)
pub special_fields: ::protobuf::SpecialFields,
}
impl<'a> ::std::default::Default for &'a ResetDeviceFinish {
fn default() -> &'a ResetDeviceFinish {
<ResetDeviceFinish as ::protobuf::Message>::default_instance()
}
}
impl ResetDeviceFinish {
pub fn new() -> ResetDeviceFinish {
::std::default::Default::default()
}
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
let mut fields = ::std::vec::Vec::with_capacity(0);
let mut oneofs = ::std::vec::Vec::with_capacity(0);
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ResetDeviceFinish>(
"ResetDeviceFinish",
fields,
oneofs,
)
}
}
impl ::protobuf::Message for ResetDeviceFinish {
const NAME: &'static str = "ResetDeviceFinish";
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 {
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;
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<()> {
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() -> ResetDeviceFinish {
ResetDeviceFinish::new()
}
fn clear(&mut self) {
self.special_fields.clear();
}
fn default_instance() -> &'static ResetDeviceFinish {
static instance: ResetDeviceFinish = ResetDeviceFinish {
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
}
}
impl ::protobuf::MessageFull for ResetDeviceFinish {
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("ResetDeviceFinish").unwrap()).clone()
}
}
impl ::std::fmt::Display for ResetDeviceFinish {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
::protobuf::text_format::fmt(self, f)
}
}
impl ::protobuf::reflect::ProtobufValue for ResetDeviceFinish {
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}
// @@protoc_insertion_point(message:hw.trezor.messages.management.RecoveryDevice)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct RecoveryDevice {
@ -11285,7 +11637,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\
ecksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\x1f\n\x0bu2f_counter\
\x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_backup\x18\t\x20\x01(\
\x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\x08noBacku\
p\"\xf8\x02\n\x0bResetDevice\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\
p\"\x9d\x03\n\x0bResetDevice\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\
\x03256R\x08strength\x123\n\x15passphrase_protection\x18\x03\x20\x01(\
\x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\x04\x20\x01(\
\x08R\rpinProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08langua\
@ -11293,57 +11645,61 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0bskip_back\
up\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\x20\x01(\
\x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw.trezor.m\
essages.management.BackupType:\x05Bip39R\nbackupTypeJ\x04\x08\x01\x10\
\x02\"\xe5\x01\n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\x20\
\x01(\rR\x0egroupThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.hw.tr\
ezor.messages.management.BackupDevice.Slip39GroupR\x06groups\x1a[\n\x0bS\
lip39Group\x12)\n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmemberThres\
hold\x12!\n\x0cmember_count\x18\x02\x20\x02(\rR\x0bmemberCount\"\x10\n\
\x0eEntropyRequest\"&\n\nEntropyAck\x12\x18\n\x07entropy\x18\x01\x20\x02\
(\x0cR\x07entropy\"\x8d\x04\n\x0eRecoveryDevice\x12\x1d\n\nword_count\
\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphrase_protection\x18\x02\
\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\x03\
\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\x04\x20\x01(\tR\
\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x05\x20\x01(\tR\x05labe\
l\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\x0fenforceWordlist\
\x12j\n\x0cinput_method\x18\x08\x20\x01(\x0e2G.hw.trezor.messages.manage\
ment.RecoveryDevice.RecoveryDeviceInputMethodR\x0binputMethod\x12\x1f\n\
\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12O\n\x04type\x18\n\x20\
\x01(\x0e2+.hw.trezor.messages.management.RecoveryType:\x0eNormalRecover\
yR\x04type\";\n\x19RecoveryDeviceInputMethod\x12\x12\n\x0eScrambledWords\
\x10\0\x12\n\n\x06Matrix\x10\x01J\x04\x08\x07\x10\x08\"\xc5\x01\n\x0bWor\
dRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.messages.manage\
ment.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordRequestType\x12\
\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequestType_Matri\
x9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\n\x07WordA\
ck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\rSetU2FCounter\x12\
\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x13\n\x11GetNext\
U2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\
\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14Preauthorized\
Request\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12RebootToBootloader\
\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.manage\
ment.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\x12'\
\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\n\x14\
language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDataLength\"5\
\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UP\
GRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\x19\x01\"#\n\x05Nonce\x12\
\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce:\x04\x88\xb2\x19\x01\";\n\
\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\
\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPathRequest\
\x12\x10\n\x03mac\x18\x01\x20\x01(\x0cR\x03mac\"\x14\n\x12ShowDeviceTuto\
rial\"\x12\n\x10UnlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\
\x18\x01\x20\x01(\rR\x05value*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\
\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\
\x10\x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip\
39_Basic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\
\x05*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPrompt\
Always\x10\x01\x12\x15\n\x11PromptTemporarily\x10\x02*=\n\x0fDisplayRota\
tion\x12\t\n\x05North\x10\0\x12\x08\n\x04East\x10Z\x12\n\n\x05South\x10\
\xb4\x01\x12\t\n\x04West\x10\x8e\x02*0\n\x10HomescreenFormat\x12\x08\n\
\x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04ToiG\x10\x03*H\n\
\x0cRecoveryType\x12\x12\n\x0eNormalRecovery\x10\0\x12\n\n\x06DryRun\x10\
\x01\x12\x18\n\x14UnlockRepeatedBackup\x10\x02BB\n#com.satoshilabs.trezo\
r.lib.protobufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\
essages.management.BackupType:\x05Bip39R\nbackupType\x12#\n\rentropy_che\
ck\x18\x0b\x20\x01(\x08R\x0centropyCheckJ\x04\x08\x01\x10\x02\"\xe5\x01\
\n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\x0egrou\
pThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.messages.ma\
nagement.BackupDevice.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Group\x12)\
\n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12!\n\x0c\
member_count\x18\x02\x20\x02(\rR\x0bmemberCount\"b\n\x0eEntropyRequest\
\x12-\n\x12entropy_commitment\x18\x01\x20\x01(\x0cR\x11entropyCommitment\
\x12!\n\x0cprev_entropy\x18\x02\x20\x01(\x0cR\x0bprevEntropy\"&\n\nEntro\
pyAck\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\x15\n\x13R\
esetDeviceContinue\"\x13\n\x11ResetDeviceFinish\"\x8d\x04\n\x0eRecoveryD\
evice\x12\x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15pas\
sphrase_protection\x18\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\
\x0epin_protection\x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08lan\
guage\x18\x04\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\
\x18\x05\x20\x01(\tR\x05label\x12)\n\x10enforce_wordlist\x18\x06\x20\x01\
(\x08R\x0fenforceWordlist\x12j\n\x0cinput_method\x18\x08\x20\x01(\x0e2G.\
hw.trezor.messages.management.RecoveryDevice.RecoveryDeviceInputMethodR\
\x0binputMethod\x12\x1f\n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\
\x12O\n\x04type\x18\n\x20\x01(\x0e2+.hw.trezor.messages.management.Recov\
eryType:\x0eNormalRecoveryR\x04type\";\n\x19RecoveryDeviceInputMethod\
\x12\x12\n\x0eScrambledWords\x10\0\x12\n\n\x06Matrix\x10\x01J\x04\x08\
\x07\x10\x08\"\xc5\x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\x20\x02(\
\x0e2:.hw.trezor.messages.management.WordRequest.WordRequestTypeR\x04typ\
e\"f\n\x0fWordRequestType\x12\x19\n\x15WordRequestType_Plain\x10\0\x12\
\x1b\n\x17WordRequestType_Matrix9\x10\x01\x12\x1b\n\x17WordRequestType_M\
atrix6\x10\x02\"\x1d\n\x07WordAck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\
\x04word\"0\n\rSetU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\r\
R\nu2fCounter\"\x13\n\x11GetNextU2FCounter\"1\n\x0eNextU2FCounter\x12\
\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreau\
thorized\"\x16\n\x14PreauthorizedRequest\"\x15\n\x13CancelAuthorization\
\"\x9a\x02\n\x12RebootToBootloader\x12o\n\x0cboot_command\x18\x01\x20\
\x01(\x0e2=.hw.trezor.messages.management.RebootToBootloader.BootCommand\
:\rSTOP_AND_WAITR\x0bbootCommand\x12'\n\x0ffirmware_header\x18\x02\x20\
\x01(\x0cR\x0efirmwareHeader\x123\n\x14language_data_length\x18\x03\x20\
\x01(\r:\x010R\x12languageDataLength\"5\n\x0bBootCommand\x12\x11\n\rSTOP\
_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UPGRADE\x10\x01\"\x10\n\x08GetNonce\
:\x04\x88\xb2\x19\x01\"#\n\x05Nonce\x12\x14\n\x05nonce\x18\x01\x20\x02(\
\x0cR\x05nonce:\x04\x88\xb2\x19\x01\";\n\nUnlockPath\x12\x1b\n\taddress_\
n\x18\x01\x20\x03(\rR\x08addressN\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\
\x03mac\"'\n\x13UnlockedPathRequest\x12\x10\n\x03mac\x18\x01\x20\x01(\
\x0cR\x03mac\"\x14\n\x12ShowDeviceTutorial\"\x12\n\x10UnlockBootloader\"\
%\n\rSetBrightness\x12\x14\n\x05value\x18\x01\x20\x01(\rR\x05value*\x99\
\x01\n\nBackupType\x12\t\n\x05Bip39\x10\0\x12\x10\n\x0cSlip39_Basic\x10\
\x01\x12\x13\n\x0fSlip39_Advanced\x10\x02\x12\x1c\n\x18Slip39_Single_Ext\
endable\x10\x03\x12\x1b\n\x17Slip39_Basic_Extendable\x10\x04\x12\x1e\n\
\x1aSlip39_Advanced_Extendable\x10\x05*G\n\x10SafetyCheckLevel\x12\n\n\
\x06Strict\x10\0\x12\x10\n\x0cPromptAlways\x10\x01\x12\x15\n\x11PromptTe\
mporarily\x10\x02*=\n\x0fDisplayRotation\x12\t\n\x05North\x10\0\x12\x08\
\n\x04East\x10Z\x12\n\n\x05South\x10\xb4\x01\x12\t\n\x04West\x10\x8e\x02\
*0\n\x10HomescreenFormat\x12\x08\n\x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\
\x02\x12\x08\n\x04ToiG\x10\x03*H\n\x0cRecoveryType\x12\x12\n\x0eNormalRe\
covery\x10\0\x12\n\n\x06DryRun\x10\x01\x12\x18\n\x14UnlockRepeatedBackup\
\x10\x02BB\n#com.satoshilabs.trezor.lib.protobufB\x17TrezorMessageManage\
ment\x80\xa6\x1d\x01\
";
/// `FileDescriptorProto` object which was a source for this generated file
@ -11362,7 +11718,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::options::file_descriptor().clone());
let mut messages = ::std::vec::Vec::with_capacity(46);
let mut messages = ::std::vec::Vec::with_capacity(48);
messages.push(Initialize::generated_message_descriptor_data());
messages.push(GetFeatures::generated_message_descriptor_data());
messages.push(Features::generated_message_descriptor_data());
@ -11391,6 +11747,8 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
messages.push(BackupDevice::generated_message_descriptor_data());
messages.push(EntropyRequest::generated_message_descriptor_data());
messages.push(EntropyAck::generated_message_descriptor_data());
messages.push(ResetDeviceContinue::generated_message_descriptor_data());
messages.push(ResetDeviceFinish::generated_message_descriptor_data());
messages.push(RecoveryDevice::generated_message_descriptor_data());
messages.push(WordRequest::generated_message_descriptor_data());
messages.push(WordAck::generated_message_descriptor_data());