12#include <botan/cipher_mode.h>
13#include <botan/ec_apoint.h>
14#include <botan/ec_group.h>
16#include <botan/pubkey.h>
17#include <botan/secmem.h>
18#include <botan/symkey.h>
24#if defined(BOTAN_HAS_LEGACY_EC_POINT)
25 #include <botan/ec_point.h>
52 return static_cast<ECIES_Flags>(
static_cast<uint32_t
>(a) |
static_cast<uint32_t
>(
b));
56 return static_cast<ECIES_Flags>(
static_cast<uint32_t
>(a) &
static_cast<uint32_t
>(
b));
100 const std::string&
kdf_spec()
const {
return m_kdf_spec; }
104 const std::string m_kdf_spec;
105 const size_t m_length;
122 std::string_view dem_algo_spec,
124 std::string_view mac_spec,
139 std::string_view dem_algo_spec,
141 std::string_view mac_spec,
151 std::unique_ptr<MessageAuthenticationCode>
create_mac()
const;
163 const std::string m_dem_spec;
164 const size_t m_dem_keylen;
165 const std::string m_mac_spec;
166 const size_t m_mac_keylen;
189#if defined(BOTAN_HAS_LEGACY_EC_POINT)
196 const EC_Point& other_public_key_point)
const;
233#if defined(BOTAN_HAS_LEGACY_EC_POINT)
247 void set_label(std::string_view label) { m_label.assign(label.begin(), label.end()); }
250 std::vector<uint8_t> enc(
const uint8_t data[],
size_t length,
RandomNumberGenerator&)
const override;
252 size_t maximum_input_size()
const override;
254 size_t ciphertext_length(
size_t ptext_len)
const override;
258 std::unique_ptr<MessageAuthenticationCode> m_mac;
259 std::unique_ptr<Cipher_Mode> m_cipher;
260 std::vector<uint8_t> m_eph_public_key_bin;
262 std::optional<EC_AffinePoint> m_other_point;
263 std::vector<uint8_t> m_label;
284 inline void set_label(std::string_view label) { m_label = std::vector<uint8_t>(label.begin(), label.end()); }
289 size_t plaintext_length(
size_t ctext_len)
const override;
293 std::unique_ptr<MessageAuthenticationCode> m_mac;
294 std::unique_ptr<Cipher_Mode> m_cipher;
296 std::vector<uint8_t> m_label;
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_DEPRECATED(msg)
void set_label(std::string_view label)
Set the label which is appended to the input for the message authentication code.
void set_initialization_vector(const InitializationVector &iv)
Set the initialization vector for the data encryption method.
ECIES_Decryptor(const PK_Key_Agreement_Key &private_key, const ECIES_System_Params &ecies_params, RandomNumberGenerator &rng)
void set_other_key(const EC_AffinePoint &pt)
Set the public key of the other party.
ECIES_Encryptor(const PK_Key_Agreement_Key &private_key, const ECIES_System_Params &ecies_params, RandomNumberGenerator &rng)
void set_initialization_vector(const InitializationVector &iv)
Set the initialization vector for the data encryption method.
void set_label(std::string_view label)
Set the label which is appended to the input for the message authentication code.
ECIES_KA_Operation(const PK_Key_Agreement_Key &private_key, const ECIES_KA_Params &ecies_params, bool for_encryption, RandomNumberGenerator &rng)
SymmetricKey derive_secret(std::span< const uint8_t > eph_public_key_bin, const EC_AffinePoint &other_public_key_point) const
ECIES_KA_Params(const ECIES_KA_Params &)=default
ECIES_KA_Params(const EC_Group &domain, std::string_view kdf_spec, size_t length, EC_Point_Format compression_type, ECIES_Flags flags)
size_t secret_length() const
bool old_cofactor_mode() const
EC_Point_Format compression_type() const
bool cofactor_mode() const
virtual ~ECIES_KA_Params()=default
bool single_hash_mode() const
const std::string & kdf_spec() const
const EC_Group & domain() const
ECIES_KA_Params & operator=(const ECIES_KA_Params &)=delete
ECIES_System_Params(const ECIES_System_Params &)=default
~ECIES_System_Params() override=default
size_t dem_keylen() const
returns the length of the key used by the data encryption method
ECIES_System_Params(const EC_Group &domain, std::string_view kdf_spec, std::string_view dem_algo_spec, size_t dem_key_len, std::string_view mac_spec, size_t mac_key_len)
size_t mac_keylen() const
returns the length of the key used by the message authentication code
std::unique_ptr< Cipher_Mode > create_cipher(Cipher_Dir direction) const
creates an instance of the data encryption method
std::unique_ptr< MessageAuthenticationCode > create_mac() const
creates an instance of the message authentication code
ECIES_System_Params & operator=(const ECIES_System_Params &)=delete
ASN1_Type operator|(ASN1_Type x, ASN1_Type y)
OctetString InitializationVector
@ CofactorMode
(decryption only) if set: use cofactor multiplication during (ecdh) key agreement
@ OldCofactorMode
if set: use ecdhc instead of ecdh
@ CheckMode
(decryption only) if set: test if the (ephemeral) public key is on the curve
@ SingleHashMode
if set: prefix the input of the (ecdh) key agreement with the encoded (ephemeral) public key
std::vector< T, secure_allocator< T > > secure_vector
ECIES_Flags operator&(ECIES_Flags a, ECIES_Flags b)