/* * EME Classes * (C) 1999-2007 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_PUBKEY_EME_ENCRYPTION_PAD_H__ #define BOTAN_PUBKEY_EME_ENCRYPTION_PAD_H__ #include #include namespace Botan { /** * Encoding Method for Encryption */ class BOTAN_DLL EME { public: virtual ~EME() = default; /** * Return the maximum input size in bytes we can support * @param keybits the size of the key in bits * @return upper bound of input in bytes */ virtual size_t maximum_input_size(size_t keybits) const = 0; /** * Encode an input * @param in the plaintext * @param in_length length of plaintext in bytes * @param key_length length of the key in bits * @param rng a random number generator * @return encoded plaintext */ secure_vector encode(const byte in[], size_t in_length, size_t key_length, RandomNumberGenerator& rng) const; /** * Encode an input * @param in the plaintext * @param key_length length of the key in bits * @param rng a random number generator * @return encoded plaintext */ secure_vector encode(const secure_vector& in, size_t key_length, RandomNumberGenerator& rng) const; /** * Decode an input * @param valid_mask written to specifies if output is valid * @param in the encoded plaintext * @param in_len length of encoded plaintext in bytes * @return bytes of out[] written to along with * validity mask (0xFF if valid, else 0x00) */ virtual secure_vector unpad(byte& valid_mask, const byte in[], size_t in_len) const = 0; /** * Encode an input * @param in the plaintext * @param in_length length of plaintext in bytes * @param key_length length of the key in bits * @param rng a random number generator * @return encoded plaintext */ virtual secure_vector pad(const byte in[], size_t in_length, size_t key_length, RandomNumberGenerator& rng) const = 0; }; /** * Factory method for EME (message-encoding methods for encryption) objects * @param algo_spec the name of the EME to create * @return pointer to newly allocated object of that type */ BOTAN_DLL EME* get_eme(const std::string& algo_spec); } #endif