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

Helper class to build the Attribute / CK_ATTRIBUTE structures. More...

#include <p11_object.h>

Inheritance diagram for Botan::PKCS11::AttributeContainer:
Botan::PKCS11::ObjectProperties Botan::PKCS11::StorageObjectProperties Botan::PKCS11::CertificateProperties Botan::PKCS11::DataObjectProperties Botan::PKCS11::DomainParameterProperties Botan::PKCS11::KeyProperties Botan::PKCS11::PrivateKeyProperties Botan::PKCS11::PublicKeyProperties Botan::PKCS11::SecretKeyProperties

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)
 
 AttributeContainer ()=default
 
 AttributeContainer (AttributeContainer &&other)=default
 
 AttributeContainer (const AttributeContainer &other)=delete
 
 AttributeContainer (ObjectClass object_class)
 
const std::vector< Attribute > & attributes () const
 
size_t count () const
 
Attributedata () const
 
AttributeContaineroperator= (AttributeContainer &&other)=default
 
AttributeContaineroperator= (const AttributeContainer &other)=delete
 
virtual ~AttributeContainer ()=default
 

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

Helper class to build the Attribute / CK_ATTRIBUTE structures.

Definition at line 28 of file p11_object.h.

Constructor & Destructor Documentation

◆ AttributeContainer() [1/4]

Botan::PKCS11::AttributeContainer::AttributeContainer ( )
default

◆ AttributeContainer() [2/4]

Botan::PKCS11::AttributeContainer::AttributeContainer ( ObjectClass  object_class)
Parameters
object_classthe class type of this container

Definition at line 16 of file p11_object.cpp.

17 {
18 add_class(object_class);
19 }
void add_class(ObjectClass object_class)
Definition: p11_object.cpp:21

References add_class().

◆ ~AttributeContainer()

virtual Botan::PKCS11::AttributeContainer::~AttributeContainer ( )
virtualdefault

◆ AttributeContainer() [3/4]

Botan::PKCS11::AttributeContainer::AttributeContainer ( AttributeContainer &&  other)
default

◆ AttributeContainer() [4/4]

Botan::PKCS11::AttributeContainer::AttributeContainer ( const AttributeContainer other)
delete

Member Function Documentation

◆ add_attribute()

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

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

Definition at line 47 of file p11_object.cpp.

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

References data().

Referenced by add_binary(), add_bool(), add_class(), 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 
)
inline

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)
Definition: p11_object.cpp:35

◆ add_binary() [2/2]

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

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

36 {
37 m_vectors.push_back(secure_vector<uint8_t>(value, value + length));
38 add_attribute(attribute, reinterpret_cast< const uint8_t* >(m_vectors.back().data()), static_cast<Ulong>(length));
39 }
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:47
CK_ULONG Ulong
Definition: p11.h:838

References add_attribute().

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

◆ add_bool()

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

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

Parameters
attributeattribute type
valueboolean value to add

Definition at line 41 of file p11_object.cpp.

42 {
43 m_numerics.push_back(value ? True : False);
44 add_attribute(attribute, reinterpret_cast< uint8_t* >(&m_numerics.back()), sizeof(Bbool));
45 }
CK_BBOOL Bbool
Definition: p11.h:836
const Bbool True
Definition: p11.h:857
const Bbool False
Definition: p11.h:858

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

◆ add_class()

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

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<Ulong>(sizeof(ObjectClass)));
27 }

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

Referenced by AttributeContainer().

◆ add_numeric()

template<typename T >
void Botan::PKCS11::AttributeContainer::add_numeric ( AttributeType  attribute,
T  value 
)
inline

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 
)

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, reinterpret_cast<const uint8_t*>(m_strings.back().data()), static_cast<Ulong>(value.size()));
33 }

References add_attribute().

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

◆ attributes()

const std::vector< Attribute > & Botan::PKCS11::AttributeContainer::attributes ( ) const
inline
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().

◆ count()

size_t Botan::PKCS11::AttributeContainer::count ( ) const
inline
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
inline
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 add_attribute(), Botan::PKCS11::Object::copy(), and Botan::PKCS11::Object::Object().

◆ operator=() [1/2]

AttributeContainer & Botan::PKCS11::AttributeContainer::operator= ( AttributeContainer &&  other)
default

◆ operator=() [2/2]

AttributeContainer & Botan::PKCS11::AttributeContainer::operator= ( const AttributeContainer other)
delete

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