diff options
-rw-r--r-- | egg/Makefile.am | 12 | ||||
-rw-r--r-- | gck/Makefile.am | 2 | ||||
-rw-r--r-- | gck/gck-enumerator.c | 60 | ||||
-rw-r--r-- | gck/gck-modules.c | 21 | ||||
-rw-r--r-- | gck/gck-session.c | 28 | ||||
-rw-r--r-- | gck/gck.h | 2 | ||||
-rw-r--r-- | gck/pkcs11.h | 4 | ||||
-rw-r--r-- | gcr/Makefile.am | 2 | ||||
-rw-r--r-- | gcr/gcr-import-dialog.c | 26 | ||||
-rw-r--r-- | gcr/gcr-import-dialog.h | 6 | ||||
-rw-r--r-- | gcr/gcr-importer.c | 70 | ||||
-rw-r--r-- | gcr/gcr-importer.h | 6 | ||||
-rw-r--r-- | gcr/gcr-initializer.h | 4 | ||||
-rw-r--r-- | gcr/gcr-internal.h | 2 | ||||
-rw-r--r-- | gcr/gcr-library.c | 17 | ||||
-rw-r--r-- | gcr/gcr-parser.c | 28 | ||||
-rw-r--r-- | gcr/gcr-parser.h | 2 | ||||
-rw-r--r-- | gcr/gcr-types.h | 8 | ||||
-rw-r--r-- | gcr/tests/unit-test-parser.c | 4 |
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 */ @@ -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; |