diff options
author | Stef Walter <stefw@gnome.org> | 2013-01-24 14:36:59 +0100 |
---|---|---|
committer | Stef Walter <stefw@gnome.org> | 2013-02-04 10:55:45 +0100 |
commit | 7ddff6795830deff6ec5fb1b8b0c704fbdea2c97 (patch) | |
tree | d9d4ad6c4889fa8d9ec6d01a7a76222bd9efac4f /common/attrs.h | |
parent | 322b4739cb51aa45568d9479224f2b07ac82a35f (diff) | |
download | p11-kit-7ddff6795830deff6ec5fb1b8b0c704fbdea2c97.tar.gz |
Further tweaks and cleanup for functions dealing with PKCS#11 attributes
* Check that the size is correct when looking for a boolean
or a ulong.
* Make sure that the length is not the invalid negative ulong.
* Functions for dumping out attribute contents
* Make it possible to use attributes in hash tables
Diffstat (limited to 'common/attrs.h')
-rw-r--r-- | common/attrs.h | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/common/attrs.h b/common/attrs.h index 12a2798..870f0d1 100644 --- a/common/attrs.h +++ b/common/attrs.h @@ -36,17 +36,18 @@ #ifndef P11_ATTRS_H_ #define P11_ATTRS_H_ +#include "compat.h" #include "pkcs11.h" #define CKA_INVALID ((CK_ULONG)-1) -CK_ATTRIBUTE * p11_attrs_dup (CK_ATTRIBUTE *attrs); +CK_ATTRIBUTE * p11_attrs_dup (const CK_ATTRIBUTE *attrs); CK_ATTRIBUTE * p11_attrs_build (CK_ATTRIBUTE *attrs, ...); CK_ATTRIBUTE * p11_attrs_buildn (CK_ATTRIBUTE *attrs, - CK_ATTRIBUTE *add, + const CK_ATTRIBUTE *add, CK_ULONG count); CK_ATTRIBUTE * p11_attrs_take (CK_ATTRIBUTE *attrs, @@ -54,9 +55,9 @@ CK_ATTRIBUTE * p11_attrs_take (CK_ATTRIBUTE *attrs, CK_VOID_PTR value, CK_ULONG length); -CK_BBOOL p11_attrs_is_empty (CK_ATTRIBUTE *attrs); +bool p11_attrs_is_empty (const CK_ATTRIBUTE *attrs); -CK_ULONG p11_attrs_count (CK_ATTRIBUTE *attrs); +CK_ULONG p11_attrs_count (const CK_ATTRIBUTE *attrs); void p11_attrs_free (void *attrs); @@ -67,20 +68,52 @@ CK_ATTRIBUTE * p11_attrs_findn (CK_ATTRIBUTE *attrs, CK_ULONG count, CK_ATTRIBUTE_TYPE type); -CK_BBOOL p11_attrs_remove (CK_ATTRIBUTE *attrs, +bool p11_attrs_find_bool (CK_ATTRIBUTE *attrs, + CK_ATTRIBUTE_TYPE type, + CK_BBOOL *value); + +bool p11_attrs_findn_bool (CK_ATTRIBUTE *attrs, + CK_ULONG count, + CK_ATTRIBUTE_TYPE type, + CK_BBOOL *value); + +bool p11_attrs_find_ulong (CK_ATTRIBUTE *attrs, + CK_ATTRIBUTE_TYPE type, + CK_ULONG *value); + +bool p11_attrs_findn_ulong (CK_ATTRIBUTE *attrs, + CK_ULONG count, + CK_ATTRIBUTE_TYPE type, + CK_ULONG *value); + +CK_ATTRIBUTE * p11_attrs_find_valid (CK_ATTRIBUTE *attrs, CK_ATTRIBUTE_TYPE type); -CK_BBOOL p11_attrs_match (CK_ATTRIBUTE *attrs, - CK_ATTRIBUTE *match); +CK_ATTRIBUTE * p11_attrs_findn_valid (CK_ATTRIBUTE *attrs, + CK_ULONG count, + CK_ATTRIBUTE_TYPE type); + +bool p11_attrs_remove (CK_ATTRIBUTE *attrs, + CK_ATTRIBUTE_TYPE type); -CK_BBOOL p11_attrs_matchn (CK_ATTRIBUTE *attrs, - CK_ATTRIBUTE *match, +bool p11_attrs_match (const CK_ATTRIBUTE *attrs, + const CK_ATTRIBUTE *match); + +bool p11_attrs_matchn (const CK_ATTRIBUTE *attrs, + const CK_ATTRIBUTE *match, CK_ULONG count); -CK_BBOOL p11_attr_equal (CK_ATTRIBUTE *one, - CK_ATTRIBUTE *two); +char * p11_attrs_to_string (const CK_ATTRIBUTE *attrs); + +char * p11_attr_to_string (const CK_ATTRIBUTE *attr); + +bool p11_attr_equal (const void *one, + const void *two); + +unsigned int p11_attr_hash (const void *data); -CK_BBOOL p11_attr_match_boolean (CK_ATTRIBUTE *attr, - CK_BBOOL value); +bool p11_attr_match_value (const CK_ATTRIBUTE *attr, + const void *value, + ssize_t length); #endif /* P11_ATTRS_H_ */ |