Botan 2.19.3
Crypto and TLS for C&
Public Member Functions | Protected Member Functions | List of all members
Botan::PKCS11::PrivateKeyProperties Class Reference

Common attributes of all private keys. More...

#include <p11_object.h>

Inheritance diagram for Botan::PKCS11::PrivateKeyProperties:
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<typename T >
void add_numeric (AttributeType attribute, T value)
 
void add_string (AttributeType attribute, const std::string &value)
 
const std::vector< Attribute > & attributes () const
 
size_t count () const
 
Attributedata () const
 
KeyType key_type () const
 
ObjectClass object_class () const
 
 PrivateKeyProperties (KeyType key_type)
 
void set_allowed_mechanisms (const std::vector< MechanismType > &)
 
void set_always_authenticate (bool value)
 
void set_copyable (bool value)
 
void set_decrypt (bool value)
 
void set_derive (bool value)
 
void set_destroyable (bool value)
 
void set_end_date (Date date)
 
void set_extractable (bool value)
 
void set_id (const std::vector< uint8_t > &id)
 
void set_label (const std::string &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_sensitive (bool value)
 
void set_sign (bool value)
 
void set_sign_recover (bool value)
 
void set_start_date (Date date)
 
void set_subject (const std::vector< uint8_t > &subject)
 
void set_token (bool value)
 
void set_unwrap (bool value)
 
void set_unwrap_template (const AttributeContainer &)
 
void set_wrap_with_trusted (bool value)
 

Protected Member Functions

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

Detailed Description

Common attributes of all private keys.

Definition at line 430 of file p11_object.h.

Constructor & Destructor Documentation

◆ PrivateKeyProperties()

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

Definition at line 176 of file p11_object.cpp.

178 {}
KeyProperties(ObjectClass object_class, KeyType key_type)

Member Function Documentation

◆ add_attribute()

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

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

Definition at line 53 of file p11_object.cpp.

54 {
55 bool exists = false;
56 // check if the attribute has been added already
57 for(auto& existing_attribute : m_attributes)
58 {
59 if(existing_attribute.type == static_cast< CK_ATTRIBUTE_TYPE >(attribute))
60 {
61 // remove old entries
62 m_strings.erase(std::remove_if(m_strings.begin(), m_strings.end(), [ &existing_attribute ](const std::string& data)
63 {
64 return data.data() == existing_attribute.pValue;
65 }), m_strings.end());
66
67 m_numerics.erase(std::remove_if(m_numerics.begin(), m_numerics.end(), [ &existing_attribute ](const uint64_t& data)
68 {
69 return &data == existing_attribute.pValue;
70 }), m_numerics.end());
71
72 m_vectors.erase(std::remove_if(m_vectors.begin(),
73 m_vectors.end(), [ &existing_attribute ](const secure_vector<uint8_t>& data)
74 {
75 return data.data() == existing_attribute.pValue;
76 }), m_vectors.end());
77
78 existing_attribute.pValue = const_cast< uint8_t* >(value);
79 existing_attribute.ulValueLen = size;
80 exists = true;
81 break;
82 }
83 }
84
85 if(!exists)
86 {
87 m_attributes.push_back(Attribute{ static_cast< CK_ATTRIBUTE_TYPE >(attribute), const_cast< uint8_t* >(value), size });
88 }
89 }
CK_ATTRIBUTE Attribute
Definition p11.h:847
CK_ULONG CK_ATTRIBUTE_TYPE
Definition pkcs11t.h:416

References Botan::PKCS11::AttributeContainer::data().

Referenced by Botan::PKCS11::AttributeContainer::add_binary(), Botan::PKCS11::AttributeContainer::add_bool(), Botan::PKCS11::AttributeContainer::add_class(), and Botan::PKCS11::AttributeContainer::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 90 of file p11_object.h.

91 {
92 add_binary(attribute, binary.data(), binary.size());
93 }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)

◆ 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 37 of file p11_object.cpp.

38 {
39 m_vectors.push_back(secure_vector<uint8_t>(value, value + length));
40 add_attribute(attribute,
41 reinterpret_cast<const uint8_t*>(m_vectors.back().data()),
42 static_cast<uint32_t>(length));
43 }
void add_attribute(AttributeType attribute, const uint8_t *value, uint32_t size)
Add an attribute with the given value and size to the attribute collection m_attributes

References Botan::PKCS11::AttributeContainer::add_attribute().

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

◆ 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 45 of file p11_object.cpp.

46 {
47 m_numerics.push_back(value ? True : False);
48 add_attribute(attribute,
49 reinterpret_cast<uint8_t*>(&m_numerics.back()),
50 sizeof(Bbool));
51 }
CK_BBOOL Bbool
Definition p11.h:836
const Bbool True
Definition p11.h:857
const Bbool False
Definition p11.h:858

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

◆ 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 21 of file p11_object.cpp.

22 {
23 m_numerics.emplace_back(static_cast< uint64_t >(object_class));
25 reinterpret_cast< uint8_t* >(&m_numerics.back()),
26 static_cast<uint32_t>(sizeof(ObjectClass)));
27 }

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

Referenced by Botan::PKCS11::AttributeContainer::AttributeContainer().

◆ add_numeric()

template<typename 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 108 of file p11_object.h.

