Botan  1.11.15
Public Member Functions
Botan::McEliece_KEM_Encryptor Class Reference

#include <mce_kem.h>

List of all members.

Public Member Functions

std::pair< secure_vector< byte >
, secure_vector< byte > > 
encrypt (RandomNumberGenerator &rng)
 McEliece_KEM_Encryptor (const McEliece_PublicKey &public_key)

Detailed Description

Definition at line 17 of file mce_kem.h.


Constructor & Destructor Documentation

Definition at line 14 of file mce_kem.cpp.

                                                                                   :
   m_raw_pub_op(public_key, public_key.get_code_length())
   {
   }

Member Function Documentation

std::pair< secure_vector< byte >, secure_vector< byte > > Botan::McEliece_KEM_Encryptor::encrypt ( RandomNumberGenerator rng)

returns the pair (mceliece ciphertext, symmetric key)

Definition at line 20 of file mce_kem.cpp.

References Botan::create_random_error_positions(), Botan::McEliece_Public_Operation::encrypt(), Botan::Buffered_Computation::final(), Botan::McEliece_PublicKey::get_code_length(), Botan::mceliece_message_parts::get_concat(), Botan::McEliece_Public_Operation::get_key(), Botan::McEliece_PublicKey::get_message_word_bit_length(), Botan::McEliece_PublicKey::get_t(), Botan::RandomNumberGenerator::randomize(), and Botan::Buffered_Computation::update().

Referenced by Botan::mceies_encrypt().

   {
   const McEliece_PublicKey& key = m_raw_pub_op.get_key();
   secure_vector<Botan::byte> plaintext((key.get_message_word_bit_length()+7)/8);
   rng.randomize(&plaintext[0], plaintext.size() );

   // unset unused bits in the last plaintext byte
   u32bit used = key.get_message_word_bit_length() % 8;
   if(used)
      {
      byte mask = (1 << used) - 1;
      plaintext[plaintext.size() - 1] &= mask;
      }

   secure_vector<gf2m> err_pos = create_random_error_positions(key.get_code_length(), key.get_t(), rng);

   mceliece_message_parts parts(err_pos, plaintext, key.get_code_length());
   secure_vector<Botan::byte> message_and_error_input = parts.get_concat();

   SHA_512 hash;
   hash.update(message_and_error_input);
   secure_vector<byte> sym_key = hash.final();
   secure_vector<byte> ciphertext = m_raw_pub_op.encrypt(&message_and_error_input[0],
                                                         message_and_error_input.size(), rng);

   return std::make_pair(ciphertext, sym_key);
   }

The documentation for this class was generated from the following files: