// This file is generated by rust-protobuf 3.3.0. Do not edit
// .proto file is parsed by protoc 3.19.6
// @generated

// https://github.com/rust-lang/rust-clippy/issues/702
#![allow(unknown_lints)]
#![allow(clippy::all)]

#![allow(unused_attributes)]
#![cfg_attr(rustfmt, rustfmt::skip)]

#![allow(box_pointers)]
#![allow(dead_code)]
#![allow(missing_docs)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(trivial_casts)]
#![allow(unused_results)]
#![allow(unused_mut)]

//! Generated file from `messages-thp.proto`

/// Generated files are compatible only with the same version
/// of protobuf runtime.
const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_3_3_0;

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpDeviceProperties)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpDeviceProperties {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpDeviceProperties.internal_model)
    pub internal_model: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpDeviceProperties.model_variant)
    pub model_variant: ::std::option::Option<u32>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpDeviceProperties.bootloader_mode)
    pub bootloader_mode: ::std::option::Option<bool>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpDeviceProperties.protocol_version)
    pub protocol_version: ::std::option::Option<u32>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpDeviceProperties.pairing_methods)
    pub pairing_methods: ::std::vec::Vec<::protobuf::EnumOrUnknown<ThpPairingMethod>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpDeviceProperties.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpDeviceProperties {
    fn default() -> &'a ThpDeviceProperties {
        <ThpDeviceProperties as ::protobuf::Message>::default_instance()
    }
}

impl ThpDeviceProperties {
    pub fn new() -> ThpDeviceProperties {
        ::std::default::Default::default()
    }

    // optional string internal_model = 1;

