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