Botan 3.9.0
Crypto and TLS for C&
Botan::PKCS11::PublicKeyProperties Class Reference

Common attributes of all public key objects. More...

#include <p11_object.h>

Inheritance diagram for Botan::PKCS11::PublicKeyProperties:
Botan::PKCS11::KeyProperties Botan::PKCS11::StorageObjectProperties Botan::PKCS11::ObjectProperties Botan::PKCS11::AttributeContainer

Public Member Functions

template<typename TAlloc>
void add_binary (AttributeType attribute, const std::vector< uint8_t, TAlloc > &binary)
void add_binary (AttributeType attribute, const uint8_t *value, size_t length)
void add_bool (AttributeType attribute, bool value)
void add_class (ObjectClass object_class)
template<std::integral T>
void add_numeric (AttributeType attribute, T value)
void add_string (AttributeType attribute, std::string_view value)
const std::vector< Attribute > & attributes () const
size_t count () const
Attributedata () const
KeyType key_type () const
ObjectClass object_class () const
BOTAN_FUTURE_EXPLICIT PublicKeyProperties (KeyType key_type)
void set_allowed_mechanisms (const std::vector< MechanismType > &)
void set_copyable (bool value)
void set_derive (bool value)
void set_destroyable (bool value)
void set_encrypt (bool value)
void set_end_date (Date date)
void set_id (const std::vector< uint8_t > &id)
void set_label (std::string_view label)
void set_modifiable (bool value)
void set_private (bool value)
void set_public_key_info (const std::vector< uint8_t > &pubkey_info)
void set_start_date (Date date)
void set_subject (const std::vector< uint8_t > &subject)
void set_token (bool value)
void set_trusted (bool value)
void set_verify (bool value)
void set_verify_recover (bool value)
void set_wrap (bool value)
void set_wrap_template (const AttributeContainer &)

Protected Member Functions

void add_attribute (AttributeType attribute, const uint8_t *value, Ulong size)
 Add an attribute with the given value and size to the attribute collection m_attributes

Detailed Description

Common attributes of all public key objects.

Definition at line 295 of file p11_object.h.

Constructor & Destructor Documentation

◆ PublicKeyProperties()

Botan::PKCS11::PublicKeyProperties::PublicKeyProperties ( KeyType key_type)
Parameters
key_typetype of key

Definition at line 131 of file p11_object.cpp.

KeyProperties(ObjectClass object_class, KeyType key_type)

References Botan::PKCS11::KeyProperties::key_type(), Botan::PKCS11::KeyProperties::KeyProperties(), and Botan::PKCS11::PublicKey.

Member Function Documentation

◆ add_attribute()

void Botan::PKCS11::AttributeContainer::add_attribute ( AttributeType attribute,
const uint8_t * value,
Ulong size )
protectedinherited

Add an attribute with the given value and size to the attribute collection m_attributes

Definition at line 40 of file p11_object.cpp.

40 {
41 bool exists = false;
42 // check if the attribute has been added already
43 for(auto& existing_attribute : m_attributes) {
44 if(existing_attribute.type == static_cast<CK_ATTRIBUTE_TYPE>(attribute)) {
45 // remove old entries
46 m_strings.remove_if(
47 [&existing_attribute](std::string_view data) { return data.data() == existing_attribute.pValue; });
48
49 m_numerics.remove_if(
50 [&existing_attribute](const uint64_t& data) { return &data == existing_attribute.pValue; });
51
52 m_vectors.remove_if([&existing_attribute](const secure_vector<uint8_t>& data) {
53 return data.data() == existing_attribute.pValue;
54 });
55
56 existing_attribute.pValue = const_cast<uint8_t*>(value);
57 existing_attribute.ulValueLen = size;
58 exists = true;
59 break;
60 }
61 }
62
63 if(!exists) {
64 m_attributes.push_back(Attribute{static_cast<CK_ATTRIBUTE_TYPE>(attribute), const_cast<uint8_t*>(value), size});
65 }
66}
CK_ATTRIBUTE Attribute
Definition p11.h:834
std::vector< T, secure_allocator< T > > secure_vector
Definition secmem.h:69
CK_ULONG CK_ATTRIBUTE_TYPE
Definition pkcs11t.h:416

