1/* GIO - GLib Input, Output and Streaming Library
2 *
3 * Copyright (C) 2010 Collabora, Ltd.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General
16 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
17 *
18 * Author: Stef Walter <stefw@collabora.co.uk>
19 */
20
21#ifndef __G_TLS_DATABASE_H__
22#define __G_TLS_DATABASE_H__
23
24#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
25#error "Only <gio/gio.h> can be included directly."
26#endif
27
28#include <gio/giotypes.h>
29
30G_BEGIN_DECLS
31
32#define G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER "1.3.6.1.5.5.7.3.1"
33#define G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT "1.3.6.1.5.5.7.3.2"
34
35#define G_TYPE_TLS_DATABASE (g_tls_database_get_type ())
36#define G_TLS_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_DATABASE, GTlsDatabase))
37#define G_TLS_DATABASE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_DATABASE, GTlsDatabaseClass))
38#define G_IS_TLS_DATABASE(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_DATABASE))
39#define G_IS_TLS_DATABASE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_DATABASE))
40#define G_TLS_DATABASE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_DATABASE, GTlsDatabaseClass))
41
42typedef struct _GTlsDatabaseClass GTlsDatabaseClass;
43typedef struct _GTlsDatabasePrivate GTlsDatabasePrivate;
44
45struct _GTlsDatabase
46{
47 GObject parent_instance;
48
49 GTlsDatabasePrivate *priv;
50};
51
52struct _GTlsDatabaseClass
53{
54 GObjectClass parent_class;
55
56 /* virtual methods */
57
58 GTlsCertificateFlags (*verify_chain) (GTlsDatabase *self,
59 GTlsCertificate *chain,
60 const gchar *purpose,
61 GSocketConnectable *identity,
62 GTlsInteraction *interaction,
63 GTlsDatabaseVerifyFlags flags,
64 GCancellable *cancellable,
65 GError **error);
66
67 void (*verify_chain_async) (GTlsDatabase *self,
68 GTlsCertificate *chain,
69 const gchar *purpose,
70 GSocketConnectable *identity,
71 GTlsInteraction *interaction,
72 GTlsDatabaseVerifyFlags flags,
73 GCancellable *cancellable,
74 GAsyncReadyCallback callback,
75 gpointer user_data);
76
77 GTlsCertificateFlags (*verify_chain_finish) (GTlsDatabase *self,
78 GAsyncResult *result,
79 GError **error);
80
81 gchar* (*create_certificate_handle) (GTlsDatabase *self,
82 GTlsCertificate *certificate);
83
84 GTlsCertificate* (*lookup_certificate_for_handle) (GTlsDatabase *self,
85 const gchar *handle,
86 GTlsInteraction *interaction,
87 GTlsDatabaseLookupFlags flags,
88 GCancellable *cancellable,
89 GError **error);
90
91 void (*lookup_certificate_for_handle_async) (GTlsDatabase *self,
92 const gchar *handle,
93 GTlsInteraction *interaction,
94 GTlsDatabaseLookupFlags flags,
95 GCancellable *cancellable,
96 GAsyncReadyCallback callback,
97 gpointer user_data);
98
99 GTlsCertificate* (*lookup_certificate_for_handle_finish) (GTlsDatabase *self,
100 GAsyncResult *result,
101 GError **error);
102
103 GTlsCertificate* (*lookup_certificate_issuer) (GTlsDatabase *self,
104 GTlsCertificate *certificate,
105 GTlsInteraction *interaction,
106 GTlsDatabaseLookupFlags flags,
107 GCancellable *cancellable,
108 GError **error);
109
110 void (*lookup_certificate_issuer_async) (GTlsDatabase *self,
111 GTlsCertificate *certificate,
112 GTlsInteraction *interaction,
113 GTlsDatabaseLookupFlags flags,
114 GCancellable *cancellable,
115 GAsyncReadyCallback callback,
116 gpointer user_data);
117
118 GTlsCertificate* (*lookup_certificate_issuer_finish) (GTlsDatabase *self,
119 GAsyncResult *result,
120 GError **error);
121
122 GList* (*lookup_certificates_issued_by) (GTlsDatabase *self,
123 GByteArray *issuer_raw_dn,
124 GTlsInteraction *interaction,
125 GTlsDatabaseLookupFlags flags,
126 GCancellable *cancellable,
127 GError **error);
128
129 void (*lookup_certificates_issued_by_async) (GTlsDatabase *self,
130 GByteArray *issuer_raw_dn,
131 GTlsInteraction *interaction,
132 GTlsDatabaseLookupFlags flags,
133 GCancellable *cancellable,
134 GAsyncReadyCallback callback,
135 gpointer user_data);
136
137 GList* (*lookup_certificates_issued_by_finish) (GTlsDatabase *self,
138 GAsyncResult *result,
139 GError **error);
140
141 /*< private >*/
142 /* Padding for future expansion */
143 gpointer padding[16];
144};
145
146GLIB_AVAILABLE_IN_ALL
147GType g_tls_database_get_type (void) G_GNUC_CONST;
148
149GLIB_AVAILABLE_IN_ALL
150GTlsCertificateFlags g_tls_database_verify_chain (GTlsDatabase *self,
151 GTlsCertificate *chain,
152 const gchar *purpose,
153 GSocketConnectable *identity,
154 GTlsInteraction *interaction,
155 GTlsDatabaseVerifyFlags flags,
156 GCancellable *cancellable,
157 GError **error);
158
159GLIB_AVAILABLE_IN_ALL
160void g_tls_database_verify_chain_async (GTlsDatabase *self,
161 GTlsCertificate *chain,
162 const gchar *purpose,
163 GSocketConnectable *identity,
164 GTlsInteraction *interaction,
165 GTlsDatabaseVerifyFlags flags,
166 GCancellable *cancellable,
167 GAsyncReadyCallback callback,
168 gpointer user_data);
169
170GLIB_AVAILABLE_IN_ALL
171GTlsCertificateFlags g_tls_database_verify_chain_finish (GTlsDatabase *self,
172 GAsyncResult *result,
173 GError **error);
174
175GLIB_AVAILABLE_IN_ALL
176gchar* g_tls_database_create_certificate_handle (GTlsDatabase *self,
177 GTlsCertificate *certificate);
178
179GLIB_AVAILABLE_IN_ALL
180GTlsCertificate* g_tls_database_lookup_certificate_for_handle (GTlsDatabase *self,
181 const gchar *handle,
182 GTlsInteraction *interaction,
183 GTlsDatabaseLookupFlags flags,
184 GCancellable *cancellable,
185 GError **error);
186
187GLIB_AVAILABLE_IN_ALL
188void g_tls_database_lookup_certificate_for_handle_async (GTlsDatabase *self,
189 const gchar *handle,
190 GTlsInteraction *interaction,
191 GTlsDatabaseLookupFlags flags,
192 GCancellable *cancellable,
193 GAsyncReadyCallback callback,
194 gpointer user_data);
195
196GLIB_AVAILABLE_IN_ALL
197GTlsCertificate* g_tls_database_lookup_certificate_for_handle_finish (GTlsDatabase *self,
198 GAsyncResult *result,
199 GError **error);
200
201GLIB_AVAILABLE_IN_ALL
202GTlsCertificate* g_tls_database_lookup_certificate_issuer (GTlsDatabase *self,
203 GTlsCertificate *certificate,
204 GTlsInteraction *interaction,
205 GTlsDatabaseLookupFlags flags,
206 GCancellable *cancellable,
207 GError **error);
208
209GLIB_AVAILABLE_IN_ALL
210void g_tls_database_lookup_certificate_issuer_async (GTlsDatabase *self,
211 GTlsCertificate *certificate,
212 GTlsInteraction *interaction,
213 GTlsDatabaseLookupFlags flags,
214 GCancellable *cancellable,
215 GAsyncReadyCallback callback,
216 gpointer user_data);
217
218GLIB_AVAILABLE_IN_ALL
219GTlsCertificate* g_tls_database_lookup_certificate_issuer_finish (GTlsDatabase *self,
220 GAsyncResult *result,
221 GError **error);
222
223GLIB_AVAILABLE_IN_ALL
224GList* g_tls_database_lookup_certificates_issued_by (GTlsDatabase *self,
225 GByteArray *issuer_raw_dn,
226 GTlsInteraction *interaction,
227 GTlsDatabaseLookupFlags flags,
228 GCancellable *cancellable,
229 GError **error);
230
231GLIB_AVAILABLE_IN_ALL
232void g_tls_database_lookup_certificates_issued_by_async (GTlsDatabase *self,
233 GByteArray *issuer_raw_dn,
234 GTlsInteraction *interaction,
235 GTlsDatabaseLookupFlags flags,
236 GCancellable *cancellable,
237 GAsyncReadyCallback callback,
238 gpointer user_data);
239
240GLIB_AVAILABLE_IN_ALL
241GList* g_tls_database_lookup_certificates_issued_by_finish (GTlsDatabase *self,
242 GAsyncResult *result,
243 GError **error);
244
245G_END_DECLS
246
247#endif /* __G_TLS_DATABASE_H__ */
248