fhe 0.1.0-beta.4

Fully Homomorphic Encryption in Rust
Documentation
// This file is generated by rust-protobuf 3.2.0. Do not edit
// .proto file is parsed by protoc --rust-out=...
// @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 `bfv.proto`

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.Ciphertext)
pub struct Ciphertext {
    // message fields
    // @@protoc_insertion_point(field:fhers.Ciphertext.c)
    pub c: ::std::vec::Vec<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:fhers.Ciphertext.seed)
    pub seed: ::std::vec::Vec<u8>,
    // @@protoc_insertion_point(field:fhers.Ciphertext.level)
    pub level: u32,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.Ciphertext.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    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_vec_simpler_accessor::<_, _>(
            "c",
            |m: &Ciphertext| { &m.c },
            |m: &mut Ciphertext| { &mut m.c },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "seed",
            |m: &Ciphertext| { &m.seed },
            |m: &mut Ciphertext| { &mut m.seed },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "level",
            |m: &Ciphertext| { &m.level },
            |m: &mut Ciphertext| { &mut m.level },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Ciphertext>(
            "Ciphertext",
            fields,
            oneofs,
        )
    }
}

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

    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.c.push(is.read_bytes()?);
                },
                18 => {
                    self.seed = is.read_bytes()?;
                },
                24 => {
                    self.level = 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;
        for value in &self.c {
            my_size += ::protobuf::rt::bytes_size(1, &value);
        };
        if !self.seed.is_empty() {
            my_size += ::protobuf::rt::bytes_size(2, &self.seed);
        }
        if self.level != 0 {
            my_size += ::protobuf::rt::uint32_size(3, self.level);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        for v in &self.c {
            os.write_bytes(1, &v)?;
        };
        if !self.seed.is_empty() {
            os.write_bytes(2, &self.seed)?;
        }
        if self.level != 0 {
            os.write_uint32(3, self.level)?;
        }
        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() -> Ciphertext {
        Ciphertext::new()
    }

    fn clear(&mut self) {
        self.c.clear();
        self.seed.clear();
        self.level = 0;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static Ciphertext {
        static instance: Ciphertext = Ciphertext {
            c: ::std::vec::Vec::new(),
            seed: ::std::vec::Vec::new(),
            level: 0,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.RGSWCiphertext)
pub struct RGSWCiphertext {
    // message fields
    // @@protoc_insertion_point(field:fhers.RGSWCiphertext.ksk0)
    pub ksk0: ::protobuf::MessageField<KeySwitchingKey>,
    // @@protoc_insertion_point(field:fhers.RGSWCiphertext.ksk1)
    pub ksk1: ::protobuf::MessageField<KeySwitchingKey>,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.RGSWCiphertext.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    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::<_, KeySwitchingKey>(
            "ksk0",
            |m: &RGSWCiphertext| { &m.ksk0 },
            |m: &mut RGSWCiphertext| { &mut m.ksk0 },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_message_field_accessor::<_, KeySwitchingKey>(
            "ksk1",
            |m: &RGSWCiphertext| { &m.ksk1 },
            |m: &mut RGSWCiphertext| { &mut m.ksk1 },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<RGSWCiphertext>(
            "RGSWCiphertext",
            fields,
            oneofs,
        )
    }
}

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

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

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

    fn default_instance() -> &'static RGSWCiphertext {
        static instance: RGSWCiphertext = RGSWCiphertext {
            ksk0: ::protobuf::MessageField::none(),
            ksk1: ::protobuf::MessageField::none(),
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.KeySwitchingKey)
pub struct KeySwitchingKey {
    // message fields
    // @@protoc_insertion_point(field:fhers.KeySwitchingKey.c0)
    pub c0: ::std::vec::Vec<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:fhers.KeySwitchingKey.c1)
    pub c1: ::std::vec::Vec<::std::vec::Vec<u8>>,
    // @@protoc_insertion_point(field:fhers.KeySwitchingKey.seed)
    pub seed: ::std::vec::Vec<u8>,
    // @@protoc_insertion_point(field:fhers.KeySwitchingKey.ciphertext_level)
    pub ciphertext_level: u32,
    // @@protoc_insertion_point(field:fhers.KeySwitchingKey.ksk_level)
    pub ksk_level: u32,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.KeySwitchingKey.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    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_vec_simpler_accessor::<_, _>(
            "c0",
            |m: &KeySwitchingKey| { &m.c0 },
            |m: &mut KeySwitchingKey| { &mut m.c0 },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "c1",
            |m: &KeySwitchingKey| { &m.c1 },
            |m: &mut KeySwitchingKey| { &mut m.c1 },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "seed",
            |m: &KeySwitchingKey| { &m.seed },
            |m: &mut KeySwitchingKey| { &mut m.seed },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "ciphertext_level",
            |m: &KeySwitchingKey| { &m.ciphertext_level },
            |m: &mut KeySwitchingKey| { &mut m.ciphertext_level },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "ksk_level",
            |m: &KeySwitchingKey| { &m.ksk_level },
            |m: &mut KeySwitchingKey| { &mut m.ksk_level },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<KeySwitchingKey>(
            "KeySwitchingKey",
            fields,
            oneofs,
        )
    }
}

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

    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.c0.push(is.read_bytes()?);
                },
                18 => {
                    self.c1.push(is.read_bytes()?);
                },
                26 => {
                    self.seed = is.read_bytes()?;
                },
                32 => {
                    self.ciphertext_level = is.read_uint32()?;
                },
                40 => {
                    self.ksk_level = 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;
        for value in &self.c0 {
            my_size += ::protobuf::rt::bytes_size(1, &value);
        };
        for value in &self.c1 {
            my_size += ::protobuf::rt::bytes_size(2, &value);
        };
        if !self.seed.is_empty() {
            my_size += ::protobuf::rt::bytes_size(3, &self.seed);
        }
        if self.ciphertext_level != 0 {
            my_size += ::protobuf::rt::uint32_size(4, self.ciphertext_level);
        }
        if self.ksk_level != 0 {
            my_size += ::protobuf::rt::uint32_size(5, self.ksk_level);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        for v in &self.c0 {
            os.write_bytes(1, &v)?;
        };
        for v in &self.c1 {
            os.write_bytes(2, &v)?;
        };
        if !self.seed.is_empty() {
            os.write_bytes(3, &self.seed)?;
        }
        if self.ciphertext_level != 0 {
            os.write_uint32(4, self.ciphertext_level)?;
        }
        if self.ksk_level != 0 {
            os.write_uint32(5, self.ksk_level)?;
        }
        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() -> KeySwitchingKey {
        KeySwitchingKey::new()
    }

    fn clear(&mut self) {
        self.c0.clear();
        self.c1.clear();
        self.seed.clear();
        self.ciphertext_level = 0;
        self.ksk_level = 0;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static KeySwitchingKey {
        static instance: KeySwitchingKey = KeySwitchingKey {
            c0: ::std::vec::Vec::new(),
            c1: ::std::vec::Vec::new(),
            seed: ::std::vec::Vec::new(),
            ciphertext_level: 0,
            ksk_level: 0,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.RelinearizationKey)
pub struct RelinearizationKey {
    // message fields
    // @@protoc_insertion_point(field:fhers.RelinearizationKey.ksk)
    pub ksk: ::protobuf::MessageField<KeySwitchingKey>,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.RelinearizationKey.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

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

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

    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.ksk)?;
                },
                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.ksk.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.ksk.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(1, 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() -> RelinearizationKey {
        RelinearizationKey::new()
    }

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

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

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.GaloisKey)
pub struct GaloisKey {
    // message fields
    // @@protoc_insertion_point(field:fhers.GaloisKey.ksk)
    pub ksk: ::protobuf::MessageField<KeySwitchingKey>,
    // @@protoc_insertion_point(field:fhers.GaloisKey.exponent)
    pub exponent: u32,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.GaloisKey.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    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::<_, KeySwitchingKey>(
            "ksk",
            |m: &GaloisKey| { &m.ksk },
            |m: &mut GaloisKey| { &mut m.ksk },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "exponent",
            |m: &GaloisKey| { &m.exponent },
            |m: &mut GaloisKey| { &mut m.exponent },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<GaloisKey>(
            "GaloisKey",
            fields,
            oneofs,
        )
    }
}

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

    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.ksk)?;
                },
                16 => {
                    self.exponent = 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.ksk.as_ref() {
            let len = v.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
        }
        if self.exponent != 0 {
            my_size += ::protobuf::rt::uint32_size(2, self.exponent);
        }
        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.ksk.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(1, v, os)?;
        }
        if self.exponent != 0 {
            os.write_uint32(2, self.exponent)?;
        }
        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() -> GaloisKey {
        GaloisKey::new()
    }

    fn clear(&mut self) {
        self.ksk.clear();
        self.exponent = 0;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static GaloisKey {
        static instance: GaloisKey = GaloisKey {
            ksk: ::protobuf::MessageField::none(),
            exponent: 0,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.EvaluationKey)
pub struct EvaluationKey {
    // message fields
    // @@protoc_insertion_point(field:fhers.EvaluationKey.gk)
    pub gk: ::std::vec::Vec<GaloisKey>,
    // @@protoc_insertion_point(field:fhers.EvaluationKey.ciphertext_level)
    pub ciphertext_level: u32,
    // @@protoc_insertion_point(field:fhers.EvaluationKey.evaluation_key_level)
    pub evaluation_key_level: u32,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.EvaluationKey.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    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_vec_simpler_accessor::<_, _>(
            "gk",
            |m: &EvaluationKey| { &m.gk },
            |m: &mut EvaluationKey| { &mut m.gk },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "ciphertext_level",
            |m: &EvaluationKey| { &m.ciphertext_level },
            |m: &mut EvaluationKey| { &mut m.ciphertext_level },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "evaluation_key_level",
            |m: &EvaluationKey| { &m.evaluation_key_level },
            |m: &mut EvaluationKey| { &mut m.evaluation_key_level },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<EvaluationKey>(
            "EvaluationKey",
            fields,
            oneofs,
        )
    }
}

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

    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.gk.push(is.read_message()?);
                },
                24 => {
                    self.ciphertext_level = is.read_uint32()?;
                },
                32 => {
                    self.evaluation_key_level = 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;
        for value in &self.gk {
            let len = value.compute_size();
            my_size += 1 + ::protobuf::rt::compute_raw_varint64_size(len) + len;
        };
        if self.ciphertext_level != 0 {
            my_size += ::protobuf::rt::uint32_size(3, self.ciphertext_level);
        }
        if self.evaluation_key_level != 0 {
            my_size += ::protobuf::rt::uint32_size(4, self.evaluation_key_level);
        }
        my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
        self.special_fields.cached_size().set(my_size as u32);
        my_size
    }

    fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
        for v in &self.gk {
            ::protobuf::rt::write_message_field_with_cached_size(2, v, os)?;
        };
        if self.ciphertext_level != 0 {
            os.write_uint32(3, self.ciphertext_level)?;
        }
        if self.evaluation_key_level != 0 {
            os.write_uint32(4, self.evaluation_key_level)?;
        }
        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() -> EvaluationKey {
        EvaluationKey::new()
    }

    fn clear(&mut self) {
        self.gk.clear();
        self.ciphertext_level = 0;
        self.evaluation_key_level = 0;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static EvaluationKey {
        static instance: EvaluationKey = EvaluationKey {
            gk: ::std::vec::Vec::new(),
            ciphertext_level: 0,
            evaluation_key_level: 0,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.Parameters)
pub struct Parameters {
    // message fields
    // @@protoc_insertion_point(field:fhers.Parameters.degree)
    pub degree: u32,
    // @@protoc_insertion_point(field:fhers.Parameters.moduli)
    pub moduli: ::std::vec::Vec<u64>,
    // @@protoc_insertion_point(field:fhers.Parameters.plaintext)
    pub plaintext: u64,
    // @@protoc_insertion_point(field:fhers.Parameters.variance)
    pub variance: u32,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.Parameters.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

    fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
        let mut fields = ::std::vec::Vec::with_capacity(4);
        let mut oneofs = ::std::vec::Vec::with_capacity(0);
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "degree",
            |m: &Parameters| { &m.degree },
            |m: &mut Parameters| { &mut m.degree },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_vec_simpler_accessor::<_, _>(
            "moduli",
            |m: &Parameters| { &m.moduli },
            |m: &mut Parameters| { &mut m.moduli },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "plaintext",
            |m: &Parameters| { &m.plaintext },
            |m: &mut Parameters| { &mut m.plaintext },
        ));
        fields.push(::protobuf::reflect::rt::v2::make_simpler_field_accessor::<_, _>(
            "variance",
            |m: &Parameters| { &m.variance },
            |m: &mut Parameters| { &mut m.variance },
        ));
        ::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Parameters>(
            "Parameters",
            fields,
            oneofs,
        )
    }
}

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

    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.degree = is.read_uint32()?;
                },
                18 => {
                    is.read_repeated_packed_uint64_into(&mut self.moduli)?;
                },
                16 => {
                    self.moduli.push(is.read_uint64()?);
                },
                24 => {
                    self.plaintext = is.read_uint64()?;
                },
                32 => {
                    self.variance = 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 self.degree != 0 {
            my_size += ::protobuf::rt::uint32_size(1, self.degree);
        }
        for value in &self.moduli {
            my_size += ::protobuf::rt::uint64_size(2, *value);
        };
        if self.plaintext != 0 {
            my_size += ::protobuf::rt::uint64_size(3, self.plaintext);
        }
        if self.variance != 0 {
            my_size += ::protobuf::rt::uint32_size(4, self.variance);
        }
        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 self.degree != 0 {
            os.write_uint32(1, self.degree)?;
        }
        for v in &self.moduli {
            os.write_uint64(2, *v)?;
        };
        if self.plaintext != 0 {
            os.write_uint64(3, self.plaintext)?;
        }
        if self.variance != 0 {
            os.write_uint32(4, self.variance)?;
        }
        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() -> Parameters {
        Parameters::new()
    }

    fn clear(&mut self) {
        self.degree = 0;
        self.moduli.clear();
        self.plaintext = 0;
        self.variance = 0;
        self.special_fields.clear();
    }

    fn default_instance() -> &'static Parameters {
        static instance: Parameters = Parameters {
            degree: 0,
            moduli: ::std::vec::Vec::new(),
            plaintext: 0,
            variance: 0,
            special_fields: ::protobuf::SpecialFields::new(),
        };
        &instance
    }
}

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

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

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

#[derive(PartialEq,Clone,Default,Debug)]
// @@protoc_insertion_point(message:fhers.PublicKey)
pub struct PublicKey {
    // message fields
    // @@protoc_insertion_point(field:fhers.PublicKey.c)
    pub c: ::protobuf::MessageField<Ciphertext>,
    // special fields
    // @@protoc_insertion_point(special_field:fhers.PublicKey.special_fields)
    pub special_fields: ::protobuf::SpecialFields,
}

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

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

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

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

    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.c)?;
                },
                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.c.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.c.as_ref() {
            ::protobuf::rt::write_message_field_with_cached_size(1, 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() -> PublicKey {
        PublicKey::new()
    }

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

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

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

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

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

static file_descriptor_proto_data: &'static [u8] = b"\
    \n\tbfv.proto\x12\x05fhers\"D\n\nCiphertext\x12\x0c\n\x01c\x18\x01\x20\
    \x03(\x0cR\x01c\x12\x12\n\x04seed\x18\x02\x20\x01(\x0cR\x04seed\x12\x14\
    \n\x05level\x18\x03\x20\x01(\rR\x05level\"h\n\x0eRGSWCiphertext\x12*\n\
    \x04ksk0\x18\x01\x20\x01(\x0b2\x16.fhers.KeySwitchingKeyR\x04ksk0\x12*\n\
    \x04ksk1\x18\x02\x20\x01(\x0b2\x16.fhers.KeySwitchingKeyR\x04ksk1\"\x8d\
    \x01\n\x0fKeySwitchingKey\x12\x0e\n\x02c0\x18\x01\x20\x03(\x0cR\x02c0\
    \x12\x0e\n\x02c1\x18\x02\x20\x03(\x0cR\x02c1\x12\x12\n\x04seed\x18\x03\
    \x20\x01(\x0cR\x04seed\x12)\n\x10ciphertext_level\x18\x04\x20\x01(\rR\
    \x0fciphertextLevel\x12\x1b\n\tksk_level\x18\x05\x20\x01(\rR\x08kskLevel\
    \">\n\x12RelinearizationKey\x12(\n\x03ksk\x18\x01\x20\x01(\x0b2\x16.fher\
    s.KeySwitchingKeyR\x03ksk\"Q\n\tGaloisKey\x12(\n\x03ksk\x18\x01\x20\x01(\
    \x0b2\x16.fhers.KeySwitchingKeyR\x03ksk\x12\x1a\n\x08exponent\x18\x02\
    \x20\x01(\rR\x08exponent\"\x8e\x01\n\rEvaluationKey\x12\x20\n\x02gk\x18\
    \x02\x20\x03(\x0b2\x10.fhers.GaloisKeyR\x02gk\x12)\n\x10ciphertext_level\
    \x18\x03\x20\x01(\rR\x0fciphertextLevel\x120\n\x14evaluation_key_level\
    \x18\x04\x20\x01(\rR\x12evaluationKeyLevel\"v\n\nParameters\x12\x16\n\
    \x06degree\x18\x01\x20\x01(\rR\x06degree\x12\x16\n\x06moduli\x18\x02\x20\
    \x03(\x04R\x06moduli\x12\x1c\n\tplaintext\x18\x03\x20\x01(\x04R\tplainte\
    xt\x12\x1a\n\x08variance\x18\x04\x20\x01(\rR\x08variance\",\n\tPublicKey\
    \x12\x1f\n\x01c\x18\x01\x20\x01(\x0b2\x11.fhers.CiphertextR\x01cJ\xa5\
    \x0b\n\x06\x12\x04\0\0/\x01\n\x08\n\x01\x0c\x12\x03\0\0\x12\n\x08\n\x01\
    \x02\x12\x03\x02\0\x0e\n\n\n\x02\x04\0\x12\x04\x04\0\x08\x01\n\n\n\x03\
    \x04\0\x01\x12\x03\x04\x08\x12\n\x0b\n\x04\x04\0\x02\0\x12\x03\x05\x04\
    \x19\n\x0c\n\x05\x04\0\x02\0\x04\x12\x03\x05\x04\x0c\n\x0c\n\x05\x04\0\
    \x02\0\x05\x12\x03\x05\r\x12\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x05\x13\
    \x14\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\x05\x17\x18\n\x0b\n\x04\x04\0\
    \x02\x01\x12\x03\x06\x04\x13\n\x0c\n\x05\x04\0\x02\x01\x05\x12\x03\x06\
    \x04\t\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x06\n\x0e\n\x0c\n\x05\x04\0\
    \x02\x01\x03\x12\x03\x06\x11\x12\n\x0b\n\x04\x04\0\x02\x02\x12\x03\x07\
    \x04\x15\n\x0c\n\x05\x04\0\x02\x02\x05\x12\x03\x07\x04\n\n\x0c\n\x05\x04\
    \0\x02\x02\x01\x12\x03\x07\x0b\x10\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03\
    \x07\x13\x14\n\n\n\x02\x04\x01\x12\x04\n\0\r\x01\n\n\n\x03\x04\x01\x01\
    \x12\x03\n\x08\x16\n\x0b\n\x04\x04\x01\x02\0\x12\x03\x0b\x04\x1d\n\x0c\n\
    \x05\x04\x01\x02\0\x06\x12\x03\x0b\x04\x13\n\x0c\n\x05\x04\x01\x02\0\x01\
    \x12\x03\x0b\x14\x18\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x0b\x1b\x1c\n\
    \x0b\n\x04\x04\x01\x02\x01\x12\x03\x0c\x04\x1d\n\x0c\n\x05\x04\x01\x02\
    \x01\x06\x12\x03\x0c\x04\x13\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x0c\
    \x14\x18\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\x0c\x1b\x1c\n\n\n\x02\
    \x04\x02\x12\x04\x0f\0\x15\x01\n\n\n\x03\x04\x02\x01\x12\x03\x0f\x08\x17\
    \n\x0b\n\x04\x04\x02\x02\0\x12\x03\x10\x04\x1a\n\x0c\n\x05\x04\x02\x02\0\
    \x04\x12\x03\x10\x04\x0c\n\x0c\n\x05\x04\x02\x02\0\x05\x12\x03\x10\r\x12\
    \n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03\x10\x13\x15\n\x0c\n\x05\x04\x02\
    \x02\0\x03\x12\x03\x10\x18\x19\n\x0b\n\x04\x04\x02\x02\x01\x12\x03\x11\
    \x04\x1a\n\x0c\n\x05\x04\x02\x02\x01\x04\x12\x03\x11\x04\x0c\n\x0c\n\x05\
    \x04\x02\x02\x01\x05\x12\x03\x11\r\x12\n\x0c\n\x05\x04\x02\x02\x01\x01\
    \x12\x03\x11\x13\x15\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03\x11\x18\x19\
    \n\x0b\n\x04\x04\x02\x02\x02\x12\x03\x12\x04\x13\n\x0c\n\x05\x04\x02\x02\
    \x02\x05\x12\x03\x12\x04\t\n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03\x12\n\
    \x0e\n\x0c\n\x05\x04\x02\x02\x02\x03\x12\x03\x12\x11\x12\n\x0b\n\x04\x04\
    \x02\x02\x03\x12\x03\x13\x04\x20\n\x0c\n\x05\x04\x02\x02\x03\x05\x12\x03\
    \x13\x04\n\n\x0c\n\x05\x04\x02\x02\x03\x01\x12\x03\x13\x0b\x1b\n\x0c\n\
    \x05\x04\x02\x02\x03\x03\x12\x03\x13\x1e\x1f\n\x0b\n\x04\x04\x02\x02\x04\
    \x12\x03\x14\x04\x19\n\x0c\n\x05\x04\x02\x02\x04\x05\x12\x03\x14\x04\n\n\
    \x0c\n\x05\x04\x02\x02\x04\x01\x12\x03\x14\x0b\x14\n\x0c\n\x05\x04\x02\
    \x02\x04\x03\x12\x03\x14\x17\x18\n\n\n\x02\x04\x03\x12\x04\x17\0\x19\x01\
    \n\n\n\x03\x04\x03\x01\x12\x03\x17\x08\x1a\n\x0b\n\x04\x04\x03\x02\0\x12\
    \x03\x18\x04\x1c\n\x0c\n\x05\x04\x03\x02\0\x06\x12\x03\x18\x04\x13\n\x0c\
    \n\x05\x04\x03\x02\0\x01\x12\x03\x18\x14\x17\n\x0c\n\x05\x04\x03\x02\0\
    \x03\x12\x03\x18\x1a\x1b\n\n\n\x02\x04\x04\x12\x04\x1b\0\x1e\x01\n\n\n\
    \x03\x04\x04\x01\x12\x03\x1b\x08\x11\n\x0b\n\x04\x04\x04\x02\0\x12\x03\
    \x1c\x04\x1c\n\x0c\n\x05\x04\x04\x02\0\x06\x12\x03\x1c\x04\x13\n\x0c\n\
    \x05\x04\x04\x02\0\x01\x12\x03\x1c\x14\x17\n\x0c\n\x05\x04\x04\x02\0\x03\
    \x12\x03\x1c\x1a\x1b\n\x0b\n\x04\x04\x04\x02\x01\x12\x03\x1d\x04\x18\n\
    \x0c\n\x05\x04\x04\x02\x01\x05\x12\x03\x1d\x04\n\n\x0c\n\x05\x04\x04\x02\
    \x01\x01\x12\x03\x1d\x0b\x13\n\x0c\n\x05\x04\x04\x02\x01\x03\x12\x03\x1d\
    \x16\x17\n\n\n\x02\x04\x05\x12\x04\x20\0$\x01\n\n\n\x03\x04\x05\x01\x12\
    \x03\x20\x08\x15\n\x0b\n\x04\x04\x05\x02\0\x12\x03!\x04\x1e\n\x0c\n\x05\
    \x04\x05\x02\0\x04\x12\x03!\x04\x0c\n\x0c\n\x05\x04\x05\x02\0\x06\x12\
    \x03!\r\x16\n\x0c\n\x05\x04\x05\x02\0\x01\x12\x03!\x17\x19\n\x0c\n\x05\
    \x04\x05\x02\0\x03\x12\x03!\x1c\x1d\n\x0b\n\x04\x04\x05\x02\x01\x12\x03\
    \"\x04\x20\n\x0c\n\x05\x04\x05\x02\x01\x05\x12\x03\"\x04\n\n\x0c\n\x05\
    \x04\x05\x02\x01\x01\x12\x03\"\x0b\x1b\n\x0c\n\x05\x04\x05\x02\x01\x03\
    \x12\x03\"\x1e\x1f\n\x0b\n\x04\x04\x05\x02\x02\x12\x03#\x04$\n\x0c\n\x05\
    \x04\x05\x02\x02\x05\x12\x03#\x04\n\n\x0c\n\x05\x04\x05\x02\x02\x01\x12\
    \x03#\x0b\x1f\n\x0c\n\x05\x04\x05\x02\x02\x03\x12\x03#\"#\n\n\n\x02\x04\
    \x06\x12\x04&\0+\x01\n\n\n\x03\x04\x06\x01\x12\x03&\x08\x12\n\x0b\n\x04\
    \x04\x06\x02\0\x12\x03'\x04\x16\n\x0c\n\x05\x04\x06\x02\0\x05\x12\x03'\
    \x04\n\n\x0c\n\x05\x04\x06\x02\0\x01\x12\x03'\x0b\x11\n\x0c\n\x05\x04\
    \x06\x02\0\x03\x12\x03'\x14\x15\n\x0b\n\x04\x04\x06\x02\x01\x12\x03(\x04\
    \x1f\n\x0c\n\x05\x04\x06\x02\x01\x04\x12\x03(\x04\x0c\n\x0c\n\x05\x04\
    \x06\x02\x01\x05\x12\x03(\r\x13\n\x0c\n\x05\x04\x06\x02\x01\x01\x12\x03(\
    \x14\x1a\n\x0c\n\x05\x04\x06\x02\x01\x03\x12\x03(\x1d\x1e\n\x0b\n\x04\
    \x04\x06\x02\x02\x12\x03)\x04\x19\n\x0c\n\x05\x04\x06\x02\x02\x05\x12\
    \x03)\x04\n\n\x0c\n\x05\x04\x06\x02\x02\x01\x12\x03)\x0b\x14\n\x0c\n\x05\
    \x04\x06\x02\x02\x03\x12\x03)\x17\x18\n\x0b\n\x04\x04\x06\x02\x03\x12\
    \x03*\x04\x18\n\x0c\n\x05\x04\x06\x02\x03\x05\x12\x03*\x04\n\n\x0c\n\x05\
    \x04\x06\x02\x03\x01\x12\x03*\x0b\x13\n\x0c\n\x05\x04\x06\x02\x03\x03\
    \x12\x03*\x16\x17\n\n\n\x02\x04\x07\x12\x04-\0/\x01\n\n\n\x03\x04\x07\
    \x01\x12\x03-\x08\x11\n\x0b\n\x04\x04\x07\x02\0\x12\x03.\x04\x15\n\x0c\n\
    \x05\x04\x07\x02\0\x06\x12\x03.\x04\x0e\n\x0c\n\x05\x04\x07\x02\0\x01\
    \x12\x03.\x0f\x10\n\x0c\n\x05\x04\x07\x02\0\x03\x12\x03.\x13\x14b\x06pro\
    to3\
";

/// `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(0);
            let mut messages = ::std::vec::Vec::with_capacity(8);
            messages.push(Ciphertext::generated_message_descriptor_data());
            messages.push(RGSWCiphertext::generated_message_descriptor_data());
            messages.push(KeySwitchingKey::generated_message_descriptor_data());
            messages.push(RelinearizationKey::generated_message_descriptor_data());
            messages.push(GaloisKey::generated_message_descriptor_data());
            messages.push(EvaluationKey::generated_message_descriptor_data());
            messages.push(Parameters::generated_message_descriptor_data());
            messages.push(PublicKey::generated_message_descriptor_data());
            let mut enums = ::std::vec::Vec::with_capacity(0);
            ::protobuf::reflect::GeneratedFileDescriptor::new_generated(
                file_descriptor_proto(),
                deps,
                messages,
                enums,
            )
        });
        ::protobuf::reflect::FileDescriptor::new_generated_2(generated_file_descriptor)
    })
}