References data().

Referenced by add_binary(), add_bool(), add_class(), add_numeric(), and add_string().

◆ add_binary() [1/2]

template<typename TAlloc>
void Botan::PKCS11::AttributeContainer::add_binary ( AttributeType attribute,
const std::vector< uint8_t, TAlloc > & binary )
inlineinherited

Add a binary attribute (e.g. CKA_ID / AttributeType::Id).

Parameters
attributeattribute type
binarybinary attribute value to add

Definition at line 80 of file p11_object.h.

80 {
81 add_binary(attribute, binary.data(), binary.size());
82 }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)

References add_binary().

◆ add_binary() [2/2]

void Botan::PKCS11::AttributeContainer::add_binary ( AttributeType attribute,
const uint8_t * value,
size_t length )
inherited

Add a binary attribute (e.g. CKA_ID / AttributeType::Id).

Parameters
attributeattribute type
valuebinary attribute value to add
lengthsize of the binary attribute value in bytes

Definition at line 30 of file p11_object.cpp.

30 {
31 m_vectors.push_back(secure_vector<uint8_t>(value, value + length));
32 add_attribute(attribute, reinterpret_cast<const uint8_t*>(m_vectors.back().data()), static_cast<Ulong>(length));
33}
void add_attribute(AttributeType attribute, const uint8_t *value, Ulong size)
Add an attribute with the given value and size to the attribute collection m_attributes
CK_ULONG Ulong
Definition p11.h:825

References add_attribute().

Referenced by add_binary(), Botan::PKCS11::Object::search(), Botan::PKCS11::Object::search(), Botan::PKCS11::CertificateProperties::set_check_value(), Botan::PKCS11::SecretKeyProperties::set_check_value(), Botan::PKCS11::CertificateProperties::set_end_date(), Botan::PKCS11::KeyProperties::set_end_date(), Botan::PKCS11::KeyProperties::set_id(), Botan::PKCS11::DataObjectProperties::set_object_id(), Botan::PKCS11::CertificateProperties::set_public_key_info(), Botan::PKCS11::PrivateKeyProperties::set_public_key_info(), Botan::PKCS11::PublicKeyProperties::set_public_key_info(), Botan::PKCS11::CertificateProperties::set_start_date(), Botan::PKCS11::KeyProperties::set_start_date(), Botan::PKCS11::PrivateKeyProperties::set_subject(), Botan::PKCS11::PublicKeyProperties::set_subject(), and Botan::PKCS11::DataObjectProperties::set_value().

◆ add_bool()

void Botan::PKCS11::AttributeContainer::add_bool ( AttributeType attribute,
bool value )
inherited

Add a bool attribute (e.g. CKA_SENSITIVE / AttributeType::Sensitive).

Parameters
attributeattribute type
valueboolean value to add

Definition at line 35 of file p11_object.cpp.

35 {
36 m_numerics.push_back(value ? True : False);
37 add_attribute(attribute, reinterpret_cast<uint8_t*>(&m_numerics.back()), sizeof(Bbool));
38}
const Bbool True
Definition p11.h:845
const Bbool False
Definition p11.h:846
CK_BBOOL Bbool
Definition p11.h:823

References add_attribute(), Botan::PKCS11::False, and Botan::PKCS11::True.

