Botan
1.11.15
|
#include <mce_kem.h>
Public Member Functions | |
std::pair< secure_vector< byte > , secure_vector< byte > > | encrypt (RandomNumberGenerator &rng) |
McEliece_KEM_Encryptor (const McEliece_PublicKey &public_key) |
Botan::McEliece_KEM_Encryptor::McEliece_KEM_Encryptor | ( | const McEliece_PublicKey & | public_key | ) |
Definition at line 14 of file mce_kem.cpp.
: m_raw_pub_op(public_key, public_key.get_code_length()) { }
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); }