1
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2
/* gck.h - the GObject PKCS#11 wrapper library
4
Copyright (C) 2008, Stefan Walter
6
The Gnome Keyring Library is free software; you can redistribute it and/or
7
modify it under the terms of the GNU Library General Public License as
8
published by the Free Software Foundation; either version 2 of the
9
License, or (at your option) any later version.
11
The Gnome Keyring Library is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
Library General Public License for more details.
16
You should have received a copy of the GNU Library General Public
17
License along with the Gnome Library; see the file COPYING.LIB. If not,
18
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19
Boston, MA 02111-1307, USA.
21
Author: Stef Walter <nielsen@memberwebs.com>
28
#include <glib-object.h>
33
#define __GCK_INSIDE_HEADER__
35
#include <gck/gck-enum-types.h>
40
* To use this API, you need to be prepared for changes to the API,
41
* and add the C flag: -DGCK_API_SUBJECT_TO_CHANGE
44
#ifndef GCK_API_SUBJECT_TO_CHANGE
45
#error "This API has not yet reached stability."
48
#define GCK_VENDOR_CODE 0x47434B00 /* GCK */
50
/* An error code which results from a failure to load the PKCS11 module */
52
GCK_ERROR_MODULE_PROBLEM = (CKR_VENDOR_DEFINED | (GCK_VENDOR_CODE + 1)),
55
#define GCK_ERROR (gck_error_get_quark ())
57
GQuark gck_error_get_quark (void) G_GNUC_CONST;
59
#define GCK_TYPE_LIST (gck_list_get_boxed_type ())
61
GType gck_list_get_boxed_type (void) G_GNUC_CONST;
63
GList* gck_list_ref_copy (GList *reflist);
65
void gck_list_unref_free (GList *reflist);
67
const gchar* gck_message_from_rv (gulong rv);
69
gboolean gck_string_to_chars (guchar *data,
73
gchar* gck_string_from_chars (const guchar *data,
76
typedef gpointer (*GckAllocator) (gpointer data, gsize length);
79
GCK_SESSION_READ_ONLY = 0,
80
GCK_SESSION_READ_WRITE = 1 << 1,
81
GCK_SESSION_LOGIN_USER = 1 << 2,
82
GCK_SESSION_AUTHENTICATE = 1 << 3,
85
typedef struct _GckMechanism GckMechanism;
87
struct _GckMechanism {
89
gconstpointer parameter;
93
typedef struct _GckAttribute GckAttribute;
95
struct _GckAttribute {
101
#define GCK_INVALID G_MAXULONG
103
gboolean gck_value_to_ulong (const guchar *value,
107
gboolean gck_value_to_boolean (const guchar *value,
111
void gck_attribute_init (GckAttribute *attr,
116
void gck_attribute_init_invalid (GckAttribute *attr,
119
void gck_attribute_init_empty (GckAttribute *attr,
122
void gck_attribute_init_boolean (GckAttribute *attr,
126
void gck_attribute_init_date (GckAttribute *attr,
130
void gck_attribute_init_ulong (GckAttribute *attr,
134
void gck_attribute_init_string (GckAttribute *attr,
138
void gck_attribute_init_copy (GckAttribute *dest,
139
const GckAttribute *src);
141
#define GCK_TYPE_ATTRIBUTE (gck_attribute_get_type ())
143
GType gck_attribute_get_type (void) G_GNUC_CONST;
145
GckAttribute* gck_attribute_new (gulong attr_type,
149
GckAttribute* gck_attribute_new_invalid (gulong attr_type);
151
GckAttribute* gck_attribute_new_empty (gulong attr_type);
153
GckAttribute* gck_attribute_new_boolean (gulong attr_type,
156
GckAttribute* gck_attribute_new_date (gulong attr_type,
159
GckAttribute* gck_attribute_new_ulong (gulong attr_type,
162
GckAttribute* gck_attribute_new_string (gulong attr_type,
165
gboolean gck_attribute_is_invalid (const GckAttribute *attr);
167
gboolean gck_attribute_get_boolean (const GckAttribute *attr);
169
gulong gck_attribute_get_ulong (const GckAttribute *attr);
171
gchar* gck_attribute_get_string (const GckAttribute *attr);
173
void gck_attribute_get_date (const GckAttribute *attr,
176
gboolean gck_attribute_equal (gconstpointer attr1,
177
gconstpointer attr2);
179
guint gck_attribute_hash (gconstpointer attr);
181
GckAttribute* gck_attribute_dup (const GckAttribute *attr);
183
void gck_attribute_clear (GckAttribute *attr);
185
void gck_attribute_free (gpointer attr);
187
void gck_attribute_dump (const GckAttribute *attr);
189
typedef struct _GckBuilder GckBuilder;
198
GCK_BUILDER_SECURE_MEMORY = 1,
201
typedef struct _GckAttributes GckAttributes;
203
GckBuilder * gck_builder_new (GckBuilderFlags flags);
205
#define GCK_BUILDER_INIT { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } }
207
GckBuilder * gck_builder_ref (GckBuilder *builder);
209
void gck_builder_unref (gpointer builder);
211
void gck_builder_init (GckBuilder *builder);
213
void gck_builder_init_full (GckBuilder *builder,
214
GckBuilderFlags flags);
216
#define GCK_TYPE_BUILDER (gck_builder_get_type ())
218
GType gck_builder_get_type (void) G_GNUC_CONST;
220
void gck_builder_take_data (GckBuilder *builder,
225
void gck_builder_add_data (GckBuilder *builder,
230
void gck_builder_add_empty (GckBuilder *builder,
233
void gck_builder_add_invalid (GckBuilder *builder,
236
void gck_builder_add_ulong (GckBuilder *builder,
240
void gck_builder_add_boolean (GckBuilder *builder,
244
void gck_builder_add_date (GckBuilder *builder,
248
void gck_builder_add_string (GckBuilder *builder,
252
void gck_builder_add_attribute (GckBuilder *builder,
253
const GckAttribute *attr);
255
void gck_builder_add_all (GckBuilder *builder,
256
GckAttributes *attrs);
258
void gck_builder_add_only (GckBuilder *builder,
259
GckAttributes *attrs,
263
void gck_builder_add_onlyv (GckBuilder *builder,
264
GckAttributes *attrs,
265
const gulong *only_types,
268
void gck_builder_add_except (GckBuilder *builder,
269
GckAttributes *attrs,
273
void gck_builder_add_exceptv (GckBuilder *builder,
274
GckAttributes *attrs,
275
const gulong *except_types,
276
guint n_except_types);
278
void gck_builder_set_data (GckBuilder *builder,
283
void gck_builder_set_empty (GckBuilder *builder,
286
void gck_builder_set_invalid (GckBuilder *builder,
289
void gck_builder_set_ulong (GckBuilder *builder,
293
void gck_builder_set_boolean (GckBuilder *builder,
297
void gck_builder_set_date (GckBuilder *builder,
301
void gck_builder_set_string (GckBuilder *builder,
305
void gck_builder_set_all (GckBuilder *builder,
306
GckAttributes *attrs);
308
const GckAttribute * gck_builder_find (GckBuilder *builder,
311
gboolean gck_builder_find_boolean (GckBuilder *builder,
315
gboolean gck_builder_find_ulong (GckBuilder *builder,
319
gboolean gck_builder_find_string (GckBuilder *builder,
323
gboolean gck_builder_find_date (GckBuilder *builder,
327
GckAttributes * gck_builder_steal (GckBuilder *builder);
329
GckAttributes * gck_builder_end (GckBuilder *builder);
331
GckBuilder * gck_builder_copy (GckBuilder *builder);
333
void gck_builder_clear (GckBuilder *builder);
335
#define GCK_TYPE_ATTRIBUTES (gck_attributes_get_boxed_type ())
337
GType gck_attributes_get_type (void) G_GNUC_CONST;
339
GckAttributes * gck_attributes_new (gulong reserved);
341
GckAttributes * gck_attributes_new_empty (gulong first_type,
344
const GckAttribute * gck_attributes_at (GckAttributes *attrs,
347
const GckAttribute * gck_attributes_find (GckAttributes *attrs,
350
gboolean gck_attributes_find_boolean (GckAttributes *attrs,
354
gboolean gck_attributes_find_ulong (GckAttributes *attrs,
358
gboolean gck_attributes_find_string (GckAttributes *attrs,
362
gboolean gck_attributes_find_date (GckAttributes *attrs,
366
gulong gck_attributes_count (GckAttributes *attrs);
368
GckAttributes * gck_attributes_ref (GckAttributes *attrs);
370
GckAttributes * gck_attributes_ref_sink (GckAttributes *attrs);
372
void gck_attributes_unref (gpointer attrs);
374
gboolean gck_attributes_contains (GckAttributes *attrs,
375
const GckAttribute *match);
377
void gck_attributes_dump (GckAttributes *attrs);
379
gchar * gck_attributes_to_string (GckAttributes *attrs);
381
/* -------------------------------------------------------------------------
384
typedef struct _GckSlot GckSlot;
385
typedef struct _GckModule GckModule;
386
typedef struct _GckSession GckSession;
387
typedef struct _GckObject GckObject;
388
typedef struct _GckObjectCache GckObjectCache;
389
typedef struct _GckEnumerator GckEnumerator;
390
typedef struct _GckUriData GckUriData;
392
/* -------------------------------------------------------------------------
396
typedef struct _GckModuleInfo GckModuleInfo;
398
struct _GckModuleInfo {
399
guint8 pkcs11_version_major;
400
guint8 pkcs11_version_minor;
402
gchar *manufacturer_id;
405
gchar *library_description;
406
guint8 library_version_major;
407
guint8 library_version_minor;
410
#define GCK_TYPE_MODULE_INFO (gck_module_info_get_type ())
412
GType gck_module_info_get_type (void) G_GNUC_CONST;
414
GckModuleInfo * gck_module_info_copy (GckModuleInfo *module_info);
416
void gck_module_info_free (GckModuleInfo *module_info);
418
#define GCK_TYPE_MODULE (gck_module_get_type())
419
#define GCK_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCK_TYPE_MODULE, GckModule))
420
#define GCK_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCK_TYPE_MODULE, GckModule))
421
#define GCK_IS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCK_TYPE_MODULE))
422
#define GCK_IS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCK_TYPE_MODULE))
423
#define GCK_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCK_TYPE_MODULE, GckModuleClass))
425
typedef struct _GckModuleClass GckModuleClass;
426
typedef struct _GckModulePrivate GckModulePrivate;
432
GckModulePrivate *pv;
433
gpointer reserved[4];
436
struct _GckModuleClass {
439
gboolean (*authenticate_slot) (GckModule *self, GckSlot *slot, gchar *label, gchar **password);
441
gboolean (*authenticate_object) (GckModule *self, GckObject *object, gchar *label, gchar **password);
444
gpointer reserved[8];
447
GType gck_module_get_type (void) G_GNUC_CONST;
449
GckModule* gck_module_new (CK_FUNCTION_LIST_PTR funcs);
451
GckModule* gck_module_initialize (const gchar *path,
452
GCancellable *cancellable,
455
void gck_module_initialize_async (const gchar *path,
456
GCancellable *cancellable,
457
GAsyncReadyCallback callback,
460
GckModule * gck_module_initialize_finish (GAsyncResult *result,
463
gboolean gck_module_equal (gconstpointer module1,
464
gconstpointer module2);
466
guint gck_module_hash (gconstpointer module);
468
gboolean gck_module_match (GckModule *self,
471
const gchar* gck_module_get_path (GckModule *self);
473
CK_FUNCTION_LIST_PTR gck_module_get_functions (GckModule *self);
475
GckModuleInfo* gck_module_get_info (GckModule *self);
477
GList* gck_module_get_slots (GckModule *self,
478
gboolean token_present);
480
GList* gck_modules_initialize_registered (GCancellable *cancellable,
483
void gck_modules_initialize_registered_async (GCancellable *cancellable,
484
GAsyncReadyCallback callback,
487
GList * gck_modules_initialize_registered_finish (GAsyncResult *result,
490
GList* gck_modules_get_slots (GList *modules,
491
gboolean token_present);
493
GckEnumerator* gck_modules_enumerate_objects (GList *modules,
494
GckAttributes *attrs,
495
GckSessionOptions session_options);
497
GckSlot* gck_modules_token_for_uri (GList *modules,
501
GList * gck_modules_tokens_for_uri (GList *modules,
505
GckObject* gck_modules_object_for_uri (GList *modules,
507
GckSessionOptions session_options,
510
GList* gck_modules_objects_for_uri (GList *modules,
512
GckSessionOptions session_options,
515
GckEnumerator* gck_modules_enumerate_uri (GList *modules,
517
GckSessionOptions session_options,
521
/* ------------------------------------------------------------------------
525
#define GCK_TYPE_ENUMERATOR (gck_enumerator_get_type())
526
#define GCK_ENUMERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCK_TYPE_ENUMERATOR, GckEnumerator))
527
#define GCK_ENUMERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCK_TYPE_ENUMERATOR, GckEnumerator))
528
#define GCK_IS_ENUMERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCK_TYPE_ENUMERATOR))
529
#define GCK_IS_ENUMERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCK_TYPE_ENUMERATOR))
530
#define GCK_ENUMERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCK_TYPE_ENUMERATOR, GckEnumeratorClass))
532
typedef struct _GckEnumeratorClass GckEnumeratorClass;
533
typedef struct _GckEnumeratorPrivate GckEnumeratorPrivate;
535
struct _GckEnumerator {
539
GckEnumeratorPrivate *pv;
540
gpointer reserved[2];
543
struct _GckEnumeratorClass {
547
gpointer reserved[2];
550
GType gck_enumerator_get_type (void) G_GNUC_CONST;
552
GTlsInteraction * gck_enumerator_get_interaction (GckEnumerator *self);
554
void gck_enumerator_set_interaction (GckEnumerator *self,
555
GTlsInteraction *interaction);
557
GType gck_enumerator_get_object_type (GckEnumerator *self);
559
void gck_enumerator_set_object_type (GckEnumerator *self,
562
GckEnumerator * gck_enumerator_get_chained (GckEnumerator *self);
564
void gck_enumerator_set_chained (GckEnumerator *self,
565
GckEnumerator *chained);
567
GckObject * gck_enumerator_next (GckEnumerator *self,
568
GCancellable *cancellable,
571
GList* gck_enumerator_next_n (GckEnumerator *self,
573
GCancellable *cancellable,
576
void gck_enumerator_next_async (GckEnumerator *self,
578
GCancellable *cancellable,
579
GAsyncReadyCallback callback,
582
GList* gck_enumerator_next_finish (GckEnumerator *self,
583
GAsyncResult *result,
586
/* ------------------------------------------------------------------------
590
typedef struct _GckSlotInfo GckSlotInfo;
592
struct _GckSlotInfo {
593
gchar *slot_description;
594
gchar *manufacturer_id;
596
guint8 hardware_version_major;
597
guint8 hardware_version_minor;
598
guint8 firmware_version_major;
599
guint8 firmware_version_minor;
602
#define GCK_TYPE_SLOT_INFO (gck_slot_info_get_type ())
604
GType gck_slot_info_get_type (void) G_GNUC_CONST;
606
GckSlotInfo * gck_slot_info_copy (GckSlotInfo *slot_info);
608
void gck_slot_info_free (GckSlotInfo *slot_info);
610
typedef struct _GckTokenInfo GckTokenInfo;
612
struct _GckTokenInfo {
614
gchar *manufacturer_id;
616
gchar *serial_number;
618
glong max_session_count;
620
glong max_rw_session_count;
621
glong rw_session_count;
624
glong total_public_memory;
625
glong free_public_memory;
626
glong total_private_memory;
627
glong free_private_memory;
628
guint8 hardware_version_major;
629
guint8 hardware_version_minor;
630
guint8 firmware_version_major;
631
guint8 firmware_version_minor;
635
#define GCK_TYPE_TOKEN_INFO (gck_token_info_get_type ())
637
GType gck_token_info_get_type (void) G_GNUC_CONST;
639
GckTokenInfo * gck_token_info_copy (GckTokenInfo *token_info);
641
void gck_token_info_free (GckTokenInfo *token_info);
643
typedef struct _GckMechanismInfo GckMechanismInfo;
645
struct _GckMechanismInfo {
651
#define GCK_TYPE_MECHANISM_INFO (gck_mechanism_info_get_type ())
653
GType gck_mechanism_info_get_type (void) G_GNUC_CONST;
655
GckMechanismInfo * gck_mechanism_info_copy (GckMechanismInfo *mech_info);
657
void gck_mechanism_info_free (GckMechanismInfo *mech_info);
659
#define gck_mechanisms_length(a) ((a)->len)
661
#define gck_mechanisms_at(a, i) (g_array_index (a, CK_MECHANISM_TYPE, i))
663
gboolean gck_mechanisms_check (GArray *mechanisms,
666
#define GCK_TYPE_SLOT (gck_slot_get_type())
667
#define GCK_SLOT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCK_TYPE_SLOT, GckSlot))
668
#define GCK_SLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCK_TYPE_SLOT, GckSlot))
669
#define GCK_IS_SLOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCK_TYPE_SLOT))
670
#define GCK_IS_SLOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCK_TYPE_SLOT))
671
#define GCK_SLOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCK_TYPE_SLOT, GckSlotClass))
673
typedef struct _GckSlotClass GckSlotClass;
674
typedef struct _GckSlotPrivate GckSlotPrivate;
681
gpointer reserved[4];
684
struct _GckSlotClass {
688
gpointer reserved[9];
691
GType gck_slot_get_type (void) G_GNUC_CONST;
693
gboolean gck_slot_equal (gconstpointer slot1,
694
gconstpointer slot2);
696
guint gck_slot_hash (gconstpointer slot);
698
gboolean gck_slot_match (GckSlot *self,
701
GckSlot* gck_slot_from_handle (GckModule *module,
704
GckModule* gck_slot_get_module (GckSlot *self);
706
gulong gck_slot_get_handle (GckSlot *self);
708
GckSlotInfo* gck_slot_get_info (GckSlot *self);
710
GckTokenInfo* gck_slot_get_token_info (GckSlot *self);
712
GArray * gck_slot_get_mechanisms (GckSlot *self);
714
GckMechanismInfo* gck_slot_get_mechanism_info (GckSlot *self,
717
gboolean gck_slot_has_flags (GckSlot *self,
720
GckSession* gck_slot_open_session (GckSlot *self,
721
GckSessionOptions options,
722
GCancellable *cancellable,
725
GckSession* gck_slot_open_session_full (GckSlot *self,
726
GckSessionOptions options,
730
GCancellable *cancellable,
733
void gck_slot_open_session_async (GckSlot *self,
734
GckSessionOptions options,
735
GCancellable *cancellable,
736
GAsyncReadyCallback callback,
739
void gck_slot_open_session_full_async (GckSlot *self,
740
GckSessionOptions options,
744
GCancellable *cancellable,
745
GAsyncReadyCallback callback,
748
GckSession* gck_slot_open_session_finish (GckSlot *self,
749
GAsyncResult *result,
752
GckEnumerator * gck_slot_enumerate_objects (GckSlot *self,
753
GckAttributes *match,
754
GckSessionOptions options);
756
GckEnumerator* gck_slots_enumerate_objects (GList *slots,
757
GckAttributes *match,
758
GckSessionOptions options);
760
/* ------------------------------------------------------------------------
764
typedef struct _GckSessionInfo GckSessionInfo;
766
struct _GckSessionInfo {
773
#define GCK_TYPE_SESSION_INFO (gck_session_info_get_type ())
775
GType gck_session_info_get_type (void) G_GNUC_CONST;
777
GckSessionInfo * gck_session_info_copy (GckSessionInfo *session_info);
779
void gck_session_info_free (GckSessionInfo *session_info);
781
#define GCK_TYPE_SESSION (gck_session_get_type())
782
#define GCK_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCK_TYPE_SESSION, GckSession))
783
#define GCK_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCK_TYPE_SESSION, GckSession))
784
#define GCK_IS_SESSION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCK_TYPE_SESSION))
785
#define GCK_IS_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCK_TYPE_SESSION))
786
#define GCK_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCK_TYPE_SESSION, GckSessionClass))
788
typedef struct _GckSessionClass GckSessionClass;
789
typedef struct _GckSessionPrivate GckSessionPrivate;
795
GckSessionPrivate *pv;
796
gpointer reserved[4];
799
struct _GckSessionClass {
802
gboolean (*discard_handle) (GckSession *session, CK_SESSION_HANDLE handle);
805
gpointer reserved[8];
808
GType gck_session_get_type (void) G_GNUC_CONST;
810
GckSession * gck_session_from_handle (GckSlot *slot,
811
gulong session_handle,
812
GckSessionOptions options);
814
GckModule* gck_session_get_module (GckSession *self);
816
GckSlot* gck_session_get_slot (GckSession *self);
818
gulong gck_session_get_handle (GckSession *self);
820
GckSessionInfo* gck_session_get_info (GckSession *self);
822
gulong gck_session_get_state (GckSession *self);
824
GckSessionOptions gck_session_get_options (GckSession *self);
826
GTlsInteraction * gck_session_get_interaction (GckSession *self);
828
void gck_session_set_interaction (GckSession *self,
829
GTlsInteraction *interaction);
831
GckSession * gck_session_open (GckSlot *slot,
832
GckSessionOptions options,
833
GTlsInteraction *interaction,
834
GCancellable *cancellable,
837
void gck_session_open_async (GckSlot *slot,
838
GckSessionOptions options,
839
GTlsInteraction *interaction,
840
GCancellable *cancellable,
841
GAsyncReadyCallback callback,
844
GckSession * gck_session_open_finish (GAsyncResult *result,
847
gboolean gck_session_init_pin (GckSession *self,
850
GCancellable *cancellable,
853
void gck_session_init_pin_async (GckSession *self,
856
GCancellable *cancellable,
857
GAsyncReadyCallback callback,
860
gboolean gck_session_init_pin_finish (GckSession *self,
861
GAsyncResult *result,
864
gboolean gck_session_set_pin (GckSession *self,
865
const guchar *old_pin,
867
const guchar *new_pin,
869
GCancellable *cancellable,
872
void gck_session_set_pin_async (GckSession *self,
873
const guchar *old_pin,
875
const guchar *new_pin,
877
GCancellable *cancellable,
878
GAsyncReadyCallback callback,
881
gboolean gck_session_set_pin_finish (GckSession *self,
882
GAsyncResult *result,
885
gboolean gck_session_login (GckSession *self,
889
GCancellable *cancellable,
892
void gck_session_login_async (GckSession *self,
896
GCancellable *cancellable,
897
GAsyncReadyCallback callback,
900
gboolean gck_session_login_finish (GckSession *self,
901
GAsyncResult *result,
904
gboolean gck_session_login_interactive (GckSession *self,
906
GTlsInteraction *interaction,
907
GCancellable *cancellable,
910
void gck_session_login_interactive_async (GckSession *self,
912
GTlsInteraction *interaction,
913
GCancellable *cancellable,
914
GAsyncReadyCallback callback,
917
gboolean gck_session_login_interactive_finish (GckSession *self,
918
GAsyncResult *result,
921
gboolean gck_session_logout (GckSession *self,
922
GCancellable *cancellable,
925
void gck_session_logout_async (GckSession *self,
926
GCancellable *cancellable,
927
GAsyncReadyCallback callback,
930
gboolean gck_session_logout_finish (GckSession *self,
931
GAsyncResult *result,
934
GckObject* gck_session_create_object (GckSession *self,
935
GckAttributes *attrs,
936
GCancellable *cancellable,
939
void gck_session_create_object_async (GckSession *self,
940
GckAttributes *attrs,
941
GCancellable *cancellable,
942
GAsyncReadyCallback callback,
945
GckObject* gck_session_create_object_finish (GckSession *self,
946
GAsyncResult *result,
949
GList* gck_session_find_objects (GckSession *self,
950
GckAttributes *match,
951
GCancellable *cancellable,
954
void gck_session_find_objects_async (GckSession *self,
955
GckAttributes *match,
956
GCancellable *cancellable,
957
GAsyncReadyCallback callback,
960
GList* gck_session_find_objects_finish (GckSession *self,
961
GAsyncResult *result,
964
gulong * gck_session_find_handles (GckSession *self,
965
GckAttributes *match,
966
GCancellable *cancellable,
970
void gck_session_find_handles_async (GckSession *self,
971
GckAttributes *match,
972
GCancellable *cancellable,
973
GAsyncReadyCallback callback,
976
gulong * gck_session_find_handles_finish (GckSession *self,
977
GAsyncResult *result,
981
GckEnumerator * gck_session_enumerate_objects (GckSession *self,
982
GckAttributes *match);
984
gboolean gck_session_generate_key_pair (GckSession *self,
986
GckAttributes *public_attrs,
987
GckAttributes *private_attrs,
988
GckObject **public_key,
989
GckObject **private_key,
990
GCancellable *cancellable,
993
gboolean gck_session_generate_key_pair_full (GckSession *self,
994
GckMechanism *mechanism,
995
GckAttributes *public_attrs,
996
GckAttributes *private_attrs,
997
GckObject **public_key,
998
GckObject **private_key,
999
GCancellable *cancellable,
1002
void gck_session_generate_key_pair_async (GckSession *self,
1003
GckMechanism *mechanism,
1004
GckAttributes *public_attrs,
1005
GckAttributes *private_attrs,
1006
GCancellable *cancellable,
1007
GAsyncReadyCallback callback,
1008
gpointer user_data);
1010
gboolean gck_session_generate_key_pair_finish (GckSession *self,
1011
GAsyncResult *result,
1012
GckObject **public_key,
1013
GckObject **private_key,
1016
guchar* gck_session_encrypt (GckSession *self,
1019
const guchar *input,
1022
GCancellable *cancellable,
1025
guchar* gck_session_encrypt_full (GckSession *self,
1027
GckMechanism *mechanism,
1028
const guchar *input,
1031
GCancellable *cancellable,
1034
void gck_session_encrypt_async (GckSession *self,
1036
GckMechanism *mechanism,
1037
const guchar *input,
1039
GCancellable *cancellable,
1040
GAsyncReadyCallback callback,
1041
gpointer user_data);
1043
guchar* gck_session_encrypt_finish (GckSession *self,
1044
GAsyncResult *result,
1048
guchar* gck_session_decrypt (GckSession *self,
1051
const guchar *input,
1054
GCancellable *cancellable,
1057
guchar* gck_session_decrypt_full (GckSession *self,
1059
GckMechanism *mechanism,
1060
const guchar *input,
1063
GCancellable *cancellable,
1066
void gck_session_decrypt_async (GckSession *self,
1068
GckMechanism *mechanism,
1069
const guchar *input,
1071
GCancellable *cancellable,
1072
GAsyncReadyCallback callback,
1073
gpointer user_data);
1075
guchar* gck_session_decrypt_finish (GckSession *self,
1076
GAsyncResult *result,
1080
guchar* gck_session_sign (GckSession *self,
1083
const guchar *input,
1086
GCancellable *cancellable,
1089
guchar* gck_session_sign_full (GckSession *self,
1091
GckMechanism *mechanism,
1092
const guchar *input,
1095
GCancellable *cancellable,
1098
void gck_session_sign_async (GckSession *self,
1100
GckMechanism *mechanism,
1101
const guchar *input,
1103
GCancellable *cancellable,
1104
GAsyncReadyCallback callback,
1105
gpointer user_data);
1107
guchar* gck_session_sign_finish (GckSession *self,
1108
GAsyncResult *result,
1112
gboolean gck_session_verify (GckSession *self,
1115
const guchar *input,
1117
const guchar *signature,
1119
GCancellable *cancellable,
1122
gboolean gck_session_verify_full (GckSession *self,
1124
GckMechanism *mechanism,
1125
const guchar *input,
1127
const guchar *signature,
1129
GCancellable *cancellable,
1132
void gck_session_verify_async (GckSession *self,
1134
GckMechanism *mechanism,
1135
const guchar *input,
1137
const guchar *signature,
1139
GCancellable *cancellable,
1140
GAsyncReadyCallback callback,
1141
gpointer user_data);
1143
gboolean gck_session_verify_finish (GckSession *self,
1144
GAsyncResult *result,
1147
guchar * gck_session_wrap_key (GckSession *self,
1152
GCancellable *cancellable,
1155
guchar * gck_session_wrap_key_full (GckSession *self,
1157
GckMechanism *mechanism,
1160
GCancellable *cancellable,
1163
void gck_session_wrap_key_async (GckSession *self,
1165
GckMechanism *mechanism,
1167
GCancellable *cancellable,
1168
GAsyncReadyCallback callback,
1169
gpointer user_data);
1171
guchar * gck_session_wrap_key_finish (GckSession *self,
1172
GAsyncResult *result,
1176
GckObject* gck_session_unwrap_key (GckSession *self,
1179
const guchar *input,
1181
GckAttributes *attrs,
1182
GCancellable *cancellable,
1185
GckObject* gck_session_unwrap_key_full (GckSession *self,
1187
GckMechanism *mechanism,
1188
const guchar *input,
1190
GckAttributes *attrs,
1191
GCancellable *cancellable,
1194
void gck_session_unwrap_key_async (GckSession *self,
1196
GckMechanism *mechanism,
1197
const guchar *input,
1199
GckAttributes *attrs,
1200
GCancellable *cancellable,
1201
GAsyncReadyCallback callback,
1202
gpointer user_data);
1204
GckObject* gck_session_unwrap_key_finish (GckSession *self,
1205
GAsyncResult *result,
1208
GckObject* gck_session_derive_key (GckSession *self,
1211
GckAttributes *attrs,
1212
GCancellable *cancellable,
1215
GckObject* gck_session_derive_key_full (GckSession *self,
1217
GckMechanism *mechanism,
1218
GckAttributes *attrs,
1219
GCancellable *cancellable,
1222
void gck_session_derive_key_async (GckSession *self,
1224
GckMechanism *mechanism,
1225
GckAttributes *attrs,
1226
GCancellable *cancellable,
1227
GAsyncReadyCallback callback,
1228
gpointer user_data);
1230
GckObject* gck_session_derive_key_finish (GckSession *self,
1231
GAsyncResult *result,
1234
/* ------------------------------------------------------------------------
1238
#define GCK_TYPE_OBJECT (gck_object_get_type())
1239
#define GCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GCK_TYPE_OBJECT, GckObject))
1240
#define GCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GCK_TYPE_OBJECT, GckObjectClass))
1241
#define GCK_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GCK_TYPE_OBJECT))
1242
#define GCK_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GCK_TYPE_OBJECT))
1243
#define GCK_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GCK_TYPE_OBJECT, GckObjectClass))
1245
typedef struct _GckObjectClass GckObjectClass;
1246
typedef struct _GckObjectPrivate GckObjectPrivate;
1252
GckObjectPrivate *pv;
1253
gpointer reserved[4];
1256
struct _GckObjectClass {
1257
GObjectClass parent;
1260
gpointer reserved[8];
1263
GType gck_object_get_type (void) G_GNUC_CONST;
1265
GckObject * gck_object_from_handle (GckSession *session,
1266
gulong object_handle);
1268
GList* gck_objects_from_handle_array (GckSession *session,
1269
gulong *object_handles,
1270
gulong n_object_handles);
1272
gboolean gck_object_equal (gconstpointer object1,
1273
gconstpointer object2);
1275
guint gck_object_hash (gconstpointer object);
1277
GckModule* gck_object_get_module (GckObject *self);
1279
gulong gck_object_get_handle (GckObject *self);
1281
GckSession* gck_object_get_session (GckObject *self);
1283
gboolean gck_object_destroy (GckObject *self,
1284
GCancellable *cancellable,
1287
void gck_object_destroy_async (GckObject *self,
1288
GCancellable *cancellable,
1289
GAsyncReadyCallback callback,
1290
gpointer user_data);
1292
gboolean gck_object_destroy_finish (GckObject *self,
1293
GAsyncResult *result,
1296
gboolean gck_object_set (GckObject *self,
1297
GckAttributes *attrs,
1298
GCancellable *cancellable,
1301
void gck_object_set_async (GckObject *self,
1302
GckAttributes *attrs,
1303
GCancellable *cancellable,
1304
GAsyncReadyCallback callback,
1305
gpointer user_data);
1307
gboolean gck_object_set_finish (GckObject *self,
1308
GAsyncResult *result,
1311
GckAttributes* gck_object_get (GckObject *self,
1312
GCancellable *cancellable,
1316
GckAttributes* gck_object_get_full (GckObject *self,
1317
const gulong *attr_types,
1319
GCancellable *cancellable,
1322
void gck_object_get_async (GckObject *self,
1323
const gulong *attr_types,
1325
GCancellable *cancellable,
1326
GAsyncReadyCallback callback,
1327
gpointer user_data);
1329
GckAttributes* gck_object_get_finish (GckObject *self,
1330
GAsyncResult *result,
1333
guchar * gck_object_get_data (GckObject *self,
1335
GCancellable *cancellable,
1339
guchar * gck_object_get_data_full (GckObject *self,
1341
GckAllocator allocator,
1342
GCancellable *cancellable,
1346
void gck_object_get_data_async (GckObject *self,
1348
GckAllocator allocator,
1349
GCancellable *cancellable,
1350
GAsyncReadyCallback callback,
1351
gpointer user_data);
1353
guchar * gck_object_get_data_finish (GckObject *self,
1354
GAsyncResult *result,
1358
gboolean gck_object_set_template (GckObject *self,
1360
GckAttributes *attrs,
1361
GCancellable *cancellable,
1364
void gck_object_set_template_async (GckObject *self,
1366
GckAttributes *attrs,
1367
GCancellable *cancellable,
1368
GAsyncReadyCallback callback,
1369
gpointer user_data);
1371
gboolean gck_object_set_template_finish (GckObject *self,
1372
GAsyncResult *result,
1375
GckAttributes* gck_object_get_template (GckObject *self,
1377
GCancellable *cancellable,
1380
void gck_object_get_template_async (GckObject *self,
1382
GCancellable *cancellable,
1383
GAsyncReadyCallback callback,
1384
gpointer user_data);
1386
GckAttributes* gck_object_get_template_finish (GckObject *self,
1387
GAsyncResult *result,
1390
/* ------------------------------------------------------------------------
1394
#define GCK_TYPE_OBJECT_CACHE (gck_object_cache_get_type ())
1395
#define GCK_OBJECT_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCK_TYPE_OBJECT_CACHE, GckObjectCache))
1396
#define GCK_IS_OBJECT_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCK_TYPE_OBJECT_CACHE))
1397
#define GCK_OBJECT_CACHE_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GCK_TYPE_OBJECT_CACHE, GckObjectCacheIface))
1399
typedef struct _GckObjectCacheIface GckObjectCacheIface;
1401
struct _GckObjectCacheIface {
1402
GTypeInterface interface;
1404
const gulong * default_types;
1405
gint n_default_types;
1407
void (* fill) (GckObjectCache *object,
1408
GckAttributes *attrs);
1411
gpointer reserved[6];
1414
GType gck_object_cache_get_type (void) G_GNUC_CONST;
1416
GckAttributes * gck_object_cache_get_attributes (GckObjectCache *object);
1418
void gck_object_cache_set_attributes (GckObjectCache *object,
1419
GckAttributes *attrs);
1421
void gck_object_cache_fill (GckObjectCache *object,
1422
GckAttributes *attrs);
1424
gboolean gck_object_cache_update (GckObjectCache *object,
1425
const gulong *attr_types,
1427
GCancellable *cancellable,
1430
void gck_object_cache_update_async (GckObjectCache *object,
1431
const gulong *attr_types,
1433
GCancellable *cancellable,
1434
GAsyncReadyCallback callback,
1435
gpointer user_data);
1437
gboolean gck_object_cache_update_finish (GckObjectCache *object,
1438
GAsyncResult *result,
1441
GckAttributes * gck_object_cache_lookup (GckObject *object,
1442
const gulong *attr_types,
1444
GCancellable *cancellable,
1447
void gck_object_cache_lookup_async (GckObject *object,
1448
const gulong *attr_types,
1450
GCancellable *cancellable,
1451
GAsyncReadyCallback callback,
1452
gpointer user_data);
1454
GckAttributes * gck_object_cache_lookup_finish (GckObject *object,
1455
GAsyncResult *result,
1458
/* ------------------------------------------------------------------------
1462
#define GCK_TYPE_PASSWORD (gck_password_get_type ())
1463
#define GCK_PASSWORD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCK_TYPE_PASSWORD, GckPassword))
1464
#define GCK_PASSWORD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GCK_TYPE_PASSWORD, GckPassword))
1465
#define GCK_IS_PASSWORD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCK_TYPE_PASSWORD))
1466
#define GCK_IS_PASSWORD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GCK_TYPE_PASSWORD))
1467
#define GCK_PASSWORD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GCK_TYPE_PASSWORD, GckPasswordClass))
1469
typedef struct _GckPassword GckPassword;
1470
typedef struct _GckPasswordClass GckPasswordClass;
1471
typedef struct _GckPasswordPrivate GckPasswordPrivate;
1473
struct _GckPassword {
1474
GTlsPassword parent;
1477
GckPasswordPrivate *pv;
1478
gpointer reserved[4];
1481
struct _GckPasswordClass {
1482
GTlsPasswordClass parent;
1485
gpointer reserved[4];
1488
GType gck_password_get_type (void) G_GNUC_CONST;
1490
GckModule * gck_password_get_module (GckPassword *self);
1492
GckSlot * gck_password_get_token (GckPassword *self);
1494
GckObject * gck_password_get_key (GckPassword *self);
1496
/* ----------------------------------------------------------------------------
1501
GCK_URI_BAD_SCHEME = 1,
1502
GCK_URI_BAD_ENCODING,
1504
GCK_URI_BAD_VERSION,
1508
/* WARNING: Don't modify these without syncing with p11-kit */
1510
GCK_URI_FOR_OBJECT = (1 << 1),
1511
GCK_URI_FOR_TOKEN = (1 << 2),
1512
GCK_URI_FOR_MODULE = (1 << 3),
1513
GCK_URI_WITH_VERSION = (1 << 4),
1514
GCK_URI_FOR_ANY = 0x0000FFFF,
1517
#define GCK_URI_FOR_MODULE_WITH_VERSION (GCK_URI_WITH_VERSION | GCK_URI_FOR_MODULE)
1519
#define GCK_URI_FOR_OBJECT_ON_TOKEN (GCK_URI_FOR_OBJECT | GCK_URI_FOR_TOKEN)
1521
#define GCK_URI_FOR_OBJECT_ON_TOKEN_AND_MODULE (GCK_URI_FOR_OBJECT_ON_TOKEN | GCK_URI_FOR_MODULE)
1523
struct _GckUriData {
1524
gboolean any_unrecognized;
1525
GckModuleInfo *module_info;
1526
GckTokenInfo *token_info;
1527
GckAttributes *attributes;
1533
#define GCK_URI_ERROR (gck_uri_error_get_quark ())
1535
GQuark gck_uri_error_get_quark (void) G_GNUC_CONST;
1537
GckUriData* gck_uri_data_new (void);
1539
gchar* gck_uri_build (GckUriData *uri_data,
1542
GckUriData* gck_uri_parse (const gchar *string,
1546
#define GCK_URI_DATA_TYPE (gck_uri_data_get_type ())
1548
GType gck_uri_data_get_type (void) G_GNUC_CONST;
1550
GckUriData * gck_uri_data_copy (GckUriData *uri_data);
1552
void gck_uri_data_free (GckUriData *uri_data);
1556
#include "gck-deprecated.h"
1558
#undef __GCK_INSIDE_HEADER__