|
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);
}
1.7.6.1