1 /* 2 * gnome-keyring 3 * 4 * Copyright (C) 2008 Stefan Walter 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as 8 * published by the Free Software Foundation; either version 2.1 of 9 * the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, but 12 * WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this program; if not, see 18 * <http://www.gnu.org/licenses/>. 19 */ 20 21 #ifndef __GKM_OBJECT_H__ 22 #define __GKM_OBJECT_H__ 23 24 #include <glib-object.h> 25 26 #include "pkcs11/pkcs11.h" 27 28 #include "gkm-types.h" 29 30 #define GKM_TYPE_OBJECT (gkm_object_get_type ()) 31 #define GKM_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GKM_TYPE_OBJECT, GkmObject)) 32 #define GKM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GKM_TYPE_OBJECT, GkmObjectClass)) 33 #define GKM_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GKM_TYPE_OBJECT)) 34 #define GKM_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GKM_TYPE_OBJECT)) 35 #define GKM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GKM_TYPE_OBJECT, GkmObjectClass)) 36 37 typedef struct _GkmObjectClass GkmObjectClass; 38 typedef struct _GkmObjectPrivate GkmObjectPrivate; 39 40 struct _GkmObject { 41 GObject parent; 42 GkmObjectPrivate *pv; 43 }; 44 45 struct _GkmObjectClass { 46 GObjectClass parent_class; 47 48 /* signals ------------------------------------------------------------------ */ 49 50 void (*expose_object) (GkmObject *object, gboolean exposed); 51 52 void (*notify_attribute) (GkmObject *object, CK_ATTRIBUTE_TYPE attr_type); 53 54 /* virtual methods --------------------------------------------------------- */ 55 56 CK_RV (*get_attribute) (GkmObject *object, GkmSession *session, 57 CK_ATTRIBUTE *attr); 58 59 void (*set_attribute) (GkmObject *object, GkmSession *session, 60 GkmTransaction *transaction, CK_ATTRIBUTE *attr); 61 62 void (*create_attributes) (GkmObject *object, GkmSession *session, 63 GkmTransaction *transaction, CK_ATTRIBUTE *attrs, CK_ULONG n_attrs); 64 65 CK_RV (*unlock) (GkmObject *self, GkmCredential *cred); 66 }; 67 68 GType gkm_object_get_type (void); 69 70 CK_OBJECT_HANDLE gkm_object_get_handle (GkmObject *self); 71 72 void gkm_object_set_handle (GkmObject *self, 73 CK_OBJECT_HANDLE handle); 74 75 GkmModule* gkm_object_get_module (GkmObject *self); 76 77 GkmManager* gkm_object_get_manager (GkmObject *self); 78 79 const gchar* gkm_object_get_unique (GkmObject *self); 80 81 gboolean gkm_object_is_token (GkmObject *self); 82 83 gboolean gkm_object_is_transient (GkmObject *self); 84 85 void gkm_object_mark_used (GkmObject *self); 86 87 CK_RV gkm_object_unlock (GkmObject *self, 88 GkmCredential *cred); 89 90 void gkm_object_destroy (GkmObject *self, 91 GkmTransaction *transaction); 92 93 gboolean gkm_object_is_exposed (GkmObject *self); 94 95 void gkm_object_expose (GkmObject *self, 96 gboolean expose); 97 98 void gkm_object_expose_full (GkmObject *self, 99 GkmTransaction *transaction, 100 gboolean expose); 101 102 gboolean gkm_object_match (GkmObject *self, 103 GkmSession *session, 104 CK_ATTRIBUTE_PTR attr); 105 106 gboolean gkm_object_match_all (GkmObject *self, 107 GkmSession *session, 108 CK_ATTRIBUTE_PTR attrs, 109 CK_ULONG n_attrs); 110 111 CK_RV gkm_object_get_attribute (GkmObject *self, 112 GkmSession *session, 113 CK_ATTRIBUTE_PTR attr); 114 115 void gkm_object_set_attribute (GkmObject *self, 116 GkmSession *session, 117 GkmTransaction *transaction, 118 CK_ATTRIBUTE_PTR attr); 119 120 void gkm_object_create_attributes (GkmObject *self, 121 GkmSession *session, 122 GkmTransaction *transaction, 123 CK_ATTRIBUTE_PTR attrs, 124 CK_ULONG n_attrs); 125 126 void gkm_object_notify_attribute (GkmObject *self, 127 CK_ATTRIBUTE_TYPE attr_type); 128 129 gboolean gkm_object_get_attribute_boolean (GkmObject *self, 130 GkmSession *session, 131 CK_ATTRIBUTE_TYPE type, 132 gboolean *value); 133 134 gboolean gkm_object_get_attribute_ulong (GkmObject *self, 135 GkmSession *session, 136 CK_ATTRIBUTE_TYPE type, 137 gulong *value); 138 139 void* gkm_object_get_attribute_data (GkmObject *self, 140 GkmSession *session, 141 CK_ATTRIBUTE_TYPE type, 142 gsize *n_data); 143 144 gboolean gkm_object_has_attribute_ulong (GkmObject *self, 145 GkmSession *session, 146 CK_ATTRIBUTE_TYPE type, 147 gulong value); 148 149 gboolean gkm_object_has_attribute_boolean (GkmObject *self, 150 GkmSession *session, 151 CK_ATTRIBUTE_TYPE type, 152 gboolean value); 153 154 #endif /* __GKM_OBJECT_H__ */ 155