Botan 3.7.1
Crypto and TLS for C&
Botan::Asymmetric_Key Class Referenceabstract

#include <pk_keys.h>

Inheritance diagram for Botan::Asymmetric_Key:
Botan::Public_Key Botan::Classic_McEliece_PublicKey Botan::DH_PublicKey Botan::DSA_PublicKey Botan::Dilithium_PublicKey Botan::EC_PublicKey Botan::Ed25519_PublicKey Botan::Ed448_PublicKey Botan::ElGamal_PublicKey Botan::FrodoKEM_PublicKey Botan::HSS_LMS_PublicKey Botan::Kyber_PublicKey Botan::McEliece_PublicKey Botan::Private_Key Botan::RSA_PublicKey Botan::SphincsPlus_PublicKey Botan::TLS::Hybrid_KEM_PublicKey Botan::TLS::KEX_to_KEM_Adapter_PublicKey Botan::TPM2::PublicKey Botan::X25519_PublicKey Botan::X448_PublicKey Botan::XMSS_PublicKey

Public Member Functions

virtual Signature_Format _default_x509_signature_format () const
 
virtual std::optional< size_t > _signature_element_size_for_DER_encoding () const
 
virtual std::string algo_name () const =0
 
virtual bool check_key (RandomNumberGenerator &rng, bool strong) const =0
 
virtual size_t estimated_strength () const =0
 
virtual std::unique_ptr< Private_Keygenerate_another (RandomNumberGenerator &rng) const =0
 
virtual const BigIntget_int_field (std::string_view field) const
 
virtual OID object_identifier () const
 
virtual bool supports_operation (PublicKeyOperation op) const =0
 
virtual ~Asymmetric_Key ()=default
 

Detailed Description

An interface for objects that are keys in public key algorithms

This is derived for both public and private keys

Definition at line 59 of file pk_keys.h.

Constructor & Destructor Documentation

◆ ~Asymmetric_Key()

virtual Botan::Asymmetric_Key::~Asymmetric_Key ( )
virtualdefault

Member Function Documentation

◆ _default_x509_signature_format()

Signature_Format Botan::Asymmetric_Key::_default_x509_signature_format ( ) const
virtual

◆ _signature_element_size_for_DER_encoding()

virtual std::optional< size_t > Botan::Asymmetric_Key::_signature_element_size_for_DER_encoding ( ) const
inlinevirtual

Certain signatures schemes such as ECDSA have more than one element, and certain unfortunate protocols decided the thing to do was not concatenate them as normally done, but instead DER encode each of the elements as independent values.

If this returns a value x then the signature is checked to be exactly 2*x bytes and split in half for DER encoding.

Reimplemented in Botan::DSA_PublicKey, Botan::ECDSA_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, Botan::GOST_3410_PublicKey, and Botan::SM2_PublicKey.

Definition at line 136 of file pk_keys.h.

136{ return {}; }

Referenced by _default_x509_signature_format(), Botan::PK_Signer::PK_Signer(), Botan::PK_Verifier::PK_Verifier(), and Botan::PK_Verifier::PK_Verifier().

◆ algo_name()

virtual std::string Botan::Asymmetric_Key::algo_name ( ) const
pure virtual

Get the name of the underlying public key scheme.

Returns
name of the public key scheme

Implemented in Botan::Classic_McEliece_PublicKey, Botan::DH_PublicKey, Botan::Dilithium_PublicKey, Botan::DSA_PublicKey, Botan::ECDH_PublicKey, Botan::ECDSA_PublicKey, Botan::ECGDSA_PublicKey, Botan::ECKCDSA_PublicKey, Botan::Ed25519_PublicKey, Botan::Ed448_PublicKey, Botan::ElGamal_PublicKey, Botan::FrodoKEM_PublicKey, Botan::GOST_3410_PublicKey, Botan::HSS_LMS_PublicKey, Botan::Kyber_PublicKey, Botan::McEliece_PublicKey, Botan::RSA_PublicKey, Botan::SM2_PublicKey, Botan::SphincsPlus_PublicKey, Botan::TLS::Hybrid_KEM_PublicKey, Botan::TLS::KEX_to_KEM_Adapter_PublicKey, Botan::TPM2::EC_PrivateKey, Botan::TPM2::EC_PublicKey, Botan::TPM_PrivateKey, Botan::X25519_PublicKey, Botan::X448_PublicKey, and Botan::XMSS_PublicKey.

