## GckAttributes

GckAttributes — A set of PKCS11 attributes.

## Synopsis

                        GckAttributes;
    #define             GCK_TYPE_ATTRIBUTES
    GckAttributes *     gck_attributes_new                  (void);
    GckAttributes *     gck_attributes_new_empty            (gulong attr_type,
                                                             ...);
    GckAttribute *      gck_attributes_at                   (GckAttributes *attrs,
                                                             guint index);
    GckAttribute *      gck_attributes_add                  (GckAttributes *attrs,
                                                             GckAttribute *attr);
    GckAttribute *      gck_attributes_add_data             (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gconstpointer value,
                                                             gsize length);
    GckAttribute *      gck_attributes_add_invalid          (GckAttributes *attrs,
                                                             gulong attr_type);
    GckAttribute *      gck_attributes_add_empty            (GckAttributes *attrs,
                                                             gulong attr_type);
    GckAttribute *      gck_attributes_add_boolean          (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gboolean value);
    GckAttribute *      gck_attributes_add_string           (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             const gchar *value);
    GckAttribute *      gck_attributes_add_date             (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             const GDate *value);
    GckAttribute *      gck_attributes_add_ulong            (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gulong value);
    void                gck_attributes_add_all              (GckAttributes *attrs,
                                                             GckAttributes *from);
    GckAttribute *      gck_attributes_find                 (GckAttributes *attrs,
                                                             gulong attr_type);
    gboolean            gck_attributes_find_boolean         (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gboolean *value);
    gboolean            gck_attributes_find_ulong           (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gulong *value);
    gboolean            gck_attributes_find_string          (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gchar **value);
    gboolean            gck_attributes_find_date            (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             GDate *value);
    gulong              gck_attributes_count                (GckAttributes *attrs);
    GckAttributes *     gck_attributes_ref                  (GckAttributes *attrs);
    void                gck_attributes_unref                (GckAttributes *attrs);
    gboolean            gck_attributes_contains             (GckAttributes *attrs,
                                                             GckAttribute *match);
    void                gck_attributes_dump                 (GckAttributes *attrs);
    GType               gck_attributes_get_boxed_type       (void);
    GckAttributes *     gck_attributes_new_full             (GckAllocator allocator);
    gpointer            (*GckAllocator)                     (gpointer data,
                                                             gsize length);

## Description

A set of GckAttribute structures. These attributes contain information about a PKCS11 object. Use `gck_object_get()` or `gck_object_set()` to set and retrieve attributes on an object.

## Details

### GckAttributes

    typedef struct _GckAttributes GckAttributes;

A set of GckAttribute structures.

### GCK_TYPE_ATTRIBUTES

    #define             GCK_TYPE_ATTRIBUTES                     (gck_attributes_get_boxed_type ())

Boxed type for GckAttributes

### gck_attributes_new ()

    GckAttributes *     gck_attributes_new                  (void);

Create a new GckAttributes array.

Returns : | The new attributes array. When done with the array release it with `gck_attributes_unref()`.

### gck_attributes_new_empty ()

    GckAttributes *     gck_attributes_new_empty            (gulong attr_type,
                                                             ...);

Creates an GckAttributes array with empty attributes. The arguments should be values of attribute types, terminated with gck_INVALID.

`attr_type` : | The first attribute type to add as empty.
`...` : | The arguments should be values of attribute types, terminated with gck_INVALID.
Returns : | The new attributes array. When done with the array release it with `gck_attributes_unref()`.

### gck_attributes_at ()

    GckAttribute *      gck_attributes_at                   (GckAttributes *attrs,
                                                             guint index);

Get attribute at the specified index in the attribute array.

Use `gck_attributes_count()` to determine how many attributes are in the array.

`attrs` : | The attributes array.
`index` : | The attribute index to retrieve.
Returns : | The specified attribute.

### gck_attributes_add ()

    GckAttribute *      gck_attributes_add                  (GckAttributes *attrs,
                                                             GckAttribute *attr);

Add the specified attribute to the array.

The value stored in the attribute will be copied.

`attrs` : | The attributes array to add to
`attr` : | The attribute to add.
Returns : | The attribute that was added.

### gck_attributes_add_data ()

    GckAttribute *      gck_attributes_add_data             (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gconstpointer value,
                                                             gsize length);

Add an attribute with the specified type and value to the array.

The value stored in the attribute will be copied.

`attrs` : | The attributes array to add to.
`attr_type` : | The type of attribute to add.
`value` : | The raw memory of the attribute value.
`length` : | The length of the attribute value.
Returns : | The attribute that was added.

### gck_attributes_add_invalid ()

    GckAttribute *      gck_attributes_add_invalid          (GckAttributes *attrs,
                                                             gulong attr_type);

Add an attribute with the specified type and an 'invalid' value to the array.

`attrs` : | The attributes array to add to.
`attr_type` : | The type of attribute to add.
Returns : | The attribute that was added.

### gck_attributes_add_empty ()

    GckAttribute *      gck_attributes_add_empty            (GckAttributes *attrs,
                                                             gulong attr_type);

Add an attribute with the specified type, with empty data.

`attrs` : | The attributes array to add.
`attr_type` : | The type of attribute to add.
Returns : | The attribute that was added.

### gck_attributes_add_boolean ()

    GckAttribute *      gck_attributes_add_boolean          (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gboolean value);

Add an attribute with the specified type and value to the array.

The value will be stored as a CK_BBOOL PKCS#11 style attribute.

`attrs` : | The attributes array to add to.
`attr_type` : | The type of attribute to add.
`value` : | The boolean value to add.
Returns : | The attribute that was added.