Referenced by Botan::PKCS11::PrivateKeyProperties::set_always_authenticate(), Botan::PKCS11::SecretKeyProperties::set_always_authenticate(), Botan::PKCS11::StorageObjectProperties::set_copyable(), Botan::PKCS11::PrivateKeyProperties::set_decrypt(), Botan::PKCS11::SecretKeyProperties::set_decrypt(), Botan::PKCS11::KeyProperties::set_derive(), Botan::PKCS11::StorageObjectProperties::set_destroyable(), Botan::PKCS11::PublicKeyProperties::set_encrypt(), Botan::PKCS11::SecretKeyProperties::set_encrypt(), Botan::PKCS11::PrivateKeyProperties::set_extractable(), Botan::PKCS11::SecretKeyProperties::set_extractable(), Botan::PKCS11::StorageObjectProperties::set_modifiable(), Botan::PKCS11::StorageObjectProperties::set_private(), Botan::PKCS11::PrivateKeyProperties::set_sensitive(), Botan::PKCS11::SecretKeyProperties::set_sensitive(), Botan::PKCS11::PrivateKeyProperties::set_sign(), Botan::PKCS11::SecretKeyProperties::set_sign(), Botan::PKCS11::PrivateKeyProperties::set_sign_recover(), Botan::PKCS11::StorageObjectProperties::set_token(), Botan::PKCS11::CertificateProperties::set_trusted(), Botan::PKCS11::PublicKeyProperties::set_trusted(), Botan::PKCS11::SecretKeyProperties::set_trusted(), Botan::PKCS11::PrivateKeyProperties::set_unwrap(), Botan::PKCS11::SecretKeyProperties::set_unwrap(), Botan::PKCS11::PublicKeyProperties::set_verify(), Botan::PKCS11::SecretKeyProperties::set_verify(), Botan::PKCS11::PublicKeyProperties::set_verify_recover(), Botan::PKCS11::PublicKeyProperties::set_wrap(), Botan::PKCS11::SecretKeyProperties::set_wrap(), Botan::PKCS11::PrivateKeyProperties::set_wrap_with_trusted(), and Botan::PKCS11::SecretKeyProperties::set_wrap_with_trusted().

◆ add_class()

void Botan::PKCS11::AttributeContainer::add_class ( ObjectClass object_class)
inherited

Add a class attribute (CKA_CLASS / AttributeType::Class).

Parameters
object_classclass attribute to add

Definition at line 18 of file p11_object.cpp.

18 {
19 m_numerics.emplace_back(static_cast<uint64_t>(object_class));
21 AttributeType::Class, reinterpret_cast<uint8_t*>(&m_numerics.back()), static_cast<Ulong>(sizeof(ObjectClass)));
22}

References add_attribute(), and Botan::PKCS11::Class.

Referenced by AttributeContainer().

◆ add_numeric()

template<std::integral T>
void Botan::PKCS11::AttributeContainer::add_numeric ( AttributeType attribute,
T value )
inlineinherited

Add a numeric attribute (e.g. CKA_MODULUS_BITS / AttributeType::ModulusBits).

Parameters
attributeattribute type
valuenumeric value to add

Definition at line 97 of file p11_object.h.

97 {
98 m_numerics.push_back(static_cast<uint64_t>(value));
99 add_attribute(attribute, reinterpret_cast<uint8_t*>(&m_numerics.back()), sizeof(T));
100 }

References add_attribute().

Referenced by Botan::PKCS11::CertificateProperties::CertificateProperties(), Botan::PKCS11::DomainParameterProperties::DomainParameterProperties(), Botan::PKCS11::KeyProperties::KeyProperties(), and Botan::PKCS11::CertificateProperties::set_category().

◆ add_string()

void Botan::PKCS11::AttributeContainer::add_string ( AttributeType attribute,
std::string_view value )
inherited

Add a string attribute (e.g. CKA_LABEL / AttributeType::Label).

Parameters
attributeattribute type
valuestring value to add

Definition at line 24 of file p11_object.cpp.

24 {
25 m_strings.push_back(std::string(value));
27 attribute, reinterpret_cast<const uint8_t*>(m_strings.back().data()), static_cast<Ulong>(value.size()));
28}

References add_attribute().

