gboolean
gkm_object_has_attribute_ulong (GkmObject *self, GkmSession *session,
                                CK_ATTRIBUTE_TYPE type, gulong value)
{
	gulong *data;
	gsize n_data, i;

	g_return_val_if_fail (GKM_IS_OBJECT (self), FALSE);
	g_return_val_if_fail (GKM_IS_SESSION (session), FALSE);

	data = gkm_object_get_attribute_data (self, session, type, &n_data);
	if (data == NULL)
		return FALSE;

	g_return_val_if_fail (n_data % sizeof (gulong) == 0, FALSE);
	for (i = 0; i < n_data / sizeof (gulong); ++i) {
		if (data[i] == value) {
			g_free (data);
			return TRUE;
		}
	}

	g_free (data);
	return FALSE;
}
Esempio n. 2
0
static gchar*
identifier_for_object (GkmObject *object)
{
    GkmSerializableIface *serial;
    const gchar *ext;
    gchar *identifier;
    gchar *name = NULL;
    guchar *data;
    gsize n_data;

    g_assert (GKM_IS_OBJECT (object));
    g_assert (GKM_IS_SERIALIZABLE (object));

    /* Figure out the extension and prefix */
    serial = GKM_SERIALIZABLE_GET_INTERFACE (object);
    ext = serial->extension;
    g_return_val_if_fail (ext, NULL);

    /* First we try to use the CN of a subject */
    data = gkm_object_get_attribute_data (object, NULL, CKA_SUBJECT, &n_data);
    if (data && n_data)
        name = name_for_subject (data, n_data);
    g_free (data);

    /* Next we try hex encoding the ID */
    if (name == NULL) {
        data = gkm_object_get_attribute_data (object, NULL, CKA_ID, &n_data);
        if (data && n_data)
            name = egg_hex_encode (data, n_data);
        g_free (data);
    }

    /* Build up the identifier */
    identifier = g_strconcat (name, ext, NULL);
    g_strdelimit (identifier, UNWANTED_IDENTIFIER_CHARS, '_');

    g_free (name);
    return identifier;
}