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; }
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; }