Referenced by Botan::PKCS11::Object::search(), Botan::PKCS11::Object::search(), Botan::PKCS11::DataObjectProperties::set_application(), and Botan::PKCS11::StorageObjectProperties::set_label().

◆ attributes()

const std::vector< Attribute > & Botan::PKCS11::AttributeContainer::attributes ( ) const
inlineinherited
Returns
the attributes this container contains

Definition at line 45 of file p11_object.h.

45{ return m_attributes; }

Referenced by Botan::PKCS11::Object::search(), Botan::PKCS11::Object::search(), and Botan::PKCS11::Object::search().

◆ count()

size_t Botan::PKCS11::AttributeContainer::count ( ) const
inlineinherited
Returns
the number of attributes in this container

Definition at line 51 of file p11_object.h.

51{ return m_attributes.size(); }

Referenced by Botan::PKCS11::Object::copy(), and Botan::PKCS11::Object::Object().

◆ data()

Attribute * Botan::PKCS11::AttributeContainer::data ( ) const
inlineinherited
Returns
raw attribute data

Definition at line 48 of file p11_object.h.

48{ return const_cast<Attribute*>(m_attributes.data()); }

Referenced by add_attribute(), Botan::PKCS11::Object::copy(), and Botan::PKCS11::Object::Object().

◆ key_type()

KeyType Botan::PKCS11::KeyProperties::key_type ( ) const
inlineinherited

◆ object_class()

ObjectClass Botan::PKCS11::ObjectProperties::object_class ( ) const
inlineinherited
Returns
the object class of this object

Definition at line 157 of file p11_object.h.

157{ return m_object_class; }

Referenced by Botan::PKCS11::KeyProperties::KeyProperties(), ObjectProperties(), and Botan::PKCS11::StorageObjectProperties::StorageObjectProperties().

◆ set_allowed_mechanisms()

void Botan::PKCS11::KeyProperties::set_allowed_mechanisms ( const std::vector< MechanismType > & )
inlineinherited

Sets a list of mechanisms allowed to be used with this key Not implemented TODO(Botan4) remove this

Definition at line 282 of file p11_object.h.

283 { // NOLINT(*-convert-member-functions-to-static)
284 throw Not_Implemented("KeyProperties::set_allowed_mechanisms");
285 }

◆ set_copyable()

void Botan::PKCS11::StorageObjectProperties::set_copyable ( bool value)
inlineinherited
Parameters
valueif true the object can be copied using C_CopyObject

Definition at line 185 of file p11_object.h.

void add_bool(AttributeType attribute, bool value)

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Copyable.

◆ set_derive()

void Botan::PKCS11::KeyProperties::set_derive ( bool value)
inlineinherited
Parameters
valuetrue if key supports key derivation (i.e., if other keys can be derived from this one)

Definition at line 275 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Derive.

◆ set_destroyable()

void Botan::PKCS11::StorageObjectProperties::set_destroyable ( bool value)
inlineinherited
Parameters
valueif true the object can be destroyed using C_DestroyObject

Definition at line 188 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Destroyable.

◆ set_encrypt()

void Botan::PKCS11::PublicKeyProperties::set_encrypt ( bool value)
inline
Parameters
valuetrue if the key supports encryption

Definition at line 304 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Encrypt.

◆ set_end_date()

void Botan::PKCS11::KeyProperties::set_end_date ( Date date)
inlineinherited
Parameters
dateend date for the key

Definition at line 270 of file p11_object.h.

270 {
271 add_binary(AttributeType::EndDate, reinterpret_cast<uint8_t*>(&date), sizeof(Date));
272 }
CK_DATE Date
Definition p11.h:840

References Botan::PKCS11::AttributeContainer::add_binary(), and Botan::PKCS11::EndDate.

◆ set_id()

void Botan::PKCS11::KeyProperties::set_id ( const std::vector< uint8_t > & id)
inlineinherited
Parameters
idkey identifier for key

Definition at line 262 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_binary(), and Botan::PKCS11::Id.