109 {
110 static_assert(std::is_integral<T>::value, "Numeric value required.");
111 m_numerics.push_back(static_cast< uint64_t >(value));
112 add_attribute(attribute, reinterpret_cast< uint8_t* >(&m_numerics.back()), sizeof(T));
113 }
fe T
Definition ge.cpp:37

References T.

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

◆ add_string()

void Botan::PKCS11::AttributeContainer::add_string ( AttributeType  attribute,
const std::string &  value 
)
inherited

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

Parameters
attributeattribute type
valuestring value to add

Definition at line 29 of file p11_object.cpp.

30 {
31 m_strings.push_back(value);
32 add_attribute(attribute,
33 reinterpret_cast<const uint8_t*>(m_strings.back().data()),
34 static_cast<uint32_t>(value.size()));
35 }

References Botan::PKCS11::AttributeContainer::add_attribute().

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

◆ attributes()

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

Definition at line 46 of file p11_object.h.

47 {
48 return m_attributes;
49 }

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 58 of file p11_object.h.

59 {
60 return m_attributes.size();
61 }

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 52 of file p11_object.h.

53 {
54 return const_cast< Attribute* >(m_attributes.data());
55 }

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

◆ key_type()

KeyType Botan::PKCS11::KeyProperties::key_type ( ) const
inlineinherited
Returns
the key type of this key object

Definition at line 356 of file p11_object.h.

357 {
358 return m_key_type;
359 }

◆ object_class()

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

Definition at line 175 of file p11_object.h.

176 {
177 return m_object_class;
178 }

◆ 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

Definition at line 350 of file p11_object.h.

351 {
352 throw Not_Implemented("KeyProperties::set_allowed_mechanisms");
353 }

◆ set_always_authenticate()

void Botan::PKCS11::PrivateKeyProperties::set_always_authenticate ( bool  value)
inline
Parameters
valueIf true, the user has to supply the PIN for each use (sign or decrypt) with the key

Definition at line 485 of file p11_object.h.

486 {
488 }
void add_bool(AttributeType attribute, bool value)

◆ 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 219 of file p11_object.h.

◆ set_decrypt()

void Botan::PKCS11::PrivateKeyProperties::set_decrypt ( bool  value)
inline
Parameters
valuetrue if the key supports decryption

Definition at line 449 of file p11_object.h.

◆ 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 341 of file p11_object.h.

◆ 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 225 of file p11_object.h.

◆ set_end_date()

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

Definition at line 335 of file p11_object.h.

336 {
337 add_binary(AttributeType::EndDate, reinterpret_cast<uint8_t*>(&date), sizeof(Date));
338 }
CK_DATE Date
Definition p11.h:853

◆ set_extractable()

void Botan::PKCS11::PrivateKeyProperties::set_extractable ( bool  value)
inline
Parameters
valuetrue if the key is extractable and can be wrapped

Definition at line 473 of file p11_object.h.

◆ set_id()

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

Definition at line 323 of file p11_object.h.

◆ set_label()

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

Definition at line 192 of file p11_object.h.

193 {
195 }
void add_string(AttributeType attribute, const std::string &value)

◆ 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 213 of file p11_object.h.

◆ 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 207 of file p11_object.h.

◆ set_public_key_info()

void Botan::PKCS11::PrivateKeyProperties::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 502 of file p11_object.h.

◆ set_sensitive()

void Botan::PKCS11::PrivateKeyProperties::set_sensitive ( bool  value)
inline
Parameters
valuetrue if the key is sensitive

Definition at line 443 of file p11_object.h.

◆ set_sign()

void Botan::PKCS11::PrivateKeyProperties::set_sign ( bool  value)
inline
Parameters
valuetrue if the key supports signatures where the signature is an appendix to the data

Definition at line 455 of file p11_object.h.

◆ set_sign_recover()

void Botan::PKCS11::PrivateKeyProperties::set_sign_recover ( bool  value)
inline
Parameters
valuetrue if the key supports signatures where the data can be recovered from the signature

Definition at line 461 of file p11_object.h.

◆ set_start_date()

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

Definition at line 329 of file p11_object.h.

330 {
331 add_binary(AttributeType::StartDate, reinterpret_cast<uint8_t*>(&date), sizeof(Date));
332 }

◆ set_subject()

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

Definition at line 437 of file p11_object.h.

◆ 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 198 of file p11_object.h.

◆ set_unwrap()

void Botan::PKCS11::PrivateKeyProperties::set_unwrap ( bool  value)
inline
Parameters
valuetrue if the key supports unwrapping (i.e., can be used to unwrap other keys)

Definition at line 467 of file p11_object.h.

◆ set_unwrap_template()

void Botan::PKCS11::PrivateKeyProperties::set_unwrap_template ( const AttributeContainer )
inline

For wrapping keys The attribute template to apply to any keys unwrapped using this wrapping key. Any user supplied template is applied after this template as if the object has already been created Not implemented

Definition at line 496 of file p11_object.h.

497 {
498 throw Not_Implemented("PrivateKeyProperties::set_unwrap_template");
499 }

◆ set_wrap_with_trusted()

void Botan::PKCS11::PrivateKeyProperties::set_wrap_with_trusted ( bool  value)
inline
Parameters
valuetrue if the key can only be wrapped with a wrapping key that has CKA_TRUSTED set to CK_TRUE

Definition at line 479 of file p11_object.h.


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