Referenced by Botan::PKCS8::BER_encode(), botan_pubkey_sm2_compute_za(), Botan::TLS::Policy::check_peer_key_acceptable(), Botan::TLS::Handshake_State::choose_sig_format(), Botan::X509_Object::choose_sig_format(), Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), Botan::TLS::Client_Key_Exchange::Client_Key_Exchange(), Botan::Private_Key::create_decryption_op(), Botan::Public_Key::create_encryption_op(), Botan::Private_Key::create_kem_decryption_op(), Botan::Public_Key::create_kem_encryption_op(), Botan::Private_Key::create_key_agreement_op(), Botan::Private_Key::create_signature_op(), Botan::Public_Key::create_verification_op(), Botan::Public_Key::create_x509_verification_op(), get_int_field(), object_identifier(), Botan::TLS::Handshake_State::parse_sig_format(), Botan::PK_Decryptor_EME::PK_Decryptor_EME(), Botan::PK_Encryptor_EME::PK_Encryptor_EME(), Botan::PK_KEM_Decryptor::PK_KEM_Decryptor(), Botan::PK_KEM_Encryptor::PK_KEM_Encryptor(), Botan::PK_Key_Agreement::PK_Key_Agreement(), Botan::PK_Signer::PK_Signer(), Botan::PK_Verifier::PK_Verifier(), Botan::PK_Verifier::PK_Verifier(), and Botan::Private_Key::raw_private_key_bits().

◆ check_key()

◆ estimated_strength()

virtual size_t Botan::Asymmetric_Key::estimated_strength ( ) const
pure virtual

Return the estimated strength of the underlying key against the best currently known attack. Note that this ignores anything but pure attacks against the key itself and do not take into account padding schemes, usage mistakes, etc which might reduce the strength. However it does suffice to provide an upper bound.

Returns
estimated strength in bits

Implemented in Botan::Classic_McEliece_PublicKey, Botan::DH_PublicKey, Botan::Dilithium_PublicKey, Botan::DSA_PublicKey, Botan::EC_PublicKey, Botan::Ed25519_PublicKey, Botan::Ed448_PublicKey, Botan::ElGamal_PublicKey, Botan::FrodoKEM_PublicKey, Botan::HSS_LMS_PublicKey, Botan::Kyber_PublicKey, Botan::McEliece_PublicKey, Botan::RSA_PublicKey, Botan::SphincsPlus_PublicKey, Botan::TLS::Hybrid_KEM_PublicKey, Botan::TLS::KEX_to_KEM_Adapter_PublicKey, Botan::TPM_PrivateKey, Botan::X25519_PublicKey, Botan::X448_PublicKey, and Botan::XMSS_PublicKey.

◆ generate_another()

◆ get_int_field()

const BigInt & Botan::Asymmetric_Key::get_int_field ( std::string_view field) const
virtual

Access an algorithm specific field

If the field is not known for this algorithm, an Invalid_Argument is thrown. The interpretation of the result requires knowledge of which algorithm is involved. For instance for RSA "p" represents one of the secret primes, while for DSA "p" is the public prime.

Some algorithms may not implement this method at all.

This is primarily used to implement the FFI botan_pubkey_get_field and botan_privkey_get_field functions.

TODO(Botan4) Change this to return by value

Reimplemented in Botan::DH_PrivateKey, Botan::DH_PublicKey, Botan::DSA_PrivateKey, Botan::DSA_PublicKey, Botan::EC_PrivateKey, Botan::EC_PublicKey, Botan::ElGamal_PrivateKey, Botan::ElGamal_PublicKey, Botan::RSA_PrivateKey, and Botan::RSA_PublicKey.

Definition at line 18 of file pk_keys.cpp.

18 {
19 throw Unknown_PK_Field_Name(algo_name(), field);
20}
virtual std::string algo_name() const =0

References algo_name().

Referenced by Botan::EC_PublicKey::get_int_field(), and Botan::RSA_PublicKey::get_int_field().

◆ object_identifier()

◆ supports_operation()


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