### gck_attributes_add_string ()

    GckAttribute *      gck_attributes_add_string           (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             const gchar *value);

Add an attribute with the specified type and value to the array.

The value will be copied into the attribute.

`attrs` : | The attributes array to add to.
`attr_type` : | The type of attribute to add.
`value` : | The null terminated string value to add.
Returns : | The attribute that was added.

### gck_attributes_add_date ()

    GckAttribute *      gck_attributes_add_date             (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             const GDate *value);

Add an attribute with the specified type and value to the array.

The value will be stored as a CK_DATE PKCS#11 style attribute.

`attrs` : | The attributes array to add to.
`attr_type` : | The type of attribute to add.
`value` : | The GDate value to add.
Returns : | The attribute that was added.

### gck_attributes_add_ulong ()

    GckAttribute *      gck_attributes_add_ulong            (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gulong value);

Add an attribute with the specified type and value to the array.

The value will be stored as a CK_ULONG PKCS#11 style attribute.

`attrs` : | The attributes array to add to.
`attr_type` : | The type of attribute to add.
`value` : | The gulong value to add.
Returns : | The attribute that was added.

### gck_attributes_add_all ()

    void                gck_attributes_add_all              (GckAttributes *attrs,
                                                             GckAttributes *from);

Add all attributes in `from` to `attrs`.

`attrs` : | A set of attributes
`from` : | Attributes to add

### gck_attributes_find ()

    GckAttribute *      gck_attributes_find                 (GckAttributes *attrs,
                                                             gulong attr_type);

Find an attribute with the specified type in the array.

`attrs` : | The attributes array to search.
`attr_type` : | The type of attribute to find.
Returns : | The first attribute found with the specified type, or NULL.

### gck_attributes_find_boolean ()

    gboolean            gck_attributes_find_boolean         (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gboolean *value);

Find an attribute with the specified type in the array.

The attribute (if found) must be of the right size to store a boolean value (ie: CK_BBOOL). If the attribute is marked invalid then it will be treated as not found.

`attrs` : | The attributes array to search.
`attr_type` : | The type of attribute to find.
`value` : | The resulting gboolean value.
Returns : | Whether a value was found or not.

### gck_attributes_find_ulong ()

    gboolean            gck_attributes_find_ulong           (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gulong *value);

Find an attribute with the specified type in the array.

The attribute (if found) must be of the right size to store a unsigned long value (ie: CK_ULONG). If the attribute is marked invalid then it will be treated as not found.

`attrs` : | The attributes array to search.
`attr_type` : | The type of attribute to find.
`value` : | The resulting gulong value.
Returns : | Whether a value was found or not.

### gck_attributes_find_string ()

    gboolean            gck_attributes_find_string          (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             gchar **value);

Find an attribute with the specified type in the array.

If the attribute is marked invalid then it will be treated as not found. The resulting string will be null-terminated, and must be freed by the caller using `g_free()`.

`attrs` : | The attributes array to search.
`attr_type` : | The type of attribute to find.
`value` : | The resulting string value.
Returns : | Whether a value was found or not.

### gck_attributes_find_date ()

    gboolean            gck_attributes_find_date            (GckAttributes *attrs,
                                                             gulong attr_type,
                                                             GDate *value);

Find an attribute with the specified type in the array.

The attribute (if found) must be of the right size to store a date value (ie: CK_DATE). If the attribute is marked invalid then it will be treated as not found.

`attrs` : | The attributes array to search.
`attr_type` : | The type of attribute to find.
`value` : | The resulting GDate value.
Returns : | Whether a value was found or not.

### gck_attributes_count ()

    gulong              gck_attributes_count                (GckAttributes *attrs);

Get the number of attributes in this attribute array.

`attrs` : | The attributes array to count.
Returns : | The number of contained attributes.

### gck_attributes_ref ()

    GckAttributes *     gck_attributes_ref                  (GckAttributes *attrs);

Reference this attributes array.

`attrs` : | An attribute array
Returns : | The attributes.

### gck_attributes_unref ()

    void                gck_attributes_unref                (GckAttributes *attrs);

Unreference this attribute array.

When all outstanding references are NULL, the array will be freed.

`attrs` : | An attribute array

### gck_attributes_contains ()

    gboolean            gck_attributes_contains             (GckAttributes *attrs,
                                                             GckAttribute *match);

Check whether the attributes contain a certain attribute.

`attrs` : | The attributes to check
`match` : | The attribute to find
Returns : | `TRUE` if the attributes contain the attribute.

### gck_attributes_dump ()

    void                gck_attributes_dump                 (GckAttributes *attrs);

Dump the attributes using `g_printerr()`.

`attrs` : | The attributes

### gck_attributes_get_boxed_type ()

    GType               gck_attributes_get_boxed_type       (void);

Get the boxed type representing a GckAttributes array.

Returns : | The boxed type.

### gck_attributes_new_full ()

    GckAttributes *     gck_attributes_new_full             (GckAllocator allocator);

Create a new GckAttributes array.

`allocator` : | Memory allocator for attribute data, or NULL for default.
Returns : | The new attributes array. When done with the array release it with `gck_attributes_unref()`.

### GckAllocator ()

    gpointer            (*GckAllocator)                     (gpointer data,
                                                             gsize length);

An allocator used to allocate data for the attributes in this GckAttributes set.

This is a function that acts like g_realloc. Specifically it frees when length is set to zero, it allocates when data is set to NULL, and it reallocates when both are valid.

`data` : | Memory to allocate or deallocate.
`length` : | New length of memory.
Returns : | The allocated memory, or NULL when freeing.