Botan  2.8.0
Crypto and TLS for C++11
Public Member Functions | Protected Member Functions | List of all members
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

void add_binary (AttributeType attribute, const uint8_t *value, size_t length)
 
template<typename TAlloc >
void add_binary (AttributeType attribute, const std::vector< uint8_t, TAlloc > &binary)
 
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
 
 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 (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_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, uint32_t size)
 Add an attribute with the given value and size to the attribute collection m_attributes More...
 

Detailed Description

Common attributes of all public key objects.

Definition at line 374 of file p11_object.h.

Constructor & Destructor Documentation

◆ PublicKeyProperties()

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

Definition at line 162 of file p11_object.cpp.

References Botan::PKCS11::PublicKey.

164  {}
KeyType key_type() const
Definition: p11_object.h:364
KeyProperties(ObjectClass object_class, KeyType key_type)
Definition: p11_object.cpp:154

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

References Botan::PKCS11::AttributeContainer::data(), and CK_ATTRIBUTE::pValue.

Referenced by Botan::PKCS11::AttributeContainer::add_binary(), Botan::PKCS11::AttributeContainer::add_bool(), Botan::PKCS11::AttributeContainer::add_class(), and Botan::PKCS11::AttributeContainer::add_string().

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

◆ add_binary() [1/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 34 of file p11_object.cpp.

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

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

35  {
36  m_vectors.push_back(secure_vector<uint8_t>(value, value + length));
37  add_attribute(attribute, reinterpret_cast< const uint8_t* >(m_vectors.back().data()), length);
38  }
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 ...
Definition: p11_object.cpp:46

◆ add_binary() [2/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 94 of file p11_object.h.

95  {
96  add_binary(attribute, binary.data(), binary.size());
97  }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)
Definition: p11_object.cpp:34

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

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

41  {
42  m_numerics.push_back(value ? True : False);
43  add_attribute(attribute, reinterpret_cast< uint8_t* >(&m_numerics.back()), sizeof(Bbool));
44  }
const Bbool False
Definition: p11.h:856
const Bbool True
Definition: p11.h:855
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 ...
Definition: p11_object.cpp:46
CK_BBOOL Bbool
Definition: p11.h:834

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

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

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

23  {
24  m_numerics.push_back(static_cast< uint64_t >(object_class));
25  add_attribute(AttributeType::Class, reinterpret_cast< uint8_t* >(&m_numerics.back()), sizeof(ObjectClass));
26  }
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 ...
Definition: p11_object.cpp:46

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

References T.

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

113  {
114  static_assert(std::is_integral<T>::value, "Numeric value required.");
115  m_numerics.push_back(static_cast< uint64_t >(value));
116  add_attribute(attribute, reinterpret_cast< uint8_t* >(&m_numerics.back()), sizeof(T));
117  }
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 ...
Definition: p11_object.cpp:46
fe T
Definition: ge.cpp:37

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

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

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

29  {
30  m_strings.push_back(value);
31  add_attribute(attribute, reinterpret_cast< const uint8_t* >(m_strings.back().data()), value.size());
32  }
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 ...
Definition: p11_object.cpp:46

◆ attributes()

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

Definition at line 50 of file p11_object.h.

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

51  {
52  return m_attributes;
53  }

◆ count()

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

Definition at line 62 of file p11_object.h.

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

63  {
64  return m_attributes.size();
65  }

◆ data()

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

Definition at line 56 of file p11_object.h.

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

57  {
58  return const_cast< Attribute* >(m_attributes.data());
59  }
CK_ATTRIBUTE Attribute
Definition: p11.h:845

◆ key_type()

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

Definition at line 364 of file p11_object.h.

365  {
366  return m_key_type;
367  }

◆ object_class()

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

Definition at line 183 of file p11_object.h.

184  {
185  return m_object_class;
186  }

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

359  {
360  throw Exception("Not implemented (KeyProperties::set_allowed_mechanisms)");
361  }

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

References Botan::PKCS11::Copyable.

228  {
230  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::Derive.

350  {
352  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::Destroyable.

234  {
236  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

◆ set_encrypt()

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

Definition at line 387 of file p11_object.h.

References Botan::PKCS11::Encrypt.

388  {
390  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

◆ set_end_date()

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

Definition at line 343 of file p11_object.h.

References Botan::PKCS11::EndDate.

344  {
345  add_binary(AttributeType::EndDate, reinterpret_cast<uint8_t*>(&date), sizeof(Date));
346  }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)
Definition: p11_object.cpp:34
CK_DATE Date
Definition: p11.h:851

◆ set_id()

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

Definition at line 331 of file p11_object.h.

References Botan::PKCS11::Id.

332  {
334  }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)
Definition: p11_object.cpp:34

◆ set_label()

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

Definition at line 200 of file p11_object.h.

References Botan::PKCS11::Label.

201  {
203  }
void add_string(AttributeType attribute, const std::string &value)
Definition: p11_object.cpp:28

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

References Botan::PKCS11::Modifiable.

222  {
224  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::Private.

216  {
218  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::PublicKeyInfo.

432  {
434  }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)
Definition: p11_object.cpp:34

◆ set_start_date()

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

Definition at line 337 of file p11_object.h.

References Botan::PKCS11::StartDate.

338  {
339  add_binary(AttributeType::StartDate, reinterpret_cast<uint8_t*>(&date), sizeof(Date));
340  }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)
Definition: p11_object.cpp:34
CK_DATE Date
Definition: p11.h:851

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

References Botan::PKCS11::Subject.

382  {
384  }
void add_binary(AttributeType attribute, const uint8_t *value, size_t length)
Definition: p11_object.cpp:34

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

References Botan::PKCS11::Token.

207  {
209  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::Trusted.

415  {
417  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::Verify.

394  {
396  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::VerifyRecover.

400  {
402  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

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

References Botan::PKCS11::Wrap.

406  {
408  }
void add_bool(AttributeType attribute, bool value)
Definition: p11_object.cpp:40

◆ 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

Definition at line 425 of file p11_object.h.

426  {
427  throw Exception("Not implemented (PublicKeyProperties::set_wrap_template)");
428  }

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