◆ set_label()

void Botan::PKCS11::StorageObjectProperties::set_label ( std::string_view label)
inlineinherited
Parameters
labeldescription of the object (RFC2279 string)

Definition at line 170 of file p11_object.h.

void add_string(AttributeType attribute, std::string_view value)

References Botan::PKCS11::AttributeContainer::add_string(), and Botan::PKCS11::Label.

◆ set_modifiable()

void Botan::PKCS11::StorageObjectProperties::set_modifiable ( bool value)
inlineinherited
Parameters
valueif true the object can be modified, otherwise it is read-only

Definition at line 182 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Modifiable.

◆ set_private()

void Botan::PKCS11::StorageObjectProperties::set_private ( bool value)
inlineinherited
Parameters
valueif true the object is a private object; otherwise the object is a public object When private, a user may not access the object until the user has been authenticated to the token

Definition at line 179 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Private.

◆ set_public_key_info()

void Botan::PKCS11::PublicKeyProperties::set_public_key_info ( const std::vector< uint8_t > & pubkey_info)
inline
Parameters
pubkey_infoDER-encoding of the SubjectPublicKeyInfo for this public key

Definition at line 334 of file p11_object.h.

334 {
336 }

References Botan::PKCS11::AttributeContainer::add_binary(), and Botan::PKCS11::PublicKeyInfo.

◆ set_start_date()

void Botan::PKCS11::KeyProperties::set_start_date ( Date date)
inlineinherited
Parameters
datestart date for the key

Definition at line 265 of file p11_object.h.

265 {
266 add_binary(AttributeType::StartDate, reinterpret_cast<uint8_t*>(&date), sizeof(Date));
267 }

References Botan::PKCS11::AttributeContainer::add_binary(), and Botan::PKCS11::StartDate.

◆ set_subject()

void Botan::PKCS11::PublicKeyProperties::set_subject ( const std::vector< uint8_t > & subject)
inline
Parameters
subjectDER-encoding of the key subject name

Definition at line 301 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_binary(), and Botan::PKCS11::Subject.

◆ set_token()

void Botan::PKCS11::StorageObjectProperties::set_token ( bool value)
inlineinherited
Parameters
valueif true the object is a token object; otherwise the object is a session object

Definition at line 173 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Token.

◆ set_trusted()

void Botan::PKCS11::PublicKeyProperties::set_trusted ( bool value)
inline
Parameters
valuetrue if the key can be trusted for the application that it was created. The wrapping key can be used to wrap keys with CKA_WRAP_WITH_TRUSTED set to CK_TRUE

Definition at line 319 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Trusted.

◆ set_verify()

void Botan::PKCS11::PublicKeyProperties::set_verify ( bool value)
inline
Parameters
valuetrue if the key supports verification where the signature is an appendix to the data

Definition at line 307 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Verify.

◆ set_verify_recover()

void Botan::PKCS11::PublicKeyProperties::set_verify_recover ( bool value)
inline
Parameters
valuetrue if the key supports verification where the data is recovered from the signature

Definition at line 310 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::VerifyRecover.

◆ set_wrap()

void Botan::PKCS11::PublicKeyProperties::set_wrap ( bool value)
inline
Parameters
valuetrue if the key supports wrapping (i.e., can be used to wrap other keys)

Definition at line 313 of file p11_object.h.

References Botan::PKCS11::AttributeContainer::add_bool(), and Botan::PKCS11::Wrap.

◆ set_wrap_template()

void Botan::PKCS11::PublicKeyProperties::set_wrap_template ( const AttributeContainer & )
inline

For wrapping keys The attribute template to match against any keys wrapped using this wrapping key. Keys that do not match cannot be wrapped Not implemented TODO(Botan4) remove this function

Definition at line 328 of file p11_object.h.

329 { // NOLINT(*-convert-member-functions-to-static)
330 throw Not_Implemented("PublicKeyProperties::set_wrap_template");
331 }

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