summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--egg/Makefile.am12
-rw-r--r--gck/Makefile.am2
-rw-r--r--gck/gck-enumerator.c60
-rw-r--r--gck/gck-modules.c21
-rw-r--r--gck/gck-session.c28
-rw-r--r--gck/gck.h2
-rw-r--r--gck/pkcs11.h4
-rw-r--r--gcr/Makefile.am2
-rw-r--r--gcr/gcr-import-dialog.c26
-rw-r--r--gcr/gcr-import-dialog.h6
-rw-r--r--gcr/gcr-importer.c70
-rw-r--r--gcr/gcr-importer.h6
-rw-r--r--gcr/gcr-initializer.h4
-rw-r--r--gcr/gcr-internal.h2
-rw-r--r--gcr/gcr-library.c17
-rw-r--r--gcr/gcr-parser.c28
-rw-r--r--gcr/gcr-parser.h2
-rw-r--r--gcr/gcr-types.h8
-rw-r--r--gcr/tests/unit-test-parser.c4
19 files changed, 190 insertions, 114 deletions
diff --git a/egg/Makefile.am b/egg/Makefile.am
index f22d000..3fd25ee 100644
--- a/egg/Makefile.am
+++ b/egg/Makefile.am
@@ -7,7 +7,8 @@ noinst_LTLIBRARIES = \
libegg-dbus.la \
libegg-secure.la \
libegg-prompt.la \
- libegg-entry-buffer.la
+ libegg-entry-buffer.la \
+ libegg-hex.la
BUILT_SOURCES = \
asn1-def-pk.c asn1-def-pkix.c
@@ -108,6 +109,15 @@ libegg_prompt_la_LIBS = \
$(LIBGCRYPT_LIBS) \
$(GLIB_LIBS)
+libegg_hex_la_SOURCES = \
+ egg-hex.c egg-hex.h
+
+libegg_hex_la_CFLAGS = \
+ $(GLIB_CFLAGS)
+
+libegg_hex_la_LIBS = \
+ $(GLIB_LIBS)
+
# -------------------------------------------------------------------
if WITH_TESTS
diff --git a/gck/Makefile.am b/gck/Makefile.am
index bf7533a..cd93099 100644
--- a/gck/Makefile.am
+++ b/gck/Makefile.am
@@ -35,7 +35,7 @@ libgck_la_LDFLAGS = \
-no-undefined -export-symbols-regex 'gck_*'
libgck_la_LIBADD = \
- $(top_builddir)/egg/libegg.la \
+ $(top_builddir)/egg/libegg-hex.la \
$(GOBJECT_LIBS) \
$(GTHREAD_LIBS) \
$(GIO_LIBS) \
diff --git a/gck/gck-enumerator.c b/gck/gck-enumerator.c
index 0a57f90..dd2d58b 100644
--- a/gck/gck-enumerator.c
+++ b/gck/gck-enumerator.c
@@ -252,6 +252,7 @@ state_slots (GckEnumeratorState *args, gboolean forward)
} else {
gck_list_unref_free (args->slots);
+ args->slots = NULL;
return state_module;
}
}
@@ -414,10 +415,25 @@ state_authenticated (GckEnumeratorState *args, gboolean forward)
return state_results;
}
+static GckObject*
+extract_result (GckEnumeratorState *args)
+{
+ CK_OBJECT_HANDLE handle;
+
+ if (!args->objects || !args->objects->len)
+ return NULL;
+
+ g_assert (args->session);
+
+ handle = g_array_index (args->objects, CK_OBJECT_HANDLE, 0);
+ g_array_remove_index_fast (args->objects, 0);
+
+ return gck_object_from_handle (args->session, handle);
+}
+
static gpointer
state_results (GckEnumeratorState *args, gboolean forward)
{
- CK_OBJECT_HANDLE handle;
GckObject *object;
guint have;
@@ -432,14 +448,10 @@ state_results (GckEnumeratorState *args, gboolean forward)
while (have < args->want_objects) {
- /* Need more objects! */
- if (!args->objects || args->objects->len == 0)
+ object = extract_result (args);
+ if (!object)
return rewind_state (args, state_slots);
- handle = g_array_index (args->objects, CK_OBJECT_HANDLE, 0);
- g_array_remove_index_fast (args->objects, 0);
-
- object = gck_object_from_handle (args->session, handle);
args->results = g_list_append (args->results, object);
++have;
}
@@ -581,19 +593,41 @@ free_enumerate_next (EnumerateNext *args)
GckObject*
gck_enumerator_next (GckEnumerator *self, GCancellable *cancellable, GError **error)
{
+ EnumerateNext args = { GCK_ARGUMENTS_INIT, NULL, };
GckObject *result = NULL;
- GList *results;
g_return_val_if_fail (GCK_IS_ENUMERATOR (self), NULL);
g_return_val_if_fail (!error || !*error, NULL);
- results = gck_enumerator_next_n (self, 1, cancellable, error);
- if (results) {
- g_assert (GCK_IS_OBJECT (results->data));
- result = g_object_ref (results->data);
- gck_list_unref_free (results);
+ /* Remove the state and own it ourselves */
+ args.state = g_atomic_pointer_get (&self->pv->state);
+ if (!args.state || !g_atomic_pointer_compare_and_exchange (&self->pv->state, args.state, NULL)) {
+ g_warning ("this enumerator is already running a next operation");
+ return NULL;
+ }
+
+ /* A result from a previous run? */
+ result = extract_result (args.state);
+ if (!result) {
+ args.state->want_objects = 1;
+
+ /* Run the operation and steal away the results */
+ if (_gck_call_sync (NULL, perform_enumerate_next, complete_enumerate_next, &args, cancellable, error)) {
+ if (args.state->results) {
+ g_assert (g_list_length (args.state->results) == 1);
+ result = g_object_ref (args.state->results->data);
+ gck_list_unref_free (args.state->results);
+ args.state->results = NULL;
+ }
+ }
+
+ args.state->want_objects = 0;
}
+ /* Put the state back */
+ if (!g_atomic_pointer_compare_and_exchange (&self->pv->state, NULL, args.state))
+ g_assert_not_reached ();
+
return result;
}
diff --git a/gck/gck-modules.c b/gck/gck-modules.c
index 38ff1fc..fd9e0bd 100644
--- a/gck/gck-modules.c
+++ b/gck/gck-modules.c
@@ -40,6 +40,7 @@
gchar**
gck_modules_list_registered_paths (GError **err)
{
+ GError *error = NULL;
const gchar *name;
gchar *path;
GDir *dir;
@@ -47,12 +48,26 @@ gck_modules_list_registered_paths (GError **err)
g_return_val_if_fail (!err || !*err, NULL);
- dir = g_dir_open (PKCS11_REGISTRY_DIR, 0, err);
- if (dir == NULL)
- return NULL;
+ /* We use this below */
+ if (!err)
+ err = &error;
paths = g_array_new (TRUE, TRUE, sizeof (gchar*));
+ dir = g_dir_open (PKCS11_REGISTRY_DIR, 0, err);
+
+ if (dir == NULL) {
+ if (g_error_matches (*err, G_FILE_ERROR, G_FILE_ERROR_NOENT) ||
+ g_error_matches (*err, G_FILE_ERROR, G_FILE_ERROR_NOTDIR)) {
+ g_clear_error (err);
+ return (gchar**)g_array_free (paths, FALSE);
+ } else {
+ g_array_free (paths, TRUE);
+ g_clear_error (&error);
+ return NULL;
+ }
+ }
+
for (;;) {
name = g_dir_read_name (dir);
if (!name)
diff --git a/gck/gck-session.c b/gck/gck-session.c
index 9813a31..225a812 100644
--- a/gck/gck-session.c
+++ b/gck/gck-session.c
@@ -408,6 +408,34 @@ gck_session_get_info (GckSession *self)
return sessioninfo;
}
+gulong
+gck_session_get_state (GckSession *self)
+{
+ CK_FUNCTION_LIST_PTR funcs;
+ CK_SESSION_INFO info;
+ CK_RV rv;
+
+ g_return_val_if_fail (GCK_IS_SESSION (self), 0);
+ g_return_val_if_fail (GCK_IS_MODULE (self->pv->module), 0);
+
+ g_object_ref (self->pv->module);
+
+ funcs = gck_module_get_functions (self->pv->module);
+ g_return_val_if_fail (funcs, 0);
+
+ memset (&info, 0, sizeof (info));
+ rv = (funcs->C_GetSessionInfo) (self->pv->handle, &info);
+
+ g_object_unref (self->pv->module);
+
+ if (rv != CKR_OK) {
+ g_warning ("couldn't get session info: %s", gck_message_from_rv (rv));
+ return 0;
+ }
+
+ return info.state;
+}
+
/* ---------------------------------------------------------------------------------------------
* INIT PIN
*/
diff --git a/gck/gck.h b/gck/gck.h
index a24cad7..e8a52d9 100644
--- a/gck/gck.h
+++ b/gck/gck.h
@@ -577,6 +577,8 @@ CK_SESSION_HANDLE gck_session_get_handle (GckSession *self);
GckSessionInfo* gck_session_get_info (GckSession *self);
+gulong gck_session_get_state (GckSession *self);
+
gboolean gck_session_init_pin (GckSession *self,
const guchar *pin,
gsize n_pin,
diff --git a/gck/pkcs11.h b/gck/pkcs11.h
index c0981c8..9a34c58 100644
--- a/gck/pkcs11.h
+++ b/gck/pkcs11.h
@@ -23,8 +23,8 @@
/*
* This file is not installed. The one pkcs11/pkcs11.h is installed with the
- * gp11.h header. However while building we included it here, so that relative
- * includes work from within gp11.h
+ * gck.h header. However while building we included it here, so that relative
+ * includes work from within gck.h
*/
#include "pkcs11/pkcs11.h"
diff --git a/gcr/Makefile.am b/gcr/Makefile.am
index 6ded357..dfb5864 100644
--- a/gcr/Makefile.am
+++ b/gcr/Makefile.am
@@ -67,7 +67,7 @@ libgcr_la_LDFLAGS = \
libgcr_la_LIBADD = \
$(top_builddir)/egg/libegg.la \
$(top_builddir)/egg/libegg-entry-buffer.la \
- $(top_builddir)/gp11/libgp11.la \
+ $(top_builddir)/gck/libgck.la \
$(GOBJECT_LIBS) \
$(GLIB_LIBS) \
$(LIBGCRYPT_LIBS) \
diff --git a/gcr/gcr-import-dialog.c b/gcr/gcr-import-dialog.c
index 4c1518b..4db4eb0 100644
--- a/gcr/gcr-import-dialog.c
+++ b/gcr/gcr-import-dialog.c
@@ -61,7 +61,7 @@ populate_slots (GcrImportDialog *self)
GList *modules, *m;
GList *slots, *s;
GtkTreeIter iter;
- GP11TokenInfo *info;
+ GckTokenInfo *info;
gboolean added;
g_assert (GCR_IS_IMPORT_DIALOG (self));
@@ -69,7 +69,7 @@ populate_slots (GcrImportDialog *self)
if (self->pv->slots)
return;
- self->pv->slots = gtk_list_store_new (N_COLUMNS, GP11_TYPE_SLOT, G_TYPE_STRING, G_TYPE_STRING);
+ self->pv->slots = gtk_list_store_new (N_COLUMNS, GCK_TYPE_SLOT, G_TYPE_STRING, G_TYPE_STRING);
gtk_combo_box_set_model (self->pv->combo, GTK_TREE_MODEL (self->pv->slots));
modules = _gcr_get_pkcs11_modules ();
@@ -80,11 +80,11 @@ populate_slots (GcrImportDialog *self)
added = FALSE;
for (m = modules; m; m = g_list_next (m)) {
- g_return_if_fail (GP11_IS_MODULE (m->data));
- slots = gp11_module_get_slots (m->data, TRUE);
+ g_return_if_fail (GCK_IS_MODULE (m->data));
+ slots = gck_module_get_slots (m->data, TRUE);
for (s = slots; s; s = g_list_next (s)) {
- info = gp11_slot_get_token_info (s->data);
+ info = gck_slot_get_token_info (s->data);
if (!(info->flags & CKF_WRITE_PROTECTED)) {
gtk_list_store_append (self->pv->slots, &iter);
gtk_list_store_set (self->pv->slots, &iter,
@@ -95,7 +95,7 @@ populate_slots (GcrImportDialog *self)
}
}
- gp11_list_unref_free (slots);
+ gck_list_unref_free (slots);
}
if (added)
@@ -256,7 +256,7 @@ _gcr_import_dialog_class_init (GcrImportDialogClass *klass)
g_object_class_install_property (gobject_class, PROP_SELECTED_SLOT,
g_param_spec_object ("selected-slot", "Selected Slot", "Selected PKCS#11 slot",
- GP11_TYPE_SLOT, G_PARAM_READWRITE));
+ GCK_TYPE_SLOT, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_PASSWORD,
g_param_spec_pointer ("password", "Password", "Pointer to password",
@@ -303,11 +303,11 @@ _gcr_import_dialog_run (GcrImportDialog *self, GtkWindow *parent)
return ret;
}
-GP11Slot*
+GckSlot*
_gcr_import_dialog_get_selected_slot (GcrImportDialog *self)
{
GtkTreeIter iter;
- GP11Slot *slot;
+ GckSlot *slot;
g_return_val_if_fail (GCR_IMPORT_DIALOG (self), NULL);
@@ -329,10 +329,10 @@ _gcr_import_dialog_get_selected_slot (GcrImportDialog *self)
}
void
-_gcr_import_dialog_set_selected_slot (GcrImportDialog *self, GP11Slot *slot)
+_gcr_import_dialog_set_selected_slot (GcrImportDialog *self, GckSlot *slot)
{
GtkTreeIter iter;
- GP11Slot *it_slot;
+ GckSlot *it_slot;
gboolean matched;
g_return_if_fail (GCR_IMPORT_DIALOG (self));
@@ -347,13 +347,13 @@ _gcr_import_dialog_set_selected_slot (GcrImportDialog *self, GP11Slot *slot)
return;
}
- g_return_if_fail (GP11_IS_SLOT (slot));
+ g_return_if_fail (GCK_IS_SLOT (slot));
matched = FALSE;
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->pv->slots), &iter)) {
do {
gtk_tree_model_get (GTK_TREE_MODEL (self->pv->slots), &iter, COLUMN_SLOT, &it_slot, -1);
- if (gp11_slot_equal (it_slot, slot))
+ if (gck_slot_equal (it_slot, slot))
matched = TRUE;
g_object_unref (it_slot);
} while (!matched && gtk_tree_model_iter_next (GTK_TREE_MODEL (self->pv->slots), &iter));
diff --git a/gcr/gcr-import-dialog.h b/gcr/gcr-import-dialog.h
index a46c5f2..1302564 100644
--- a/gcr/gcr-import-dialog.h
+++ b/gcr/gcr-import-dialog.h
@@ -24,7 +24,7 @@
#include "gcr.h"
-#include "gp11/gp11.h"
+#include "gck/gck.h"
#include <gtk/gtk.h>
@@ -57,10 +57,10 @@ GcrImportDialog* _gcr_import_dialog_new (void);
gboolean _gcr_import_dialog_run (GcrImportDialog *self,
GtkWindow *parent);
-GP11Slot* _gcr_import_dialog_get_selected_slot (GcrImportDialog *self);
+GckSlot* _gcr_import_dialog_get_selected_slot (GcrImportDialog *self);
void _gcr_import_dialog_set_selected_slot (GcrImportDialog *self,
- GP11Slot *slot);
+ GckSlot *slot);
void _gcr_import_dialog_show_selected_slot (GcrImportDialog *self);
diff --git a/gcr/gcr-importer.c b/gcr/gcr-importer.c
index 15053cd..52c823d 100644
--- a/gcr/gcr-importer.c
+++ b/gcr/gcr-importer.c
@@ -43,7 +43,7 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
struct _GcrImporterPrivate {
- GP11Slot *slot;
+ GckSlot *slot;
GcrParser *parser;
GcrImporterPromptBehavior behavior;
@@ -58,7 +58,7 @@ struct _GcrImporterPrivate {
gboolean prompted;
gboolean async;
GByteArray *buffer;
- GP11Session *session;
+ GckSession *session;
GQueue queue;
/* Extra async stuff */
@@ -88,7 +88,7 @@ G_DEFINE_TYPE_WITH_CODE (GcrImporter, gcr_importer, G_TYPE_OBJECT,
static void
cleanup_state_data (GcrImporter *self)
{
- GP11Attributes *attrs;
+ GckAttributes *attrs;
if (self->pv->buffer)
g_byte_array_free (self->pv->buffer, TRUE);
@@ -99,7 +99,7 @@ cleanup_state_data (GcrImporter *self)
self->pv->session = NULL;
while ((attrs = g_queue_pop_head (&self->pv->queue)) != NULL)
- gp11_attributes_unref (attrs);
+ gck_attributes_unref (attrs);
g_assert (g_queue_is_empty (&self->pv->queue));
if (self->pv->input)
@@ -169,7 +169,7 @@ state_cancelled (GcrImporter *self, gboolean async)
*/
static void
-complete_create_object (GcrImporter *self, GP11Object *object, GError *error)
+complete_create_object (GcrImporter *self, GckObject *object, GError *error)
{
if (object == NULL) {
g_propagate_error (&self->pv->error, error);
@@ -186,15 +186,15 @@ static void
on_create_object (GObject *obj, GAsyncResult *res, gpointer user_data)
{
GError *error = NULL;
- GP11Object *object = gp11_session_create_object_finish (GP11_SESSION (obj), res, &error);
+ GckObject *object = gck_session_create_object_finish (GCK_SESSION (obj), res, &error);
complete_create_object (GCR_IMPORTER (user_data), object, error);
}
static void
state_create_object (GcrImporter *self, gboolean async)
{
- GP11Attributes *attrs;
- GP11Object *object;
+ GckAttributes *attrs;
+ GckObject *object;
GError *error = NULL;
/* No more objects */
@@ -207,17 +207,17 @@ state_create_object (GcrImporter *self, gboolean async)
attrs = g_queue_pop_head (&self->pv->queue);
g_assert (attrs);
- gp11_attributes_add_boolean (attrs, CKA_TOKEN, CK_TRUE);
+ gck_attributes_add_boolean (attrs, CKA_TOKEN, CK_TRUE);
if (async) {
- gp11_session_create_object_async (self->pv->session, attrs, self->pv->cancel,
+ gck_session_create_object_async (self->pv->session, attrs, self->pv->cancel,
on_create_object, self);
} else {
- object = gp11_session_create_object_full (self->pv->session, attrs, self->pv->cancel, &error);
+ object = gck_session_create_object (self->pv->session, attrs, self->pv->cancel, &error);
complete_create_object (self, object, error);
}
- gp11_attributes_unref (attrs);
+ gck_attributes_unref (attrs);
}
}
@@ -226,7 +226,7 @@ state_create_object (GcrImporter *self, gboolean async)
*/
static void
-complete_open_session (GcrImporter *self, GP11Session *session, GError *error)
+complete_open_session (GcrImporter *self, GckSession *session, GError *error)
{
if (!session) {
g_propagate_error (&self->pv->error, error);
@@ -241,14 +241,14 @@ static void
on_open_session (GObject *obj, GAsyncResult *res, gpointer user_data)
{
GError *error = NULL;
- GP11Session *session = gp11_slot_open_session_finish (GP11_SLOT (obj), res, &error);
+ GckSession *session = gck_slot_open_session_finish (GCK_SLOT (obj), res, &error);
complete_open_session (GCR_IMPORTER (user_data), session, error);
}
static void
state_open_session (GcrImporter *self, gboolean async)
{
- GP11Session *session;
+ GckSession *session;
GError *error = NULL;
if (!self->pv->slot) {
@@ -258,10 +258,10 @@ state_open_session (GcrImporter *self, gboolean async)
} else {
if (async) {
- gp11_slot_open_session_async (self->pv->slot, CKF_RW_SESSION, NULL, NULL,
+ gck_slot_open_session_async (self->pv->slot, CKF_RW_SESSION, NULL, NULL,
self->pv->cancel, on_open_session, self);
} else {
- session = gp11_slot_open_session_full (self->pv->slot, CKF_RW_SESSION, NULL, NULL,
+ session = gck_slot_open_session_full (self->pv->slot, CKF_RW_SESSION, NULL, NULL,
self->pv->cancel, &error);
complete_open_session (self, session, error);
}
@@ -276,7 +276,7 @@ state_open_session (GcrImporter *self, gboolean async)
*/
static CK_RV
-hacky_perform_initialize_pin (GP11Slot *slot)
+hacky_perform_initialize_pin (GckSlot *slot)
{
CK_FUNCTION_LIST_PTR funcs;
CK_SESSION_HANDLE session;
@@ -293,9 +293,9 @@ hacky_perform_initialize_pin (GP11Slot *slot)
* the gnome-keyring tool.
*/
- funcs = gp11_module_get_functions (gp11_slot_get_module (slot));
+ funcs = gck_module_get_functions (gck_slot_get_module (slot));
g_return_val_if_fail (funcs, CKR_GENERAL_ERROR);
- slot_id = gp11_slot_get_handle (slot);
+ slot_id = gck_slot_get_handle (slot);
rv = funcs->C_OpenSession (slot_id, CKF_RW_SESSION | CKF_SERIAL_SESSION, NULL, NULL, &session);
if (rv != CKR_OK)
@@ -315,7 +315,7 @@ hacky_perform_initialize_pin (GP11Slot *slot)
static void
state_initialize_pin (GcrImporter *self, gboolean async)
{
- GP11TokenInfo *info;
+ GckTokenInfo *info;
gboolean initialize;
CK_RV rv;
@@ -324,16 +324,16 @@ state_initialize_pin (GcrImporter *self, gboolean async)
/* HACK: Doesn't function when async */
if (!async) {
g_return_if_fail (self->pv->slot);
- info = gp11_slot_get_token_info (self->pv->slot);
+ info = gck_slot_get_token_info (self->pv->slot);
g_return_if_fail (info);
initialize = !(info->flags & CKF_USER_PIN_INITIALIZED);
- gp11_token_info_free (info);
+ gck_token_info_free (info);
if (initialize) {
rv = hacky_perform_initialize_pin (self->pv->slot);
if (rv != CKR_OK) {
- g_propagate_error (&self->pv->error, g_error_new (GP11_ERROR, rv, "%s", gp11_message_from_rv (rv)));
+ g_propagate_error (&self->pv->error, g_error_new (GCK_ERROR, rv, "%s", gck_message_from_rv (rv)));
next_state (self, state_failure);
return;
}
@@ -350,7 +350,7 @@ state_initialize_pin (GcrImporter *self, gboolean async)
static void
complete_import_prompt (GcrImporter *self, GcrImportDialog *dialog, gint response)
{
- GP11Slot *slot;
+ GckSlot *slot;
gtk_widget_hide (GTK_WIDGET (dialog));
self->pv->prompted = TRUE;
@@ -471,24 +471,24 @@ prepare_auth_secondary (CK_OBJECT_CLASS klass, const gchar *label)
static void
on_parser_parsed (GcrParser *parser, GcrImporter *self)
{
- GP11Attributes *attrs;
+ GckAttributes *attrs;
g_return_if_fail (GCR_IS_PARSER (parser));
g_return_if_fail (GCR_IS_IMPORTER (self));
attrs = gcr_parser_get_parsed_attributes (parser);
g_return_if_fail (attrs);
- g_queue_push_tail (&self->pv->queue, gp11_attributes_ref (attrs));
+ g_queue_push_tail (&self->pv->queue, gck_attributes_ref (attrs));
}
static gboolean
on_parser_authenticate (GcrParser *parser, gint count, GcrImporter *self)
{
GcrImportDialog *dialog;
- GP11Attributes *attrs;
+ GckAttributes *attrs;
const gchar *password;
gchar *text, *label;
- GP11Slot *slot;
+ GckSlot *slot;
gulong klass;
dialog = _gcr_import_dialog_new ();
@@ -500,9 +500,9 @@ on_parser_authenticate (GcrParser *parser, gint count, GcrImporter *self)
attrs = gcr_parser_get_parsed_attributes (parser);
g_return_val_if_fail (attrs, FALSE);
- if (!gp11_attributes_find_ulong (attrs, CKA_CLASS, &klass))
+ if (!gck_attributes_find_ulong (attrs, CKA_CLASS, &klass))
klass = (gulong)-1;
- if (!gp11_attributes_find_string (attrs, CKA_LABEL, &label))
+ if (!gck_attributes_find_string (attrs, CKA_LABEL, &label))
label = NULL;
text = prepare_auth_secondary (klass, label);
@@ -749,7 +749,7 @@ gcr_importer_class_init (GcrImporterClass *klass)
g_object_class_install_property (gobject_class, PROP_PARSER,
g_param_spec_object ("slot", "Slot", "PKCS#11 slot to import data into",
- GP11_TYPE_SLOT, G_PARAM_READWRITE));
+ GCK_TYPE_SLOT, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_PROMPT_BEHAVIOR,
g_param_spec_int ("prompt-behavior", "Prompt Behavior", "Import Prompt Behavior",
@@ -758,7 +758,7 @@ gcr_importer_class_init (GcrImporterClass *klass)
signals[IMPORTED] = g_signal_new ("imported", GCR_TYPE_IMPORTER,
G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GcrImporterClass, imported),
NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, GP11_TYPE_OBJECT);
+ G_TYPE_NONE, 1, GCK_TYPE_OBJECT);
_gcr_initialize ();
}
@@ -816,7 +816,7 @@ gcr_importer_set_parser (GcrImporter *self, GcrParser *parser)
g_object_notify (G_OBJECT (self), "parser");
}
-GP11Slot*
+GckSlot*
gcr_importer_get_slot (GcrImporter *self)
{
g_return_val_if_fail (GCR_IS_IMPORTER (self), NULL);
@@ -824,7 +824,7 @@ gcr_importer_get_slot (GcrImporter *self)
}
void
-gcr_importer_set_slot (GcrImporter *self, GP11Slot *slot)
+gcr_importer_set_slot (GcrImporter *self, GckSlot *slot)
{
g_return_if_fail (GCR_IS_IMPORTER (self));
diff --git a/gcr/gcr-importer.h b/gcr/gcr-importer.h
index 769dac5..941f2d6 100644
--- a/gcr/gcr-importer.h
+++ b/gcr/gcr-importer.h
@@ -56,7 +56,7 @@ struct _GcrImporterClass {
/* signals */
- void (*imported) (GcrImporter *self, struct _GP11Object *object);
+ void (*imported) (GcrImporter *self, struct _GckObject *object);
};
GType gcr_importer_get_type (void);
@@ -68,10 +68,10 @@ GcrParser* gcr_importer_get_parser (GcrImporter *self
void gcr_importer_set_parser (GcrImporter *self,
GcrParser *parser);
-struct _GP11Slot* gcr_importer_get_slot (GcrImporter *self);
+struct _GckSlot* gcr_importer_get_slot (GcrImporter *self);
void gcr_importer_set_slot (GcrImporter *self,
- struct _GP11Slot *slot);
+ struct _GckSlot *slot);
GcrImporterPromptBehavior gcr_importer_get_prompt_behavior (GcrImporter *self);
diff --git a/gcr/gcr-initializer.h b/gcr/gcr-initializer.h
index aea19cb..727638b 100644
--- a/gcr/gcr-initializer.h
+++ b/gcr/gcr-initializer.h
@@ -50,9 +50,9 @@ struct _GcrTokenManagerClass {
GType gcr_token_manager_get_type (void);
-GcrTokenManager* gcr_token_manager_new (struct _GP11Slot *slot);
+GcrTokenManager* gcr_token_manager_new (struct _GckSlot *slot);
-struct _GP11Slot* gcr_token_manager_get_slot (GcrTokenManager *self);
+struct _GckSlot* gcr_token_manager_get_slot (GcrTokenManager *self);
gboolean gcr_token_manager_initialize (GcrTokenManager *self,
GCancellable *cancel,
diff --git a/gcr/gcr-internal.h b/gcr/gcr-internal.h
index a8a4651..a4630ab 100644
--- a/gcr/gcr-internal.h
+++ b/gcr/gcr-internal.h
@@ -3,8 +3,6 @@
#include "gcr.h"
-#include "gp11/gp11.h"
-
#include <glib.h>
void _gcr_initialize (void);
diff --git a/gcr/gcr-library.c b/gcr/gcr-library.c
index 2eb6a8d..fc5319f 100644
--- a/gcr/gcr-library.c
+++ b/gcr/gcr-library.c
@@ -29,6 +29,8 @@
#include "egg/egg-libgcrypt.h"
#include "egg/egg-secure-memory.h"
+#include <gck/gck.h>
+
#include <gcrypt.h>
static GList *all_modules = NULL;
@@ -112,25 +114,12 @@ void
_gcr_initialize (void)
{
static volatile gsize gcr_initialized = 0;
- GP11Module *module;
- GError *error = NULL;
/* Initialize the libgcrypt library if needed */
egg_libgcrypt_initialize ();
if (g_once_init_enter (&gcr_initialized)) {
-
- /* TODO: This needs reworking for multiple modules */
- module = gp11_module_initialize (PKCS11_MODULE_PATH, NULL, &error);
- if (module) {
- gp11_module_set_pool_sessions (module, TRUE);
- gp11_module_set_auto_authenticate (module, TRUE);
- all_modules = g_list_prepend (all_modules, module);
- } else {
- g_message ("couldn't initialize PKCS#11 module: %s",
- egg_error_message (error));
- }
-
+ all_modules = gck_modules_initialize_registered (GCK_AUTHENTICATE_OBJECTS | GCK_AUTHENTICATE_TOKENS);
g_once_init_leave (&gcr_initialized, 1);
}
}
diff --git a/gcr/gcr-parser.c b/gcr/gcr-parser.c
index 90e3618..2af4d6d 100644
--- a/gcr/gcr-parser.c
+++ b/gcr/gcr-parser.c
@@ -21,7 +21,7 @@
#include "config.h"
-#include "gp11/gp11.h"
+#include "gck/gck.h"
#include "gcr-internal.h"
#include "gcr-marshal.h"
@@ -62,7 +62,7 @@ struct _GcrParserPrivate {
gboolean normal_formats;
GPtrArray *passwords;
- GP11Attributes *parsed_attrs;
+ GckAttributes *parsed_attrs;
const gchar *parsed_desc;
gchar *parsed_label;
};
@@ -174,7 +174,7 @@ parsed_asn1_attribute (GcrParser *self, GNode *asn, const guchar *data, gsize n_
return FALSE;
/* TODO: Convert to USG FROM STD */
- gp11_attributes_add_data (self->pv->parsed_attrs, type, value, n_value);
+ gck_attributes_add_data (self->pv->parsed_attrs, type, value, n_value);
return TRUE;
}
@@ -182,12 +182,12 @@ static void
parsed_clear (GcrParser *self, CK_OBJECT_CLASS klass)
{
if (self->pv->parsed_attrs)
- gp11_attributes_unref (self->pv->parsed_attrs);
+ gck_attributes_unref (self->pv->parsed_attrs);
if (klass == CKO_PRIVATE_KEY)
- self->pv->parsed_attrs = gp11_attributes_new_full ((GP11Allocator)egg_secure_realloc);
+ self->pv->parsed_attrs = gck_attributes_new_full ((GckAllocator)egg_secure_realloc);
else
- self->pv->parsed_attrs = gp11_attributes_new ();
- gp11_attributes_add_ulong (self->pv->parsed_attrs, CKA_CLASS, klass);
+ self->pv->parsed_attrs = gck_attributes_new ();
+ gck_attributes_add_ulong (self->pv->parsed_attrs, CKA_CLASS, klass);
g_free (self->pv->parsed_label);
self->pv->parsed_label = NULL;
@@ -220,7 +220,7 @@ parsed_attribute (GcrParser *self, CK_ATTRIBUTE_TYPE type, gconstpointer data, g
{
g_assert (GCR_IS_PARSER (self));
g_assert (self->pv->parsed_attrs);
- gp11_attributes_add_data (self->pv->parsed_attrs, type, data, n_data);
+ gck_attributes_add_data (self->pv->parsed_attrs, type, data, n_data);
}
static void
@@ -228,7 +228,7 @@ parsed_ulong (GcrParser *self, CK_ATTRIBUTE_TYPE type, gulong value)
{
g_assert (GCR_IS_PARSER (self));
g_assert (self->pv->parsed_attrs);
- gp11_attributes_add_ulong (self->pv->parsed_attrs, type, value);
+ gck_attributes_add_ulong (self->pv->parsed_attrs, type, value);
}
static gint
@@ -444,7 +444,7 @@ parse_der_pkcs8_plain (GcrParser *self, const guchar *data, gsize n_data)
goto done;
ret = GCR_ERROR_FAILURE;
- key_type = GP11_INVALID;
+ key_type = GCK_INVALID;
key_algo = egg_asn1x_get_oid_as_quark (egg_asn1x_node (asn, "privateKeyAlgorithm", "algorithm", NULL));
if (!key_algo)
@@ -454,7 +454,7 @@ parse_der_pkcs8_plain (GcrParser *self, const guchar *data, gsize n_data)
else if (key_algo == OID_PKIX1_DSA)
key_type = CKK_DSA;
- if (key_type == GP11_INVALID) {
+ if (key_type == GCK_INVALID) {
ret = GCR_ERROR_UNRECOGNIZED;
goto done;
}
@@ -1409,7 +1409,7 @@ gcr_parser_dispose (GObject *obj)
gsize i;
if (self->pv->parsed_attrs)
- gp11_attributes_unref (self->pv->parsed_attrs);
+ gck_attributes_unref (self->pv->parsed_attrs);
self->pv->parsed_attrs = NULL;
g_free (self->pv->parsed_label);
@@ -1488,7 +1488,7 @@ gcr_parser_class_init (GcrParserClass *klass)
g_object_class_install_property (gobject_class, PROP_PARSED_ATTRIBUTES,
g_param_spec_boxed ("parsed-attributes", "Parsed Attributes", "Parsed PKCS#11 attributes",
- GP11_TYPE_ATTRIBUTES, G_PARAM_READABLE));
+ GCK_TYPE_ATTRIBUTES, G_PARAM_READABLE));
g_object_class_install_property (gobject_class, PROP_PARSED_LABEL,
g_param_spec_string ("parsed-label", "Parsed Label", "Parsed item label",
@@ -1652,7 +1652,7 @@ gcr_parser_get_parsed_description (GcrParser *self)
return self->pv->parsed_desc;
}
-GP11Attributes*
+GckAttributes*
gcr_parser_get_parsed_attributes (GcrParser *self)
{
g_return_val_if_fail (GCR_IS_PARSER (self), NULL);
diff --git a/gcr/gcr-parser.h b/gcr/gcr-parser.h
index 10d352f..bb006f5 100644
--- a/gcr/gcr-parser.h
+++ b/gcr/gcr-parser.h
@@ -81,7 +81,7 @@ const gchar* gcr_parser_get_parsed_label (GcrParser *self);
const gchar* gcr_parser_get_parsed_description (GcrParser *self);
-struct _GP11Attributes* gcr_parser_get_parsed_attributes (GcrParser *self);
+struct _GckAttributes* gcr_parser_get_parsed_attributes (GcrParser *self);
G_END_DECLS
diff --git a/gcr/gcr-types.h b/gcr/gcr-types.h
index 14c5dec..c593286 100644
--- a/gcr/gcr-types.h
+++ b/gcr/gcr-types.h
@@ -47,10 +47,10 @@ enum {
GCR_FORMAT_PEM_PKCS12
};
-/* Forward declare some of the GP11 objects */
-struct _GP11Attributes;
-struct _GP11Object;
-struct _GP11Slot;
+/* Forward declare some of the Gck objects */
+struct _GckAttributes;
+struct _GckObject;
+struct _GckSlot;
G_END_DECLS
diff --git a/gcr/tests/unit-test-parser.c b/gcr/tests/unit-test-parser.c
index 8022d80..8ed23d0 100644
--- a/gcr/tests/unit-test-parser.c
+++ b/gcr/tests/unit-test-parser.c
@@ -30,7 +30,7 @@
#include "gcr/gcr-parser.h"
-#include "gp11/gp11.h"
+#include "gck/gck.h"
#include <glib.h>
#include <gcrypt.h>
@@ -58,7 +58,7 @@ static const gchar* filedesc = NULL;
static void
parsed_item (GcrParser *par, gpointer user_data)
{
- GP11Attributes *attrs;
+ GckAttributes *attrs;
const gchar *description;
const gchar *label;