    pub fn internal_model(&self) -> &str {
        match self.internal_model.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_internal_model(&mut self) {
        self.internal_model = ::std::option::Option::None;
    }

    pub fn has_internal_model(&self) -> bool {
        self.internal_model.is_some()
    }

    // Param is passed by value, moved
    pub fn set_internal_model(&mut self, v: ::std::string::String) {
        self.internal_model = ::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_internal_model(&mut self) -> &mut ::std::string::String {
        if self.internal_model.is_none() {
            self.internal_model = ::std::option::Option::Some(::std::string::String::new());
        }
        self.internal_model.as_mut().unwrap()
    }

    // Take field
    pub fn take_internal_model(&mut self) -> ::std::string::String {
        self.internal_model.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional uint32 model_variant = 2;

    pub fn model_variant(&self) -> u32 {
        self.model_variant.unwrap_or(0)
    }

    pub fn clear_model_variant(&mut self) {
        self.model_variant = ::std::option::Option::None;
    }

    pub fn has_model_variant(&self) -> bool {
        self.model_variant.is_some()
    }

    // Param is passed by value, moved
    pub fn set_model_variant(&mut self, v: u32) {
        self.model_variant = ::std::option::Option::Some(v);
    }

    // optional bool bootloader_mode = 3;

    pub fn bootloader_mode(&self) -> bool {
        self.bootloader_mode.unwrap_or(false)
    }

    pub fn clear_bootloader_mode(&mut self) {
        self.bootloader_mode = ::std::option::Option::None;
    }

    pub fn has_bootloader_mode(&self) -> bool {
        self.bootloader_mode.is_some()
    }

    // Param is passed by value, moved
    pub fn set_bootloader_mode(&mut self, v: bool) {
        self.bootloader_mode = ::std::option::Option::Some(v);
    }

    // optional uint32 protocol_version = 4;

    pub fn protocol_version(&self) -> u32 {
        self.protocol_version.unwrap_or(0)
    }

    pub fn clear_protocol_version(&mut self) {
        self.protocol_version = ::std::option::Option::None;
    }

    pub fn has_protocol_version(&self) -> bool {
        self.protocol_version.is_some()
    }

    // Param is passed by value, moved
    pub fn set_protocol_version(&mut self, v: u32) {
        self.protocol_version = ::std::option::Option::Some(v);
    }

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(5);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "internal_model",
            |m: &ThpDeviceProperties| { &m.internal_model },
            |m: &mut ThpDeviceProperties| { &mut m.internal_model },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "model_variant",
            |m: &ThpDeviceProperties| { &m.model_variant },
            |m: &mut ThpDeviceProperties| { &mut m.model_variant },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "bootloader_mode",
            |m: &ThpDeviceProperties| { &m.bootloader_mode },
            |m: &mut ThpDeviceProperties| { &mut m.bootloader_mode },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "protocol_version",
            |m: &ThpDeviceProperties| { &m.protocol_version },
            |m: &mut ThpDeviceProperties| { &mut m.protocol_version },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "pairing_methods",
            |m: &ThpDeviceProperties| { &m.pairing_methods },
            |m: &mut ThpDeviceProperties| { &mut m.pairing_methods },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpDeviceProperties>(
            "ThpDeviceProperties",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpDeviceProperties {
    const NAME: &'static str = "ThpDeviceProperties";

    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 => {
                    self.internal_model = ::std::option::Option::Some(is.read_string()?);
                },
                16 => {
                    self.model_variant = ::std::option::Option::Some(is.read_uint32()?);
                },
                24 => {
                    self.bootloader_mode = ::std::option::Option::Some(is.read_bool()?);
                },
                32 => {
                    self.protocol_version = ::std::option::Option::Some(is.read_uint32()?);
                },
                40 => {
                    self.pairing_methods.push(is.read_enum_or_unknown()?);
                },
                42 => {
                    ::protobuf::rt::read_repeated_packed_enum_or_unknown_into(is, &mut self.pairing_methods)?
                },
                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.internal_model.as_ref() {
            my_size += ::protobuf::rt::string_size(1, &v);
        }
        if let Some(v) = self.model_variant {
            my_size += ::protobuf::rt::uint32_size(2, v);
        }
        if let Some(v) = self.bootloader_mode {
            my_size += 1 + 1;
        }
        if let Some(v) = self.protocol_version {
            my_size += ::protobuf::rt::uint32_size(4, v);
        }
        for value in &self.pairing_methods {
            my_size += ::protobuf::rt::int32_size(5, value.value());
        };
        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.internal_model.as_ref() {
            os.write_string(1, v)?;
        }
        if let Some(v) = self.model_variant {
            os.write_uint32(2, v)?;
        }
        if let Some(v) = self.bootloader_mode {
            os.write_bool(3, v)?;
        }
        if let Some(v) = self.protocol_version {
            os.write_uint32(4, v)?;
        }
        for v in &self.pairing_methods {
            os.write_enum(5, ::protobuf::EnumOrUnknown::value(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() -> ThpDeviceProperties {
        ThpDeviceProperties::new()
    }

    fn clear(&mut self) {
        self.internal_model = ::std::option::Option::None;
        self.model_variant = ::std::option::Option::None;
        self.bootloader_mode = ::std::option::Option::None;
        self.protocol_version = ::std::option::Option::None;
        self.pairing_methods.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpDeviceProperties {
        static instance: ThpDeviceProperties = ThpDeviceProperties {
            internal_model: ::std::option::Option::None,
            model_variant: ::std::option::Option::None,
            bootloader_mode: ::std::option::Option::None,
            protocol_version: ::std::option::Option::None,
            pairing_methods: ::std::vec::Vec::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpDeviceProperties {
    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("ThpDeviceProperties").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpDeviceProperties {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpDeviceProperties {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpHandshakeCompletionReqNoisePayload)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpHandshakeCompletionReqNoisePayload {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpHandshakeCompletionReqNoisePayload.host_pairing_credential)
    pub host_pairing_credential: ::std::option::Option<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpHandshakeCompletionReqNoisePayload.pairing_methods)
    pub pairing_methods: ::std::vec::Vec<::protobuf::EnumOrUnknown<ThpPairingMethod>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpHandshakeCompletionReqNoisePayload.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpHandshakeCompletionReqNoisePayload {
    fn default() -> &'a ThpHandshakeCompletionReqNoisePayload {
        <ThpHandshakeCompletionReqNoisePayload as ::protobuf::Message>::default_instance()
    }
}

impl ThpHandshakeCompletionReqNoisePayload {
    pub fn new() -> ThpHandshakeCompletionReqNoisePayload {
        ::std::default::Default::default()
    }

    // optional bytes host_pairing_credential = 1;

    pub fn host_pairing_credential(&self) -> &[u8] {
        match self.host_pairing_credential.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_host_pairing_credential(&mut self) {
        self.host_pairing_credential = ::std::option::Option::None;
    }

    pub fn has_host_pairing_credential(&self) -> bool {
        self.host_pairing_credential.is_some()
    }

    // Param is passed by value, moved
    pub fn set_host_pairing_credential(&mut self, v: ::std::vec::Vec<u8>) {
        self.host_pairing_credential = ::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_host_pairing_credential(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.host_pairing_credential.is_none() {
            self.host_pairing_credential = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.host_pairing_credential.as_mut().unwrap()
    }

    // Take field
    pub fn take_host_pairing_credential(&mut self) -> ::std::vec::Vec<u8> {
        self.host_pairing_credential.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::<_, _>(
            "host_pairing_credential",
            |m: &ThpHandshakeCompletionReqNoisePayload| { &m.host_pairing_credential },
            |m: &mut ThpHandshakeCompletionReqNoisePayload| { &mut m.host_pairing_credential },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "pairing_methods",
            |m: &ThpHandshakeCompletionReqNoisePayload| { &m.pairing_methods },
            |m: &mut ThpHandshakeCompletionReqNoisePayload| { &mut m.pairing_methods },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpHandshakeCompletionReqNoisePayload>(
            "ThpHandshakeCompletionReqNoisePayload",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpHandshakeCompletionReqNoisePayload {
    const NAME: &'static str = "ThpHandshakeCompletionReqNoisePayload";

    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 => {
                    self.host_pairing_credential = ::std::option::Option::Some(is.read_bytes()?);
                },
                16 => {
                    self.pairing_methods.push(is.read_enum_or_unknown()?);
                },
                18 => {
                    ::protobuf::rt::read_repeated_packed_enum_or_unknown_into(is, &mut self.pairing_methods)?
                },
                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.host_pairing_credential.as_ref() {
            my_size += ::protobuf::rt::bytes_size(1, &v);
        }
        for value in &self.pairing_methods {
            my_size += ::protobuf::rt::int32_size(2, value.value());
        };
        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.host_pairing_credential.as_ref() {
            os.write_bytes(1, v)?;
        }
        for v in &self.pairing_methods {
            os.write_enum(2, ::protobuf::EnumOrUnknown::value(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() -> ThpHandshakeCompletionReqNoisePayload {
        ThpHandshakeCompletionReqNoisePayload::new()
    }

    fn clear(&mut self) {
        self.host_pairing_credential = ::std::option::Option::None;
        self.pairing_methods.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpHandshakeCompletionReqNoisePayload {
        static instance: ThpHandshakeCompletionReqNoisePayload = ThpHandshakeCompletionReqNoisePayload {
            host_pairing_credential: ::std::option::Option::None,
            pairing_methods: ::std::vec::Vec::new(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpHandshakeCompletionReqNoisePayload {
    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("ThpHandshakeCompletionReqNoisePayload").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpHandshakeCompletionReqNoisePayload {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpHandshakeCompletionReqNoisePayload {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCreateNewSession)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCreateNewSession {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCreateNewSession.passphrase)
    pub passphrase: ::std::option::Option<::std::string::String>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCreateNewSession.on_device)
    pub on_device: ::std::option::Option<bool>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCreateNewSession.derive_cardano)
    pub derive_cardano: ::std::option::Option<bool>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCreateNewSession.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCreateNewSession {
    fn default() -> &'a ThpCreateNewSession {
        <ThpCreateNewSession as ::protobuf::Message>::default_instance()
    }
}

impl ThpCreateNewSession {
    pub fn new() -> ThpCreateNewSession {
        ::std::default::Default::default()
    }

    // optional string passphrase = 1;

    pub fn passphrase(&self) -> &str {
        match self.passphrase.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_passphrase(&mut self) {
        self.passphrase = ::std::option::Option::None;
    }

    pub fn has_passphrase(&self) -> bool {
        self.passphrase.is_some()
    }

    // Param is passed by value, moved
    pub fn set_passphrase(&mut self, v: ::std::string::String) {
        self.passphrase = ::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_passphrase(&mut self) -> &mut ::std::string::String {
        if self.passphrase.is_none() {
            self.passphrase = ::std::option::Option::Some(::std::string::String::new());
        }
        self.passphrase.as_mut().unwrap()
    }

    // Take field
    pub fn take_passphrase(&mut self) -> ::std::string::String {
        self.passphrase.take().unwrap_or_else(|| ::std::string::String::new())
    }

    // optional bool on_device = 2;

    pub fn on_device(&self) -> bool {
        self.on_device.unwrap_or(false)
    }

    pub fn clear_on_device(&mut self) {
        self.on_device = ::std::option::Option::None;
    }

    pub fn has_on_device(&self) -> bool {
        self.on_device.is_some()
    }

    // Param is passed by value, moved
    pub fn set_on_device(&mut self, v: bool) {
        self.on_device = ::std::option::Option::Some(v);
    }

    // optional bool derive_cardano = 3;

    pub fn derive_cardano(&self) -> bool {
        self.derive_cardano.unwrap_or(false)
    }

    pub fn clear_derive_cardano(&mut self) {
        self.derive_cardano = ::std::option::Option::None;
    }

    pub fn has_derive_cardano(&self) -> bool {
        self.derive_cardano.is_some()
    }

    // Param is passed by value, moved
    pub fn set_derive_cardano(&mut self, v: bool) {
        self.derive_cardano = ::std::option::Option::Some(v);
    }

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(3);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "passphrase",
            |m: &ThpCreateNewSession| { &m.passphrase },
            |m: &mut ThpCreateNewSession| { &mut m.passphrase },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "on_device",
            |m: &ThpCreateNewSession| { &m.on_device },
            |m: &mut ThpCreateNewSession| { &mut m.on_device },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "derive_cardano",
            |m: &ThpCreateNewSession| { &m.derive_cardano },
            |m: &mut ThpCreateNewSession| { &mut m.derive_cardano },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCreateNewSession>(
            "ThpCreateNewSession",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCreateNewSession {
    const NAME: &'static str = "ThpCreateNewSession";

    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 => {
                    self.passphrase = ::std::option::Option::Some(is.read_string()?);
                },
                16 => {
                    self.on_device = ::std::option::Option::Some(is.read_bool()?);
                },
                24 => {
                    self.derive_cardano = ::std::option::Option::Some(is.read_bool()?);
                },
                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.passphrase.as_ref() {
            my_size += ::protobuf::rt::string_size(1, &v);
        }
        if let Some(v) = self.on_device {
            my_size += 1 + 1;
        }
        if let Some(v) = self.derive_cardano {
            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
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if let Some(v) = self.passphrase.as_ref() {
            os.write_string(1, v)?;
        }
        if let Some(v) = self.on_device {
            os.write_bool(2, v)?;
        }
        if let Some(v) = self.derive_cardano {
            os.write_bool(3, 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() -> ThpCreateNewSession {
        ThpCreateNewSession::new()
    }

    fn clear(&mut self) {
        self.passphrase = ::std::option::Option::None;
        self.on_device = ::std::option::Option::None;
        self.derive_cardano = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCreateNewSession {
        static instance: ThpCreateNewSession = ThpCreateNewSession {
            passphrase: ::std::option::Option::None,
            on_device: ::std::option::Option::None,
            derive_cardano: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCreateNewSession {
    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("ThpCreateNewSession").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCreateNewSession {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCreateNewSession {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpNewSession)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpNewSession {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpNewSession.new_session_id)
    pub new_session_id: ::std::option::Option<u32>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpNewSession.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpNewSession {
    fn default() -> &'a ThpNewSession {
        <ThpNewSession as ::protobuf::Message>::default_instance()
    }
}

impl ThpNewSession {
    pub fn new() -> ThpNewSession {
        ::std::default::Default::default()
    }

    // optional uint32 new_session_id = 1;

    pub fn new_session_id(&self) -> u32 {
        self.new_session_id.unwrap_or(0)
    }

    pub fn clear_new_session_id(&mut self) {
        self.new_session_id = ::std::option::Option::None;
    }

    pub fn has_new_session_id(&self) -> bool {
        self.new_session_id.is_some()
    }

    // Param is passed by value, moved
    pub fn set_new_session_id(&mut self, v: u32) {
        self.new_session_id = ::std::option::Option::Some(v);
    }

    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::<_, _>(
            "new_session_id",
            |m: &ThpNewSession| { &m.new_session_id },
            |m: &mut ThpNewSession| { &mut m.new_session_id },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpNewSession>(
            "ThpNewSession",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpNewSession {
    const NAME: &'static str = "ThpNewSession";

    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 {
                8 => {
                    self.new_session_id = ::std::option::Option::Some(is.read_uint32()?);
                },
                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.new_session_id {
            my_size += ::protobuf::rt::uint32_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.new_session_id {
            os.write_uint32(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() -> ThpNewSession {
        ThpNewSession::new()
    }

    fn clear(&mut self) {
        self.new_session_id = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpNewSession {
        static instance: ThpNewSession = ThpNewSession {
            new_session_id: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpNewSession {
    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("ThpNewSession").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpNewSession {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpNewSession {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpStartPairingRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpStartPairingRequest {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpStartPairingRequest.host_name)
    pub host_name: ::std::option::Option<::std::string::String>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpStartPairingRequest.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpStartPairingRequest {
    fn default() -> &'a ThpStartPairingRequest {
        <ThpStartPairingRequest as ::protobuf::Message>::default_instance()
    }
}

impl ThpStartPairingRequest {
    pub fn new() -> ThpStartPairingRequest {
        ::std::default::Default::default()
    }

    // optional string host_name = 1;

    pub fn host_name(&self) -> &str {
        match self.host_name.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_host_name(&mut self) {
        self.host_name = ::std::option::Option::None;
    }

    pub fn has_host_name(&self) -> bool {
        self.host_name.is_some()
    }

    // Param is passed by value, moved
    pub fn set_host_name(&mut self, v: ::std::string::String) {
        self.host_name = ::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_host_name(&mut self) -> &mut ::std::string::String {
        if self.host_name.is_none() {
            self.host_name = ::std::option::Option::Some(::std::string::String::new());
        }
        self.host_name.as_mut().unwrap()
    }

    // Take field
    pub fn take_host_name(&mut self) -> ::std::string::String {
        self.host_name.take().unwrap_or_else(|| ::std::string::String::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::<_, _>(
            "host_name",
            |m: &ThpStartPairingRequest| { &m.host_name },
            |m: &mut ThpStartPairingRequest| { &mut m.host_name },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpStartPairingRequest>(
            "ThpStartPairingRequest",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpStartPairingRequest {
    const NAME: &'static str = "ThpStartPairingRequest";

    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 => {
                    self.host_name = ::std::option::Option::Some(is.read_string()?);
                },
                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.host_name.as_ref() {
            my_size += ::protobuf::rt::string_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.host_name.as_ref() {
            os.write_string(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() -> ThpStartPairingRequest {
        ThpStartPairingRequest::new()
    }

    fn clear(&mut self) {
        self.host_name = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpStartPairingRequest {
        static instance: ThpStartPairingRequest = ThpStartPairingRequest {
            host_name: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpStartPairingRequest {
    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("ThpStartPairingRequest").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpStartPairingRequest {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpStartPairingRequest {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpPairingPreparationsFinished)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpPairingPreparationsFinished {
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpPairingPreparationsFinished.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpPairingPreparationsFinished {
    fn default() -> &'a ThpPairingPreparationsFinished {
        <ThpPairingPreparationsFinished as ::protobuf::Message>::default_instance()
    }
}

impl ThpPairingPreparationsFinished {
    pub fn new() -> ThpPairingPreparationsFinished {
        ::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::<ThpPairingPreparationsFinished>(
            "ThpPairingPreparationsFinished",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpPairingPreparationsFinished {
    const NAME: &'static str = "ThpPairingPreparationsFinished";

    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() -> ThpPairingPreparationsFinished {
        ThpPairingPreparationsFinished::new()
    }

    fn clear(&mut self) {
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpPairingPreparationsFinished {
        static instance: ThpPairingPreparationsFinished = ThpPairingPreparationsFinished {
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpPairingPreparationsFinished {
    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("ThpPairingPreparationsFinished").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpPairingPreparationsFinished {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpPairingPreparationsFinished {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCodeEntryCommitment)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCodeEntryCommitment {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCodeEntryCommitment.commitment)
    pub commitment: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCodeEntryCommitment.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCodeEntryCommitment {
    fn default() -> &'a ThpCodeEntryCommitment {
        <ThpCodeEntryCommitment as ::protobuf::Message>::default_instance()
    }
}

impl ThpCodeEntryCommitment {
    pub fn new() -> ThpCodeEntryCommitment {
        ::std::default::Default::default()
    }

    // optional 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())
    }

    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::<_, _>(
            "commitment",
            |m: &ThpCodeEntryCommitment| { &m.commitment },
            |m: &mut ThpCodeEntryCommitment| { &mut m.commitment },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCodeEntryCommitment>(
            "ThpCodeEntryCommitment",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCodeEntryCommitment {
    const NAME: &'static str = "ThpCodeEntryCommitment";

    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 => {
                    self.commitment = ::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);
        }
        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)?;
        }
        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() -> ThpCodeEntryCommitment {
        ThpCodeEntryCommitment::new()
    }

    fn clear(&mut self) {
        self.commitment = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCodeEntryCommitment {
        static instance: ThpCodeEntryCommitment = ThpCodeEntryCommitment {
            commitment: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCodeEntryCommitment {
    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("ThpCodeEntryCommitment").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCodeEntryCommitment {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCodeEntryCommitment {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCodeEntryChallenge)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCodeEntryChallenge {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCodeEntryChallenge.challenge)
    pub challenge: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCodeEntryChallenge.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCodeEntryChallenge {
    fn default() -> &'a ThpCodeEntryChallenge {
        <ThpCodeEntryChallenge as ::protobuf::Message>::default_instance()
    }
}

impl ThpCodeEntryChallenge {
    pub fn new() -> ThpCodeEntryChallenge {
        ::std::default::Default::default()
    }

    // optional bytes challenge = 1;

    pub fn challenge(&self) -> &[u8] {
        match self.challenge.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_challenge(&mut self) {
        self.challenge = ::std::option::Option::None;
    }

    pub fn has_challenge(&self) -> bool {
        self.challenge.is_some()
    }

    // Param is passed by value, moved
    pub fn set_challenge(&mut self, v: ::std::vec::Vec<u8>) {
        self.challenge = ::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_challenge(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.challenge.is_none() {
            self.challenge = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.challenge.as_mut().unwrap()
    }

    // Take field
    pub fn take_challenge(&mut self) -> ::std::vec::Vec<u8> {
        self.challenge.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::<_, _>(
            "challenge",
            |m: &ThpCodeEntryChallenge| { &m.challenge },
            |m: &mut ThpCodeEntryChallenge| { &mut m.challenge },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCodeEntryChallenge>(
            "ThpCodeEntryChallenge",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCodeEntryChallenge {
    const NAME: &'static str = "ThpCodeEntryChallenge";

    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 => {
                    self.challenge = ::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.challenge.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.challenge.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() -> ThpCodeEntryChallenge {
        ThpCodeEntryChallenge::new()
    }

    fn clear(&mut self) {
        self.challenge = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCodeEntryChallenge {
        static instance: ThpCodeEntryChallenge = ThpCodeEntryChallenge {
            challenge: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCodeEntryChallenge {
    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("ThpCodeEntryChallenge").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCodeEntryChallenge {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCodeEntryChallenge {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCodeEntryCpaceHost)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCodeEntryCpaceHost {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCodeEntryCpaceHost.cpace_host_public_key)
    pub cpace_host_public_key: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCodeEntryCpaceHost.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCodeEntryCpaceHost {
    fn default() -> &'a ThpCodeEntryCpaceHost {
        <ThpCodeEntryCpaceHost as ::protobuf::Message>::default_instance()
    }
}

impl ThpCodeEntryCpaceHost {
    pub fn new() -> ThpCodeEntryCpaceHost {
        ::std::default::Default::default()
    }

    // optional bytes cpace_host_public_key = 1;

    pub fn cpace_host_public_key(&self) -> &[u8] {
        match self.cpace_host_public_key.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_cpace_host_public_key(&mut self) {
        self.cpace_host_public_key = ::std::option::Option::None;
    }

    pub fn has_cpace_host_public_key(&self) -> bool {
        self.cpace_host_public_key.is_some()
    }

    // Param is passed by value, moved
    pub fn set_cpace_host_public_key(&mut self, v: ::std::vec::Vec<u8>) {
        self.cpace_host_public_key = ::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_cpace_host_public_key(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.cpace_host_public_key.is_none() {
            self.cpace_host_public_key = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.cpace_host_public_key.as_mut().unwrap()
    }

    // Take field
    pub fn take_cpace_host_public_key(&mut self) -> ::std::vec::Vec<u8> {
        self.cpace_host_public_key.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::<_, _>(
            "cpace_host_public_key",
            |m: &ThpCodeEntryCpaceHost| { &m.cpace_host_public_key },
            |m: &mut ThpCodeEntryCpaceHost| { &mut m.cpace_host_public_key },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCodeEntryCpaceHost>(
            "ThpCodeEntryCpaceHost",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCodeEntryCpaceHost {
    const NAME: &'static str = "ThpCodeEntryCpaceHost";

    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 => {
                    self.cpace_host_public_key = ::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.cpace_host_public_key.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.cpace_host_public_key.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() -> ThpCodeEntryCpaceHost {
        ThpCodeEntryCpaceHost::new()
    }

    fn clear(&mut self) {
        self.cpace_host_public_key = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCodeEntryCpaceHost {
        static instance: ThpCodeEntryCpaceHost = ThpCodeEntryCpaceHost {
            cpace_host_public_key: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCodeEntryCpaceHost {
    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("ThpCodeEntryCpaceHost").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCodeEntryCpaceHost {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCodeEntryCpaceHost {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCodeEntryCpaceTrezor)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCodeEntryCpaceTrezor {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCodeEntryCpaceTrezor.cpace_trezor_public_key)
    pub cpace_trezor_public_key: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCodeEntryCpaceTrezor.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCodeEntryCpaceTrezor {
    fn default() -> &'a ThpCodeEntryCpaceTrezor {
        <ThpCodeEntryCpaceTrezor as ::protobuf::Message>::default_instance()
    }
}

impl ThpCodeEntryCpaceTrezor {
    pub fn new() -> ThpCodeEntryCpaceTrezor {
        ::std::default::Default::default()
    }

    // optional bytes cpace_trezor_public_key = 1;

    pub fn cpace_trezor_public_key(&self) -> &[u8] {
        match self.cpace_trezor_public_key.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_cpace_trezor_public_key(&mut self) {
        self.cpace_trezor_public_key = ::std::option::Option::None;
    }

    pub fn has_cpace_trezor_public_key(&self) -> bool {
        self.cpace_trezor_public_key.is_some()
    }

    // Param is passed by value, moved
    pub fn set_cpace_trezor_public_key(&mut self, v: ::std::vec::Vec<u8>) {
        self.cpace_trezor_public_key = ::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_cpace_trezor_public_key(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.cpace_trezor_public_key.is_none() {
            self.cpace_trezor_public_key = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.cpace_trezor_public_key.as_mut().unwrap()
    }

    // Take field
    pub fn take_cpace_trezor_public_key(&mut self) -> ::std::vec::Vec<u8> {
        self.cpace_trezor_public_key.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::<_, _>(
            "cpace_trezor_public_key",
            |m: &ThpCodeEntryCpaceTrezor| { &m.cpace_trezor_public_key },
            |m: &mut ThpCodeEntryCpaceTrezor| { &mut m.cpace_trezor_public_key },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCodeEntryCpaceTrezor>(
            "ThpCodeEntryCpaceTrezor",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCodeEntryCpaceTrezor {
    const NAME: &'static str = "ThpCodeEntryCpaceTrezor";

    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 => {
                    self.cpace_trezor_public_key = ::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.cpace_trezor_public_key.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.cpace_trezor_public_key.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() -> ThpCodeEntryCpaceTrezor {
        ThpCodeEntryCpaceTrezor::new()
    }

    fn clear(&mut self) {
        self.cpace_trezor_public_key = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCodeEntryCpaceTrezor {
        static instance: ThpCodeEntryCpaceTrezor = ThpCodeEntryCpaceTrezor {
            cpace_trezor_public_key: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCodeEntryCpaceTrezor {
    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("ThpCodeEntryCpaceTrezor").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCodeEntryCpaceTrezor {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCodeEntryCpaceTrezor {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCodeEntryTag)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCodeEntryTag {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCodeEntryTag.tag)
    pub tag: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCodeEntryTag.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCodeEntryTag {
    fn default() -> &'a ThpCodeEntryTag {
        <ThpCodeEntryTag as ::protobuf::Message>::default_instance()
    }
}

impl ThpCodeEntryTag {
    pub fn new() -> ThpCodeEntryTag {
        ::std::default::Default::default()
    }

    // optional bytes tag = 2;

    pub fn tag(&self) -> &[u8] {
        match self.tag.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_tag(&mut self) {
        self.tag = ::std::option::Option::None;
    }

    pub fn has_tag(&self) -> bool {
        self.tag.is_some()
    }

    // Param is passed by value, moved
    pub fn set_tag(&mut self, v: ::std::vec::Vec<u8>) {
        self.tag = ::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_tag(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.tag.is_none() {
            self.tag = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.tag.as_mut().unwrap()
    }

    // Take field
    pub fn take_tag(&mut self) -> ::std::vec::Vec<u8> {
        self.tag.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::<_, _>(
            "tag",
            |m: &ThpCodeEntryTag| { &m.tag },
            |m: &mut ThpCodeEntryTag| { &mut m.tag },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCodeEntryTag>(
            "ThpCodeEntryTag",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCodeEntryTag {
    const NAME: &'static str = "ThpCodeEntryTag";

    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 {
                18 => {
                    self.tag = ::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.tag.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.tag.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() -> ThpCodeEntryTag {
        ThpCodeEntryTag::new()
    }

    fn clear(&mut self) {
        self.tag = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCodeEntryTag {
        static instance: ThpCodeEntryTag = ThpCodeEntryTag {
            tag: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCodeEntryTag {
    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("ThpCodeEntryTag").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCodeEntryTag {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCodeEntryTag {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCodeEntrySecret)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCodeEntrySecret {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCodeEntrySecret.secret)
    pub secret: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCodeEntrySecret.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCodeEntrySecret {
    fn default() -> &'a ThpCodeEntrySecret {
        <ThpCodeEntrySecret as ::protobuf::Message>::default_instance()
    }
}

impl ThpCodeEntrySecret {
    pub fn new() -> ThpCodeEntrySecret {
        ::std::default::Default::default()
    }

    // optional bytes secret = 1;

    pub fn secret(&self) -> &[u8] {
        match self.secret.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_secret(&mut self) {
        self.secret = ::std::option::Option::None;
    }

    pub fn has_secret(&self) -> bool {
        self.secret.is_some()
    }

    // Param is passed by value, moved
    pub fn set_secret(&mut self, v: ::std::vec::Vec<u8>) {
        self.secret = ::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_secret(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.secret.is_none() {
            self.secret = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.secret.as_mut().unwrap()
    }

    // Take field
    pub fn take_secret(&mut self) -> ::std::vec::Vec<u8> {
        self.secret.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::<_, _>(
            "secret",
            |m: &ThpCodeEntrySecret| { &m.secret },
            |m: &mut ThpCodeEntrySecret| { &mut m.secret },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCodeEntrySecret>(
            "ThpCodeEntrySecret",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCodeEntrySecret {
    const NAME: &'static str = "ThpCodeEntrySecret";

    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 => {
                    self.secret = ::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.secret.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.secret.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() -> ThpCodeEntrySecret {
        ThpCodeEntrySecret::new()
    }

    fn clear(&mut self) {
        self.secret = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCodeEntrySecret {
        static instance: ThpCodeEntrySecret = ThpCodeEntrySecret {
            secret: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCodeEntrySecret {
    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("ThpCodeEntrySecret").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCodeEntrySecret {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCodeEntrySecret {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpQrCodeTag)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpQrCodeTag {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpQrCodeTag.tag)
    pub tag: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpQrCodeTag.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpQrCodeTag {
    fn default() -> &'a ThpQrCodeTag {
        <ThpQrCodeTag as ::protobuf::Message>::default_instance()
    }
}

impl ThpQrCodeTag {
    pub fn new() -> ThpQrCodeTag {
        ::std::default::Default::default()
    }

    // optional bytes tag = 1;

    pub fn tag(&self) -> &[u8] {
        match self.tag.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_tag(&mut self) {
        self.tag = ::std::option::Option::None;
    }

    pub fn has_tag(&self) -> bool {
        self.tag.is_some()
    }

    // Param is passed by value, moved
    pub fn set_tag(&mut self, v: ::std::vec::Vec<u8>) {
        self.tag = ::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_tag(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.tag.is_none() {
            self.tag = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.tag.as_mut().unwrap()
    }

    // Take field
    pub fn take_tag(&mut self) -> ::std::vec::Vec<u8> {
        self.tag.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::<_, _>(
            "tag",
            |m: &ThpQrCodeTag| { &m.tag },
            |m: &mut ThpQrCodeTag| { &mut m.tag },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpQrCodeTag>(
            "ThpQrCodeTag",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpQrCodeTag {
    const NAME: &'static str = "ThpQrCodeTag";

    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 => {
                    self.tag = ::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.tag.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.tag.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() -> ThpQrCodeTag {
        ThpQrCodeTag::new()
    }

    fn clear(&mut self) {
        self.tag = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpQrCodeTag {
        static instance: ThpQrCodeTag = ThpQrCodeTag {
            tag: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpQrCodeTag {
    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("ThpQrCodeTag").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpQrCodeTag {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpQrCodeTag {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpQrCodeSecret)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpQrCodeSecret {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpQrCodeSecret.secret)
    pub secret: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpQrCodeSecret.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpQrCodeSecret {
    fn default() -> &'a ThpQrCodeSecret {
        <ThpQrCodeSecret as ::protobuf::Message>::default_instance()
    }
}

impl ThpQrCodeSecret {
    pub fn new() -> ThpQrCodeSecret {
        ::std::default::Default::default()
    }

    // optional bytes secret = 1;

    pub fn secret(&self) -> &[u8] {
        match self.secret.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_secret(&mut self) {
        self.secret = ::std::option::Option::None;
    }

    pub fn has_secret(&self) -> bool {
        self.secret.is_some()
    }

    // Param is passed by value, moved
    pub fn set_secret(&mut self, v: ::std::vec::Vec<u8>) {
        self.secret = ::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_secret(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.secret.is_none() {
            self.secret = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.secret.as_mut().unwrap()
    }

    // Take field
    pub fn take_secret(&mut self) -> ::std::vec::Vec<u8> {
        self.secret.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::<_, _>(
            "secret",
            |m: &ThpQrCodeSecret| { &m.secret },
            |m: &mut ThpQrCodeSecret| { &mut m.secret },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpQrCodeSecret>(
            "ThpQrCodeSecret",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpQrCodeSecret {
    const NAME: &'static str = "ThpQrCodeSecret";

    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 => {
                    self.secret = ::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.secret.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.secret.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() -> ThpQrCodeSecret {
        ThpQrCodeSecret::new()
    }

    fn clear(&mut self) {
        self.secret = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpQrCodeSecret {
        static instance: ThpQrCodeSecret = ThpQrCodeSecret {
            secret: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpQrCodeSecret {
    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("ThpQrCodeSecret").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpQrCodeSecret {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpQrCodeSecret {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpNfcUnidirectionalTag)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpNfcUnidirectionalTag {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpNfcUnidirectionalTag.tag)
    pub tag: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpNfcUnidirectionalTag.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpNfcUnidirectionalTag {
    fn default() -> &'a ThpNfcUnidirectionalTag {
        <ThpNfcUnidirectionalTag as ::protobuf::Message>::default_instance()
    }
}

impl ThpNfcUnidirectionalTag {
    pub fn new() -> ThpNfcUnidirectionalTag {
        ::std::default::Default::default()
    }

    // optional bytes tag = 1;

    pub fn tag(&self) -> &[u8] {
        match self.tag.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_tag(&mut self) {
        self.tag = ::std::option::Option::None;
    }

    pub fn has_tag(&self) -> bool {
        self.tag.is_some()
    }

    // Param is passed by value, moved
    pub fn set_tag(&mut self, v: ::std::vec::Vec<u8>) {
        self.tag = ::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_tag(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.tag.is_none() {
            self.tag = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.tag.as_mut().unwrap()
    }

    // Take field
    pub fn take_tag(&mut self) -> ::std::vec::Vec<u8> {
        self.tag.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::<_, _>(
            "tag",
            |m: &ThpNfcUnidirectionalTag| { &m.tag },
            |m: &mut ThpNfcUnidirectionalTag| { &mut m.tag },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpNfcUnidirectionalTag>(
            "ThpNfcUnidirectionalTag",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpNfcUnidirectionalTag {
    const NAME: &'static str = "ThpNfcUnidirectionalTag";

    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 => {
                    self.tag = ::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.tag.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.tag.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() -> ThpNfcUnidirectionalTag {
        ThpNfcUnidirectionalTag::new()
    }

    fn clear(&mut self) {
        self.tag = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpNfcUnidirectionalTag {
        static instance: ThpNfcUnidirectionalTag = ThpNfcUnidirectionalTag {
            tag: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpNfcUnidirectionalTag {
    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("ThpNfcUnidirectionalTag").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpNfcUnidirectionalTag {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpNfcUnidirectionalTag {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpNfcUnidirectionalSecret)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpNfcUnidirectionalSecret {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpNfcUnidirectionalSecret.secret)
    pub secret: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpNfcUnidirectionalSecret.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpNfcUnidirectionalSecret {
    fn default() -> &'a ThpNfcUnidirectionalSecret {
        <ThpNfcUnidirectionalSecret as ::protobuf::Message>::default_instance()
    }
}

impl ThpNfcUnidirectionalSecret {
    pub fn new() -> ThpNfcUnidirectionalSecret {
        ::std::default::Default::default()
    }

    // optional bytes secret = 1;

    pub fn secret(&self) -> &[u8] {
        match self.secret.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_secret(&mut self) {
        self.secret = ::std::option::Option::None;
    }

    pub fn has_secret(&self) -> bool {
        self.secret.is_some()
    }

    // Param is passed by value, moved
    pub fn set_secret(&mut self, v: ::std::vec::Vec<u8>) {
        self.secret = ::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_secret(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.secret.is_none() {
            self.secret = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.secret.as_mut().unwrap()
    }

    // Take field
    pub fn take_secret(&mut self) -> ::std::vec::Vec<u8> {
        self.secret.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::<_, _>(
            "secret",
            |m: &ThpNfcUnidirectionalSecret| { &m.secret },
            |m: &mut ThpNfcUnidirectionalSecret| { &mut m.secret },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpNfcUnidirectionalSecret>(
            "ThpNfcUnidirectionalSecret",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpNfcUnidirectionalSecret {
    const NAME: &'static str = "ThpNfcUnidirectionalSecret";

    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 => {
                    self.secret = ::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.secret.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.secret.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() -> ThpNfcUnidirectionalSecret {
        ThpNfcUnidirectionalSecret::new()
    }

    fn clear(&mut self) {
        self.secret = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpNfcUnidirectionalSecret {
        static instance: ThpNfcUnidirectionalSecret = ThpNfcUnidirectionalSecret {
            secret: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpNfcUnidirectionalSecret {
    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("ThpNfcUnidirectionalSecret").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpNfcUnidirectionalSecret {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpNfcUnidirectionalSecret {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCredentialRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCredentialRequest {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCredentialRequest.host_static_pubkey)
    pub host_static_pubkey: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCredentialRequest.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCredentialRequest {
    fn default() -> &'a ThpCredentialRequest {
        <ThpCredentialRequest as ::protobuf::Message>::default_instance()
    }
}

impl ThpCredentialRequest {
    pub fn new() -> ThpCredentialRequest {
        ::std::default::Default::default()
    }

    // optional bytes host_static_pubkey = 1;

    pub fn host_static_pubkey(&self) -> &[u8] {
        match self.host_static_pubkey.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_host_static_pubkey(&mut self) {
        self.host_static_pubkey = ::std::option::Option::None;
    }

    pub fn has_host_static_pubkey(&self) -> bool {
        self.host_static_pubkey.is_some()
    }

    // Param is passed by value, moved
    pub fn set_host_static_pubkey(&mut self, v: ::std::vec::Vec<u8>) {
        self.host_static_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_host_static_pubkey(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.host_static_pubkey.is_none() {
            self.host_static_pubkey = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.host_static_pubkey.as_mut().unwrap()
    }

    // Take field
    pub fn take_host_static_pubkey(&mut self) -> ::std::vec::Vec<u8> {
        self.host_static_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(1);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "host_static_pubkey",
            |m: &ThpCredentialRequest| { &m.host_static_pubkey },
            |m: &mut ThpCredentialRequest| { &mut m.host_static_pubkey },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCredentialRequest>(
            "ThpCredentialRequest",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCredentialRequest {
    const NAME: &'static str = "ThpCredentialRequest";

    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 => {
                    self.host_static_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.host_static_pubkey.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.host_static_pubkey.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() -> ThpCredentialRequest {
        ThpCredentialRequest::new()
    }

    fn clear(&mut self) {
        self.host_static_pubkey = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCredentialRequest {
        static instance: ThpCredentialRequest = ThpCredentialRequest {
            host_static_pubkey: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCredentialRequest {
    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("ThpCredentialRequest").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCredentialRequest {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCredentialRequest {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCredentialResponse)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCredentialResponse {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCredentialResponse.trezor_static_pubkey)
    pub trezor_static_pubkey: ::std::option::Option<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCredentialResponse.credential)
    pub credential: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCredentialResponse.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCredentialResponse {
    fn default() -> &'a ThpCredentialResponse {
        <ThpCredentialResponse as ::protobuf::Message>::default_instance()
    }
}

impl ThpCredentialResponse {
    pub fn new() -> ThpCredentialResponse {
        ::std::default::Default::default()
    }

    // optional bytes trezor_static_pubkey = 1;

    pub fn trezor_static_pubkey(&self) -> &[u8] {
        match self.trezor_static_pubkey.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_trezor_static_pubkey(&mut self) {
        self.trezor_static_pubkey = ::std::option::Option::None;
    }

    pub fn has_trezor_static_pubkey(&self) -> bool {
        self.trezor_static_pubkey.is_some()
    }

    // Param is passed by value, moved
    pub fn set_trezor_static_pubkey(&mut self, v: ::std::vec::Vec<u8>) {
        self.trezor_static_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_trezor_static_pubkey(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.trezor_static_pubkey.is_none() {
            self.trezor_static_pubkey = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.trezor_static_pubkey.as_mut().unwrap()
    }

    // Take field
    pub fn take_trezor_static_pubkey(&mut self) -> ::std::vec::Vec<u8> {
        self.trezor_static_pubkey.take().unwrap_or_else(|| ::std::vec::Vec::new())
    }

    // optional bytes credential = 2;

    pub fn credential(&self) -> &[u8] {
        match self.credential.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_credential(&mut self) {
        self.credential = ::std::option::Option::None;
    }

    pub fn has_credential(&self) -> bool {
        self.credential.is_some()
    }

    // Param is passed by value, moved
    pub fn set_credential(&mut self, v: ::std::vec::Vec<u8>) {
        self.credential = ::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_credential(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.credential.is_none() {
            self.credential = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.credential.as_mut().unwrap()
    }

    // Take field
    pub fn take_credential(&mut self) -> ::std::vec::Vec<u8> {
        self.credential.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::<_, _>(
            "trezor_static_pubkey",
            |m: &ThpCredentialResponse| { &m.trezor_static_pubkey },
            |m: &mut ThpCredentialResponse| { &mut m.trezor_static_pubkey },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "credential",
            |m: &ThpCredentialResponse| { &m.credential },
            |m: &mut ThpCredentialResponse| { &mut m.credential },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCredentialResponse>(
            "ThpCredentialResponse",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCredentialResponse {
    const NAME: &'static str = "ThpCredentialResponse";

    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 => {
                    self.trezor_static_pubkey = ::std::option::Option::Some(is.read_bytes()?);
                },
                18 => {
                    self.credential = ::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.trezor_static_pubkey.as_ref() {
            my_size += ::protobuf::rt::bytes_size(1, &v);
        }
        if let Some(v) = self.credential.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.trezor_static_pubkey.as_ref() {
            os.write_bytes(1, v)?;
        }
        if let Some(v) = self.credential.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() -> ThpCredentialResponse {
        ThpCredentialResponse::new()
    }

    fn clear(&mut self) {
        self.trezor_static_pubkey = ::std::option::Option::None;
        self.credential = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCredentialResponse {
        static instance: ThpCredentialResponse = ThpCredentialResponse {
            trezor_static_pubkey: ::std::option::Option::None,
            credential: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCredentialResponse {
    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("ThpCredentialResponse").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCredentialResponse {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCredentialResponse {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpEndRequest)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpEndRequest {
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpEndRequest.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpEndRequest {
    fn default() -> &'a ThpEndRequest {
        <ThpEndRequest as ::protobuf::Message>::default_instance()
    }
}

impl ThpEndRequest {
    pub fn new() -> ThpEndRequest {
        ::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::<ThpEndRequest>(
            "ThpEndRequest",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpEndRequest {
    const NAME: &'static str = "ThpEndRequest";

    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() -> ThpEndRequest {
        ThpEndRequest::new()
    }

    fn clear(&mut self) {
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpEndRequest {
        static instance: ThpEndRequest = ThpEndRequest {
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpEndRequest {
    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("ThpEndRequest").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpEndRequest {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpEndRequest {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpEndResponse)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpEndResponse {
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpEndResponse.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpEndResponse {
    fn default() -> &'a ThpEndResponse {
        <ThpEndResponse as ::protobuf::Message>::default_instance()
    }
}

impl ThpEndResponse {
    pub fn new() -> ThpEndResponse {
        ::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::<ThpEndResponse>(
            "ThpEndResponse",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpEndResponse {
    const NAME: &'static str = "ThpEndResponse";

    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() -> ThpEndResponse {
        ThpEndResponse::new()
    }

    fn clear(&mut self) {
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpEndResponse {
        static instance: ThpEndResponse = ThpEndResponse {
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpEndResponse {
    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("ThpEndResponse").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpEndResponse {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpEndResponse {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpCredentialMetadata)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpCredentialMetadata {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpCredentialMetadata.host_name)
    pub host_name: ::std::option::Option<::std::string::String>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpCredentialMetadata.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpCredentialMetadata {
    fn default() -> &'a ThpCredentialMetadata {
        <ThpCredentialMetadata as ::protobuf::Message>::default_instance()
    }
}

impl ThpCredentialMetadata {
    pub fn new() -> ThpCredentialMetadata {
        ::std::default::Default::default()
    }

    // optional string host_name = 1;

    pub fn host_name(&self) -> &str {
        match self.host_name.as_ref() {
            Some(v) => v,
            None => "",
        }
    }

    pub fn clear_host_name(&mut self) {
        self.host_name = ::std::option::Option::None;
    }

    pub fn has_host_name(&self) -> bool {
        self.host_name.is_some()
    }

    // Param is passed by value, moved
    pub fn set_host_name(&mut self, v: ::std::string::String) {
        self.host_name = ::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_host_name(&mut self) -> &mut ::std::string::String {
        if self.host_name.is_none() {
            self.host_name = ::std::option::Option::Some(::std::string::String::new());
        }
        self.host_name.as_mut().unwrap()
    }

    // Take field
    pub fn take_host_name(&mut self) -> ::std::string::String {
        self.host_name.take().unwrap_or_else(|| ::std::string::String::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::<_, _>(
            "host_name",
            |m: &ThpCredentialMetadata| { &m.host_name },
            |m: &mut ThpCredentialMetadata| { &mut m.host_name },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpCredentialMetadata>(
            "ThpCredentialMetadata",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpCredentialMetadata {
    const NAME: &'static str = "ThpCredentialMetadata";

    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 => {
                    self.host_name = ::std::option::Option::Some(is.read_string()?);
                },
                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.host_name.as_ref() {
            my_size += ::protobuf::rt::string_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.host_name.as_ref() {
            os.write_string(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() -> ThpCredentialMetadata {
        ThpCredentialMetadata::new()
    }

    fn clear(&mut self) {
        self.host_name = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpCredentialMetadata {
        static instance: ThpCredentialMetadata = ThpCredentialMetadata {
            host_name: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpCredentialMetadata {
    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("ThpCredentialMetadata").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpCredentialMetadata {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpCredentialMetadata {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpPairingCredential)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpPairingCredential {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpPairingCredential.cred_metadata)
    pub cred_metadata: ::protobuf::MessageField<ThpCredentialMetadata>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpPairingCredential.mac)
    pub mac: ::std::option::Option<::std::vec::Vec<u8>>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpPairingCredential.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpPairingCredential {
    fn default() -> &'a ThpPairingCredential {
        <ThpPairingCredential as ::protobuf::Message>::default_instance()
    }
}

impl ThpPairingCredential {
    pub fn new() -> ThpPairingCredential {
        ::std::default::Default::default()
    }

    // optional bytes mac = 2;

    pub fn mac(&self) -> &[u8] {
        match self.mac.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_mac(&mut self) {
        self.mac = ::std::option::Option::None;
    }

    pub fn has_mac(&self) -> bool {
        self.mac.is_some()
    }

    // Param is passed by value, moved
    pub fn set_mac(&mut self, v: ::std::vec::Vec<u8>) {
        self.mac = ::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_mac(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.mac.is_none() {
            self.mac = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.mac.as_mut().unwrap()
    }

    // Take field
    pub fn take_mac(&mut self) -> ::std::vec::Vec<u8> {
        self.mac.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_message_field_accessor::<_, ThpCredentialMetadata>(
            "cred_metadata",
            |m: &ThpPairingCredential| { &m.cred_metadata },
            |m: &mut ThpPairingCredential| { &mut m.cred_metadata },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
            "mac",
            |m: &ThpPairingCredential| { &m.mac },
            |m: &mut ThpPairingCredential| { &mut m.mac },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpPairingCredential>(
            "ThpPairingCredential",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpPairingCredential {
    const NAME: &'static str = "ThpPairingCredential";

    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 => {
                    ::protobuf::rt::read_singular_message_into_field(is, &mut self.cred_metadata)?;
                },
                18 => {
                    self.mac = ::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.cred_metadata.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
        }
        if let Some(v) = self.mac.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.cred_metadata.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(1, v, os)?;
        }
        if let Some(v) = self.mac.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() -> ThpPairingCredential {
        ThpPairingCredential::new()
    }

    fn clear(&mut self) {
        self.cred_metadata.clear();
        self.mac = ::std::option::Option::None;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpPairingCredential {
        static instance: ThpPairingCredential = ThpPairingCredential {
            cred_metadata: ::protobuf::MessageField::none(),
            mac: ::std::option::Option::None,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpPairingCredential {
    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("ThpPairingCredential").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpPairingCredential {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpPairingCredential {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

// @@protoc_insertion_point(message:hw.trezor.messages.thp.ThpAuthenticatedCredentialData)
#[derive(PartialEq,Clone,Default,Debug)]
pub struct ThpAuthenticatedCredentialData {
    // message fields
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpAuthenticatedCredentialData.host_static_pubkey)
    pub host_static_pubkey: ::std::option::Option<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:hw.trezor.messages.thp.ThpAuthenticatedCredentialData.cred_metadata)
    pub cred_metadata: ::protobuf::MessageField<ThpCredentialMetadata>,
    // special fields
    // @@protoc_insertion_point(special_field:hw.trezor.messages.thp.ThpAuthenticatedCredentialData.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

impl<'a> ::std::default::Default for &'a ThpAuthenticatedCredentialData {
    fn default() -> &'a ThpAuthenticatedCredentialData {
        <ThpAuthenticatedCredentialData as ::protobuf::Message>::default_instance()
    }
}

impl ThpAuthenticatedCredentialData {
    pub fn new() -> ThpAuthenticatedCredentialData {
        ::std::default::Default::default()
    }

    // optional bytes host_static_pubkey = 1;

    pub fn host_static_pubkey(&self) -> &[u8] {
        match self.host_static_pubkey.as_ref() {
            Some(v) => v,
            None => &[],
        }
    }

    pub fn clear_host_static_pubkey(&mut self) {
        self.host_static_pubkey = ::std::option::Option::None;
    }

    pub fn has_host_static_pubkey(&self) -> bool {
        self.host_static_pubkey.is_some()
    }

    // Param is passed by value, moved
    pub fn set_host_static_pubkey(&mut self, v: ::std::vec::Vec<u8>) {
        self.host_static_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_host_static_pubkey(&mut self) -> &mut ::std::vec::Vec<u8> {
        if self.host_static_pubkey.is_none() {
            self.host_static_pubkey = ::std::option::Option::Some(::std::vec::Vec::new());
        }
        self.host_static_pubkey.as_mut().unwrap()
    }

    // Take field
    pub fn take_host_static_pubkey(&mut self) -> ::std::vec::Vec<u8> {
        self.host_static_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::<_, _>(
            "host_static_pubkey",
            |m: &ThpAuthenticatedCredentialData| { &m.host_static_pubkey },
            |m: &mut ThpAuthenticatedCredentialData| { &mut m.host_static_pubkey },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, ThpCredentialMetadata>(
            "cred_metadata",
            |m: &ThpAuthenticatedCredentialData| { &m.cred_metadata },
            |m: &mut ThpAuthenticatedCredentialData| { &mut m.cred_metadata },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ThpAuthenticatedCredentialData>(
            "ThpAuthenticatedCredentialData",
            fields,
            oneofs,
        )
    }
}

impl ::protobuf::Message for ThpAuthenticatedCredentialData {
    const NAME: &'static str = "ThpAuthenticatedCredentialData";

    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 => {
                    self.host_static_pubkey = ::std::option::Option::Some(is.read_bytes()?);
                },
                18 => {
                    ::protobuf::rt::read_singular_message_into_field(is, &mut self.cred_metadata)?;
                },
                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.host_static_pubkey.as_ref() {
            my_size += ::protobuf::rt::bytes_size(1, &v);
        }
        if let Some(v) = self.cred_metadata.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
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        if let Some(v) = self.host_static_pubkey.as_ref() {
            os.write_bytes(1, v)?;
        }
        if let Some(v) = self.cred_metadata.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(2, v, os)?;
        }
        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() -> ThpAuthenticatedCredentialData {
        ThpAuthenticatedCredentialData::new()
    }

    fn clear(&mut self) {
        self.host_static_pubkey = ::std::option::Option::None;
        self.cred_metadata.clear();
        self.special_fields.clear();
    }

    fn default_instance() -> &'static ThpAuthenticatedCredentialData {
        static instance: ThpAuthenticatedCredentialData = ThpAuthenticatedCredentialData {
            host_static_pubkey: ::std::option::Option::None,
            cred_metadata: ::protobuf::MessageField::none(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

impl ::protobuf::MessageFull for ThpAuthenticatedCredentialData {
    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("ThpAuthenticatedCredentialData").unwrap()).clone()
    }
}

impl ::std::fmt::Display for ThpAuthenticatedCredentialData {
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
        ::protobuf::text_format::fmt(self, f)
    }
}

impl ::protobuf::reflect::ProtobufValue for ThpAuthenticatedCredentialData {
    type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
}

#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:hw.trezor.messages.thp.ThpMessageType)
pub enum ThpMessageType {
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCreateNewSession)
    ThpMessageType_ThpCreateNewSession = 1000,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpNewSession)
    ThpMessageType_ThpNewSession = 1001,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpStartPairingRequest)
    ThpMessageType_ThpStartPairingRequest = 1008,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpPairingPreparationsFinished)
    ThpMessageType_ThpPairingPreparationsFinished = 1009,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCredentialRequest)
    ThpMessageType_ThpCredentialRequest = 1010,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCredentialResponse)
    ThpMessageType_ThpCredentialResponse = 1011,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpEndRequest)
    ThpMessageType_ThpEndRequest = 1012,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpEndResponse)
    ThpMessageType_ThpEndResponse = 1013,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCodeEntryCommitment)
    ThpMessageType_ThpCodeEntryCommitment = 1016,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCodeEntryChallenge)
    ThpMessageType_ThpCodeEntryChallenge = 1017,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCodeEntryCpaceHost)
    ThpMessageType_ThpCodeEntryCpaceHost = 1018,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCodeEntryCpaceTrezor)
    ThpMessageType_ThpCodeEntryCpaceTrezor = 1019,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCodeEntryTag)
    ThpMessageType_ThpCodeEntryTag = 1020,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpCodeEntrySecret)
    ThpMessageType_ThpCodeEntrySecret = 1021,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpQrCodeTag)
    ThpMessageType_ThpQrCodeTag = 1024,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpQrCodeSecret)
    ThpMessageType_ThpQrCodeSecret = 1025,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpNfcUnidirectionalTag)
    ThpMessageType_ThpNfcUnidirectionalTag = 1032,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpMessageType.ThpMessageType_ThpNfcUnidirectionalSecret)
    ThpMessageType_ThpNfcUnidirectionalSecret = 1033,
}

impl ::protobuf::Enum for ThpMessageType {
    const NAME: &'static str = "ThpMessageType";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<ThpMessageType> {
        match value {
            1000 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCreateNewSession),
            1001 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpNewSession),
            1008 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpStartPairingRequest),
            1009 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpPairingPreparationsFinished),
            1010 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCredentialRequest),
            1011 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCredentialResponse),
            1012 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpEndRequest),
            1013 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpEndResponse),
            1016 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryCommitment),
            1017 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryChallenge),
            1018 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryCpaceHost),
            1019 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryCpaceTrezor),
            1020 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryTag),
            1021 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntrySecret),
            1024 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpQrCodeTag),
            1025 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpQrCodeSecret),
            1032 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpNfcUnidirectionalTag),
            1033 => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpNfcUnidirectionalSecret),
            _ => ::std::option::Option::None
        }
    }

    fn from_str(str: &str) -> ::std::option::Option<ThpMessageType> {
        match str {
            "ThpMessageType_ThpCreateNewSession" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCreateNewSession),
            "ThpMessageType_ThpNewSession" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpNewSession),
            "ThpMessageType_ThpStartPairingRequest" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpStartPairingRequest),
            "ThpMessageType_ThpPairingPreparationsFinished" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpPairingPreparationsFinished),
            "ThpMessageType_ThpCredentialRequest" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCredentialRequest),
            "ThpMessageType_ThpCredentialResponse" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCredentialResponse),
            "ThpMessageType_ThpEndRequest" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpEndRequest),
            "ThpMessageType_ThpEndResponse" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpEndResponse),
            "ThpMessageType_ThpCodeEntryCommitment" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryCommitment),
            "ThpMessageType_ThpCodeEntryChallenge" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryChallenge),
            "ThpMessageType_ThpCodeEntryCpaceHost" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryCpaceHost),
            "ThpMessageType_ThpCodeEntryCpaceTrezor" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryCpaceTrezor),
            "ThpMessageType_ThpCodeEntryTag" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntryTag),
            "ThpMessageType_ThpCodeEntrySecret" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpCodeEntrySecret),
            "ThpMessageType_ThpQrCodeTag" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpQrCodeTag),
            "ThpMessageType_ThpQrCodeSecret" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpQrCodeSecret),
            "ThpMessageType_ThpNfcUnidirectionalTag" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpNfcUnidirectionalTag),
            "ThpMessageType_ThpNfcUnidirectionalSecret" => ::std::option::Option::Some(ThpMessageType::ThpMessageType_ThpNfcUnidirectionalSecret),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [ThpMessageType] = &[
        ThpMessageType::ThpMessageType_ThpCreateNewSession,
        ThpMessageType::ThpMessageType_ThpNewSession,
        ThpMessageType::ThpMessageType_ThpStartPairingRequest,
        ThpMessageType::ThpMessageType_ThpPairingPreparationsFinished,
        ThpMessageType::ThpMessageType_ThpCredentialRequest,
        ThpMessageType::ThpMessageType_ThpCredentialResponse,
        ThpMessageType::ThpMessageType_ThpEndRequest,
        ThpMessageType::ThpMessageType_ThpEndResponse,
        ThpMessageType::ThpMessageType_ThpCodeEntryCommitment,
        ThpMessageType::ThpMessageType_ThpCodeEntryChallenge,
        ThpMessageType::ThpMessageType_ThpCodeEntryCpaceHost,
        ThpMessageType::ThpMessageType_ThpCodeEntryCpaceTrezor,
        ThpMessageType::ThpMessageType_ThpCodeEntryTag,
        ThpMessageType::ThpMessageType_ThpCodeEntrySecret,
        ThpMessageType::ThpMessageType_ThpQrCodeTag,
        ThpMessageType::ThpMessageType_ThpQrCodeSecret,
        ThpMessageType::ThpMessageType_ThpNfcUnidirectionalTag,
        ThpMessageType::ThpMessageType_ThpNfcUnidirectionalSecret,
    ];
}

impl ::protobuf::EnumFull for ThpMessageType {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("ThpMessageType").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = match self {
            ThpMessageType::ThpMessageType_ThpCreateNewSession => 0,
            ThpMessageType::ThpMessageType_ThpNewSession => 1,
            ThpMessageType::ThpMessageType_ThpStartPairingRequest => 2,
            ThpMessageType::ThpMessageType_ThpPairingPreparationsFinished => 3,
            ThpMessageType::ThpMessageType_ThpCredentialRequest => 4,
            ThpMessageType::ThpMessageType_ThpCredentialResponse => 5,
            ThpMessageType::ThpMessageType_ThpEndRequest => 6,
            ThpMessageType::ThpMessageType_ThpEndResponse => 7,
            ThpMessageType::ThpMessageType_ThpCodeEntryCommitment => 8,
            ThpMessageType::ThpMessageType_ThpCodeEntryChallenge => 9,
            ThpMessageType::ThpMessageType_ThpCodeEntryCpaceHost => 10,
            ThpMessageType::ThpMessageType_ThpCodeEntryCpaceTrezor => 11,
            ThpMessageType::ThpMessageType_ThpCodeEntryTag => 12,
            ThpMessageType::ThpMessageType_ThpCodeEntrySecret => 13,
            ThpMessageType::ThpMessageType_ThpQrCodeTag => 14,
            ThpMessageType::ThpMessageType_ThpQrCodeSecret => 15,
            ThpMessageType::ThpMessageType_ThpNfcUnidirectionalTag => 16,
            ThpMessageType::ThpMessageType_ThpNfcUnidirectionalSecret => 17,
        };
        Self::enum_descriptor().value_by_index(index)
    }
}

// Note, `Default` is implemented although default value is not 0
impl ::std::default::Default for ThpMessageType {
    fn default() -> Self {
        ThpMessageType::ThpMessageType_ThpCreateNewSession
    }
}

impl ThpMessageType {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<ThpMessageType>("ThpMessageType")
    }
}

#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
// @@protoc_insertion_point(enum:hw.trezor.messages.thp.ThpPairingMethod)
pub enum ThpPairingMethod {
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpPairingMethod.NoMethod)
    NoMethod = 1,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpPairingMethod.CodeEntry)
    CodeEntry = 2,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpPairingMethod.QrCode)
    QrCode = 3,
    // @@protoc_insertion_point(enum_value:hw.trezor.messages.thp.ThpPairingMethod.NFC_Unidirectional)
    NFC_Unidirectional = 4,
}

impl ::protobuf::Enum for ThpPairingMethod {
    const NAME: &'static str = "ThpPairingMethod";

    fn value(&self) -> i32 {
        *self as i32
    }

    fn from_i32(value: i32) -> ::std::option::Option<ThpPairingMethod> {
        match value {
            1 => ::std::option::Option::Some(ThpPairingMethod::NoMethod),
            2 => ::std::option::Option::Some(ThpPairingMethod::CodeEntry),
            3 => ::std::option::Option::Some(ThpPairingMethod::QrCode),
            4 => ::std::option::Option::Some(ThpPairingMethod::NFC_Unidirectional),
            _ => ::std::option::Option::None
        }
    }

    fn from_str(str: &str) -> ::std::option::Option<ThpPairingMethod> {
        match str {
            "NoMethod" => ::std::option::Option::Some(ThpPairingMethod::NoMethod),
            "CodeEntry" => ::std::option::Option::Some(ThpPairingMethod::CodeEntry),
            "QrCode" => ::std::option::Option::Some(ThpPairingMethod::QrCode),
            "NFC_Unidirectional" => ::std::option::Option::Some(ThpPairingMethod::NFC_Unidirectional),
            _ => ::std::option::Option::None
        }
    }

    const VALUES: &'static [ThpPairingMethod] = &[
        ThpPairingMethod::NoMethod,
        ThpPairingMethod::CodeEntry,
        ThpPairingMethod::QrCode,
        ThpPairingMethod::NFC_Unidirectional,
    ];
}

impl ::protobuf::EnumFull for ThpPairingMethod {
    fn enum_descriptor() -> ::protobuf::reflect::EnumDescriptor {
        static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::Lazy::new();
        descriptor.get(|| file_descriptor().enum_by_package_relative_name("ThpPairingMethod").unwrap()).clone()
    }

    fn descriptor(&self) -> ::protobuf::reflect::EnumValueDescriptor {
        let index = match self {
            ThpPairingMethod::NoMethod => 0,
            ThpPairingMethod::CodeEntry => 1,
            ThpPairingMethod::QrCode => 2,
            ThpPairingMethod::NFC_Unidirectional => 3,
        };
        Self::enum_descriptor().value_by_index(index)
    }
}

// Note, `Default` is implemented although default value is not 0
impl ::std::default::Default for ThpPairingMethod {
    fn default() -> Self {
        ThpPairingMethod::NoMethod
    }
}

impl ThpPairingMethod {
    fn generated_enum_descriptor_data() -> ::protobuf::reflect::GeneratedEnumDescriptorData {
        ::protobuf::reflect::GeneratedEnumDescriptorData::new::<ThpPairingMethod>("ThpPairingMethod")
    }
}

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\x12messages-thp.proto\x12\x16hw.trezor.messages.thp\x1a\roptions.prot\
    o\"\x88\x02\n\x13ThpDeviceProperties\x12%\n\x0einternal_model\x18\x01\
    \x20\x01(\tR\rinternalModel\x12#\n\rmodel_variant\x18\x02\x20\x01(\rR\
    \x0cmodelVariant\x12'\n\x0fbootloader_mode\x18\x03\x20\x01(\x08R\x0eboot\
    loaderMode\x12)\n\x10protocol_version\x18\x04\x20\x01(\rR\x0fprotocolVer\
    sion\x12Q\n\x0fpairing_methods\x18\x05\x20\x03(\x0e2(.hw.trezor.messages\
    .thp.ThpPairingMethodR\x0epairingMethods\"\xb2\x01\n%ThpHandshakeComplet\
    ionReqNoisePayload\x126\n\x17host_pairing_credential\x18\x01\x20\x01(\
    \x0cR\x15hostPairingCredential\x12Q\n\x0fpairing_methods\x18\x02\x20\x03\
    (\x0e2(.hw.trezor.messages.thp.ThpPairingMethodR\x0epairingMethods\"y\n\
    \x13ThpCreateNewSession\x12\x1e\n\npassphrase\x18\x01\x20\x01(\tR\npassp\
    hrase\x12\x1b\n\ton_device\x18\x02\x20\x01(\x08R\x08onDevice\x12%\n\x0ed\
    erive_cardano\x18\x03\x20\x01(\x08R\rderiveCardano\"5\n\rThpNewSession\
    \x12$\n\x0enew_session_id\x18\x01\x20\x01(\rR\x0cnewSessionId\"5\n\x16Th\
    pStartPairingRequest\x12\x1b\n\thost_name\x18\x01\x20\x01(\tR\x08hostNam\
    e\"\x20\n\x1eThpPairingPreparationsFinished\"8\n\x16ThpCodeEntryCommitme\
    nt\x12\x1e\n\ncommitment\x18\x01\x20\x01(\x0cR\ncommitment\"5\n\x15ThpCo\
    deEntryChallenge\x12\x1c\n\tchallenge\x18\x01\x20\x01(\x0cR\tchallenge\"\
    J\n\x15ThpCodeEntryCpaceHost\x121\n\x15cpace_host_public_key\x18\x01\x20\
    \x01(\x0cR\x12cpaceHostPublicKey\"P\n\x17ThpCodeEntryCpaceTrezor\x125\n\
    \x17cpace_trezor_public_key\x18\x01\x20\x01(\x0cR\x14cpaceTrezorPublicKe\
    y\"#\n\x0fThpCodeEntryTag\x12\x10\n\x03tag\x18\x02\x20\x01(\x0cR\x03tag\
    \",\n\x12ThpCodeEntrySecret\x12\x16\n\x06secret\x18\x01\x20\x01(\x0cR\
    \x06secret\"\x20\n\x0cThpQrCodeTag\x12\x10\n\x03tag\x18\x01\x20\x01(\x0c\
    R\x03tag\")\n\x0fThpQrCodeSecret\x12\x16\n\x06secret\x18\x01\x20\x01(\
    \x0cR\x06secret\"+\n\x17ThpNfcUnidirectionalTag\x12\x10\n\x03tag\x18\x01\
    \x20\x01(\x0cR\x03tag\"4\n\x1aThpNfcUnidirectionalSecret\x12\x16\n\x06se\
    cret\x18\x01\x20\x01(\x0cR\x06secret\"D\n\x14ThpCredentialRequest\x12,\n\
    \x12host_static_pubkey\x18\x01\x20\x01(\x0cR\x10hostStaticPubkey\"i\n\
    \x15ThpCredentialResponse\x120\n\x14trezor_static_pubkey\x18\x01\x20\x01\
    (\x0cR\x12trezorStaticPubkey\x12\x1e\n\ncredential\x18\x02\x20\x01(\x0cR\
    \ncredential\"\x0f\n\rThpEndRequest\"\x10\n\x0eThpEndResponse\":\n\x15Th\
    pCredentialMetadata\x12\x1b\n\thost_name\x18\x01\x20\x01(\tR\x08hostName\
    :\x04\x98\xb2\x19\x01\"\x82\x01\n\x14ThpPairingCredential\x12R\n\rcred_m\
    etadata\x18\x01\x20\x01(\x0b2-.hw.trezor.messages.thp.ThpCredentialMetad\
    ataR\x0ccredMetadata\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac:\x04\
    \x98\xb2\x19\x01\"\xa8\x01\n\x1eThpAuthenticatedCredentialData\x12,\n\
    \x12host_static_pubkey\x18\x01\x20\x01(\x0cR\x10hostStaticPubkey\x12R\n\
    \rcred_metadata\x18\x02\x20\x01(\x0b2-.hw.trezor.messages.thp.ThpCredent\
    ialMetadataR\x0ccredMetadata:\x04\x98\xb2\x19\x01*\xbe\x07\n\x0eThpMessa\
    geType\x121\n\"ThpMessageType_ThpCreateNewSession\x10\xe8\x07\x1a\x08\
    \x80\xa6\x1d\x01\xc8\xb5\x18\x01\x12+\n\x1cThpMessageType_ThpNewSession\
    \x10\xe9\x07\x1a\x08\x80\xa6\x1d\x01\xd0\xb5\x18\x01\x124\n%ThpMessageTy\
    pe_ThpStartPairingRequest\x10\xf0\x07\x1a\x08\x80\xa6\x1d\x01\xd8\xb5\
    \x18\x01\x12<\n-ThpMessageType_ThpPairingPreparationsFinished\x10\xf1\
    \x07\x1a\x08\x80\xa6\x1d\x01\xe0\xb5\x18\x01\x122\n#ThpMessageType_ThpCr\
    edentialRequest\x10\xf2\x07\x1a\x08\x80\xa6\x1d\x01\xd8\xb5\x18\x01\x123\
    \n$ThpMessageType_ThpCredentialResponse\x10\xf3\x07\x1a\x08\x80\xa6\x1d\
    \x01\xe0\xb5\x18\x01\x12+\n\x1cThpMessageType_ThpEndRequest\x10\xf4\x07\
    \x1a\x08\x80\xa6\x1d\x01\xd8\xb5\x18\x01\x12,\n\x1dThpMessageType_ThpEnd\
    Response\x10\xf5\x07\x1a\x08\x80\xa6\x1d\x01\xe0\xb5\x18\x01\x124\n%ThpM\
    essageType_ThpCodeEntryCommitment\x10\xf8\x07\x1a\x08\x80\xa6\x1d\x01\
    \xe0\xb5\x18\x01\x123\n$ThpMessageType_ThpCodeEntryChallenge\x10\xf9\x07\
    \x1a\x08\x80\xa6\x1d\x01\xd8\xb5\x18\x01\x123\n$ThpMessageType_ThpCodeEn\
    tryCpaceHost\x10\xfa\x07\x1a\x08\x80\xa6\x1d\x01\xd8\xb5\x18\x01\x125\n&\
    ThpMessageType_ThpCodeEntryCpaceTrezor\x10\xfb\x07\x1a\x08\x80\xa6\x1d\
    \x01\xe0\xb5\x18\x01\x12-\n\x1eThpMessageType_ThpCodeEntryTag\x10\xfc\
    \x07\x1a\x08\x80\xa6\x1d\x01\xd8\xb5\x18\x01\x120\n!ThpMessageType_ThpCo\
    deEntrySecret\x10\xfd\x07\x1a\x08\x80\xa6\x1d\x01\xe0\xb5\x18\x01\x12*\n\
    \x1bThpMessageType_ThpQrCodeTag\x10\x80\x08\x1a\x08\x80\xa6\x1d\x01\xd8\
    \xb5\x18\x01\x12-\n\x1eThpMessageType_ThpQrCodeSecret\x10\x81\x08\x1a\
    \x08\x80\xa6\x1d\x01\xe0\xb5\x18\x01\x125\n&ThpMessageType_ThpNfcUnidire\
    ctionalTag\x10\x88\x08\x1a\x08\x80\xa6\x1d\x01\xd8\xb5\x18\x01\x128\n)Th\
    pMessageType_ThpNfcUnidirectionalSecret\x10\x89\x08\x1a\x08\x80\xa6\x1d\
    \x01\xd8\xb5\x18\x01\"\x05\x08\0\x10\xe7\x07\"\t\x08\xcc\x08\x10\xff\xff\
    \xff\xff\x07*S\n\x10ThpPairingMethod\x12\x0c\n\x08NoMethod\x10\x01\x12\r\
    \n\tCodeEntry\x10\x02\x12\n\n\x06QrCode\x10\x03\x12\x16\n\x12NFC_Unidire\
    ctional\x10\x04B;\n#com.satoshilabs.trezor.lib.protobufB\x10TrezorMessag\
    eThp\x80\xa6\x1d\x01\
";

/// `FileDescriptorProto` object which was a source for this generated file
fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto {
    static file_descriptor_proto_lazy: ::protobuf::rt::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::Lazy::new();
    file_descriptor_proto_lazy.get(|| {
        ::protobuf::Message::parse_from_bytes(file_descriptor_proto_data).unwrap()
    })
}

/// `FileDescriptor` object which allows dynamic access to files
pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
    static generated_file_descriptor_lazy: ::protobuf::rt::Lazy<::protobuf::reflect::GeneratedFileDescriptor> = ::protobuf::rt::Lazy::new();
    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(1);
            deps.push(super::options::file_descriptor().clone());
            let mut messages = ::std::vec::Vec::with_capacity(23);
            messages.push(ThpDeviceProperties::generated_message_descriptor_data());
            messages.push(ThpHandshakeCompletionReqNoisePayload::generated_message_descriptor_data());
            messages.push(ThpCreateNewSession::generated_message_descriptor_data());
            messages.push(ThpNewSession::generated_message_descriptor_data());
            messages.push(ThpStartPairingRequest::generated_message_descriptor_data());
            messages.push(ThpPairingPreparationsFinished::generated_message_descriptor_data());
            messages.push(ThpCodeEntryCommitment::generated_message_descriptor_data());
            messages.push(ThpCodeEntryChallenge::generated_message_descriptor_data());
            messages.push(ThpCodeEntryCpaceHost::generated_message_descriptor_data());
            messages.push(ThpCodeEntryCpaceTrezor::generated_message_descriptor_data());
            messages.push(ThpCodeEntryTag::generated_message_descriptor_data());
            messages.push(ThpCodeEntrySecret::generated_message_descriptor_data());
            messages.push(ThpQrCodeTag::generated_message_descriptor_data());
            messages.push(ThpQrCodeSecret::generated_message_descriptor_data());
            messages.push(ThpNfcUnidirectionalTag::generated_message_descriptor_data());
            messages.push(ThpNfcUnidirectionalSecret::generated_message_descriptor_data());
            messages.push(ThpCredentialRequest::generated_message_descriptor_data());
            messages.push(ThpCredentialResponse::generated_message_descriptor_data());
            messages.push(ThpEndRequest::generated_message_descriptor_data());
            messages.push(ThpEndResponse::generated_message_descriptor_data());
            messages.push(ThpCredentialMetadata::generated_message_descriptor_data());
            messages.push(ThpPairingCredential::generated_message_descriptor_data());
            messages.push(ThpAuthenticatedCredentialData::generated_message_descriptor_data());
            let mut enums = ::std::vec::Vec::with_capacity(2);
            enums.push(ThpMessageType::generated_enum_descriptor_data());
            enums.push(ThpPairingMethod::generated_enum_descriptor_data());
            ::protobuf::reflect::GeneratedFileDescriptor::new_generated(
                file_descriptor_proto(),
                deps,
                messages,
                enums,
            )
        });
        ::protobuf::reflect::FileDescriptor::new_generated_2(generated_file_descriptor)
    })
}
