Added functions to export structures in an allocated buffer.
[gnutls.git] / lib / includes / gnutls / openpgp.h
blobbed810168be1668225678743a92ccab83e38255a
1 /*
2 * Copyright (C) 2003-2012 Free Software Foundation, Inc.
4 * Author: Nikos Mavrogiannopoulos
6 * This file is part of GnuTLS.
8 * The GnuTLS is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 3 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>
23 /* This file contains the types and prototypes for the OpenPGP
24 * key and private key parsing functions.
27 #ifndef GNUTLS_OPENPGP_H
28 #define GNUTLS_OPENPGP_H
30 #include <gnutls/gnutls.h>
32 #ifdef __cplusplus
33 extern "C"
35 #endif
37 /* Openpgp certificate stuff
40 /**
41 * gnutls_openpgp_crt_fmt_t:
42 * @GNUTLS_OPENPGP_FMT_RAW: OpenPGP certificate in raw format.
43 * @GNUTLS_OPENPGP_FMT_BASE64: OpenPGP certificate in base64 format.
45 * Enumeration of different OpenPGP key formats.
47 typedef enum gnutls_openpgp_crt_fmt
49 GNUTLS_OPENPGP_FMT_RAW,
50 GNUTLS_OPENPGP_FMT_BASE64
51 } gnutls_openpgp_crt_fmt_t;
53 #define GNUTLS_OPENPGP_KEYID_SIZE 8
54 typedef unsigned char gnutls_openpgp_keyid_t[GNUTLS_OPENPGP_KEYID_SIZE];
56 /* gnutls_openpgp_cert_t should be defined in gnutls.h
59 /* initializes the memory for gnutls_openpgp_crt_t struct */
60 int gnutls_openpgp_crt_init (gnutls_openpgp_crt_t * key);
61 /* frees all memory */
62 void gnutls_openpgp_crt_deinit (gnutls_openpgp_crt_t key);
64 int gnutls_openpgp_crt_import (gnutls_openpgp_crt_t key,
65 const gnutls_datum_t * data,
66 gnutls_openpgp_crt_fmt_t format);
67 int gnutls_openpgp_crt_export (gnutls_openpgp_crt_t key,
68 gnutls_openpgp_crt_fmt_t format,
69 void *output_data,
70 size_t * output_data_size);
71 int gnutls_openpgp_crt_export2 (gnutls_openpgp_crt_t key,
72 gnutls_openpgp_crt_fmt_t format,
73 gnutls_datum_t * out);
75 int gnutls_openpgp_crt_print (gnutls_openpgp_crt_t cert,
76 gnutls_certificate_print_formats_t format,
77 gnutls_datum_t * out);
79 /* The key_usage flags are defined in gnutls.h. They are
80 * the GNUTLS_KEY_* definitions.
82 int gnutls_openpgp_crt_get_key_usage (gnutls_openpgp_crt_t key,
83 unsigned int *key_usage);
84 int gnutls_openpgp_crt_get_fingerprint (gnutls_openpgp_crt_t key, void *fpr,
85 size_t * fprlen);
86 int gnutls_openpgp_crt_get_subkey_fingerprint (gnutls_openpgp_crt_t key,
87 unsigned int idx,
88 void *fpr, size_t * fprlen);
90 int gnutls_openpgp_crt_get_name (gnutls_openpgp_crt_t key,
91 int idx, char *buf, size_t * sizeof_buf);
93 gnutls_pk_algorithm_t
94 gnutls_openpgp_crt_get_pk_algorithm (gnutls_openpgp_crt_t key,
95 unsigned int *bits);
97 int gnutls_openpgp_crt_get_version (gnutls_openpgp_crt_t key);
99 time_t gnutls_openpgp_crt_get_creation_time (gnutls_openpgp_crt_t key);
100 time_t gnutls_openpgp_crt_get_expiration_time (gnutls_openpgp_crt_t key);
102 int gnutls_openpgp_crt_get_key_id (gnutls_openpgp_crt_t key,
103 gnutls_openpgp_keyid_t keyid);
105 int gnutls_openpgp_crt_check_hostname (gnutls_openpgp_crt_t key,
106 const char *hostname);
108 int gnutls_openpgp_crt_get_revoked_status (gnutls_openpgp_crt_t key);
110 int gnutls_openpgp_crt_get_subkey_count (gnutls_openpgp_crt_t key);
111 int gnutls_openpgp_crt_get_subkey_idx (gnutls_openpgp_crt_t key,
112 const gnutls_openpgp_keyid_t keyid);
113 int gnutls_openpgp_crt_get_subkey_revoked_status (gnutls_openpgp_crt_t key,
114 unsigned int idx);
115 gnutls_pk_algorithm_t
116 gnutls_openpgp_crt_get_subkey_pk_algorithm (gnutls_openpgp_crt_t key,
117 unsigned int idx,
118 unsigned int *bits);
119 time_t gnutls_openpgp_crt_get_subkey_creation_time (gnutls_openpgp_crt_t
120 key, unsigned int idx);
121 time_t gnutls_openpgp_crt_get_subkey_expiration_time (gnutls_openpgp_crt_t
122 key,
123 unsigned int idx);
124 int gnutls_openpgp_crt_get_subkey_id (gnutls_openpgp_crt_t key,
125 unsigned int idx,
126 gnutls_openpgp_keyid_t keyid);
127 int gnutls_openpgp_crt_get_subkey_usage (gnutls_openpgp_crt_t key,
128 unsigned int idx,
129 unsigned int *key_usage);
131 int gnutls_openpgp_crt_get_subkey_pk_dsa_raw (gnutls_openpgp_crt_t crt,
132 unsigned int idx,
133 gnutls_datum_t * p,
134 gnutls_datum_t * q,
135 gnutls_datum_t * g,
136 gnutls_datum_t * y);
137 int gnutls_openpgp_crt_get_subkey_pk_rsa_raw (gnutls_openpgp_crt_t crt,
138 unsigned int idx,
139 gnutls_datum_t * m,
140 gnutls_datum_t * e);
141 int gnutls_openpgp_crt_get_pk_dsa_raw (gnutls_openpgp_crt_t crt,
142 gnutls_datum_t * p,
143 gnutls_datum_t * q,
144 gnutls_datum_t * g,
145 gnutls_datum_t * y);
146 int gnutls_openpgp_crt_get_pk_rsa_raw (gnutls_openpgp_crt_t crt,
147 gnutls_datum_t * m,
148 gnutls_datum_t * e);
150 int gnutls_openpgp_crt_get_preferred_key_id (gnutls_openpgp_crt_t key,
151 gnutls_openpgp_keyid_t keyid);
153 gnutls_openpgp_crt_set_preferred_key_id (gnutls_openpgp_crt_t key,
154 const gnutls_openpgp_keyid_t
155 keyid);
157 /* privkey stuff.
159 int gnutls_openpgp_privkey_init (gnutls_openpgp_privkey_t * key);
160 void gnutls_openpgp_privkey_deinit (gnutls_openpgp_privkey_t key);
161 gnutls_pk_algorithm_t
162 gnutls_openpgp_privkey_get_pk_algorithm (gnutls_openpgp_privkey_t key,
163 unsigned int *bits);
165 gnutls_sec_param_t
166 gnutls_openpgp_privkey_sec_param (gnutls_openpgp_privkey_t key);
167 int gnutls_openpgp_privkey_import (gnutls_openpgp_privkey_t key,
168 const gnutls_datum_t * data,
169 gnutls_openpgp_crt_fmt_t format,
170 const char *password,
171 unsigned int flags);
173 int gnutls_openpgp_privkey_get_fingerprint (gnutls_openpgp_privkey_t key,
174 void *fpr, size_t * fprlen);
175 int gnutls_openpgp_privkey_get_subkey_fingerprint (gnutls_openpgp_privkey_t
176 key, unsigned int idx,
177 void *fpr,
178 size_t * fprlen);
179 int gnutls_openpgp_privkey_get_key_id (gnutls_openpgp_privkey_t key,
180 gnutls_openpgp_keyid_t keyid);
181 int gnutls_openpgp_privkey_get_subkey_count (gnutls_openpgp_privkey_t key);
182 int gnutls_openpgp_privkey_get_subkey_idx (gnutls_openpgp_privkey_t key,
183 const gnutls_openpgp_keyid_t
184 keyid);
187 gnutls_openpgp_privkey_get_subkey_revoked_status (gnutls_openpgp_privkey_t
188 key, unsigned int idx);
190 int gnutls_openpgp_privkey_get_revoked_status (gnutls_openpgp_privkey_t
191 key);
193 gnutls_pk_algorithm_t
194 gnutls_openpgp_privkey_get_subkey_pk_algorithm (gnutls_openpgp_privkey_t
195 key, unsigned int idx,
196 unsigned int *bits);
198 time_t
199 gnutls_openpgp_privkey_get_subkey_expiration_time
200 (gnutls_openpgp_privkey_t key, unsigned int idx);
202 int gnutls_openpgp_privkey_get_subkey_id (gnutls_openpgp_privkey_t key,
203 unsigned int idx,
204 gnutls_openpgp_keyid_t keyid);
206 time_t
207 gnutls_openpgp_privkey_get_subkey_creation_time (gnutls_openpgp_privkey_t
208 key, unsigned int idx);
211 gnutls_openpgp_privkey_export_subkey_dsa_raw (gnutls_openpgp_privkey_t
212 pkey, unsigned int idx,
213 gnutls_datum_t * p,
214 gnutls_datum_t * q,
215 gnutls_datum_t * g,
216 gnutls_datum_t * y,
217 gnutls_datum_t * x);
218 int gnutls_openpgp_privkey_export_subkey_rsa_raw (gnutls_openpgp_privkey_t
219 pkey, unsigned int idx,
220 gnutls_datum_t * m,
221 gnutls_datum_t * e,
222 gnutls_datum_t * d,
223 gnutls_datum_t * p,
224 gnutls_datum_t * q,
225 gnutls_datum_t * u);
227 int gnutls_openpgp_privkey_export_dsa_raw (gnutls_openpgp_privkey_t pkey,
228 gnutls_datum_t * p,
229 gnutls_datum_t * q,
230 gnutls_datum_t * g,
231 gnutls_datum_t * y,
232 gnutls_datum_t * x);
233 int gnutls_openpgp_privkey_export_rsa_raw (gnutls_openpgp_privkey_t pkey,
234 gnutls_datum_t * m,
235 gnutls_datum_t * e,
236 gnutls_datum_t * d,
237 gnutls_datum_t * p,
238 gnutls_datum_t * q,
239 gnutls_datum_t * u);
241 int gnutls_openpgp_privkey_export (gnutls_openpgp_privkey_t key,
242 gnutls_openpgp_crt_fmt_t format,
243 const char *password,
244 unsigned int flags,
245 void *output_data,
246 size_t * output_data_size);
247 int gnutls_openpgp_privkey_export2 (gnutls_openpgp_privkey_t key,
248 gnutls_openpgp_crt_fmt_t format,
249 const char *password,
250 unsigned int flags,
251 gnutls_datum_t * out);
254 gnutls_openpgp_privkey_set_preferred_key_id (gnutls_openpgp_privkey_t key,
255 const gnutls_openpgp_keyid_t
256 keyid);
257 int gnutls_openpgp_privkey_get_preferred_key_id (gnutls_openpgp_privkey_t
258 key,
259 gnutls_openpgp_keyid_t
260 keyid);
262 int gnutls_openpgp_crt_get_auth_subkey (gnutls_openpgp_crt_t crt,
263 gnutls_openpgp_keyid_t keyid,
264 unsigned int flag);
266 /* Keyring stuff.
269 int gnutls_openpgp_keyring_init (gnutls_openpgp_keyring_t * keyring);
270 void gnutls_openpgp_keyring_deinit (gnutls_openpgp_keyring_t keyring);
272 int gnutls_openpgp_keyring_import (gnutls_openpgp_keyring_t keyring,
273 const gnutls_datum_t * data,
274 gnutls_openpgp_crt_fmt_t format);
276 int gnutls_openpgp_keyring_check_id (gnutls_openpgp_keyring_t ring,
277 const gnutls_openpgp_keyid_t keyid,
278 unsigned int flags);
281 int gnutls_openpgp_crt_verify_ring (gnutls_openpgp_crt_t key,
282 gnutls_openpgp_keyring_t keyring,
283 unsigned int flags, unsigned int *verify
284 /* the output of the verification */ );
286 int gnutls_openpgp_crt_verify_self (gnutls_openpgp_crt_t key,
287 unsigned int flags,
288 unsigned int *verify);
290 int gnutls_openpgp_keyring_get_crt (gnutls_openpgp_keyring_t ring,
291 unsigned int idx,
292 gnutls_openpgp_crt_t * cert);
294 int gnutls_openpgp_keyring_get_crt_count (gnutls_openpgp_keyring_t ring);
299 * gnutls_openpgp_recv_key_func:
300 * @session: a TLS session
301 * @keyfpr: key fingerprint
302 * @keyfpr_length: length of key fingerprint
303 * @key: output key.
305 * A callback of this type is used to retrieve OpenPGP keys. Only
306 * useful on the server, and will only be used if the peer send a key
307 * fingerprint instead of a full key. See also
308 * gnutls_openpgp_set_recv_key_function().
310 * Returns: On success, %GNUTLS_E_SUCCESS (zero) is returned,
311 * otherwise an error code is returned.
313 typedef int (*gnutls_openpgp_recv_key_func) (gnutls_session_t session,
314 const unsigned char *keyfpr,
315 unsigned int keyfpr_length,
316 gnutls_datum_t * key);
318 void
319 gnutls_openpgp_set_recv_key_function (gnutls_session_t session,
320 gnutls_openpgp_recv_key_func func);
324 /* certificate authentication stuff.
326 int gnutls_certificate_set_openpgp_key (gnutls_certificate_credentials_t res,
327 gnutls_openpgp_crt_t crt,
328 gnutls_openpgp_privkey_t pkey);
331 gnutls_certificate_set_openpgp_key_file (gnutls_certificate_credentials_t
332 res, const char *certfile,
333 const char *keyfile,
334 gnutls_openpgp_crt_fmt_t format);
335 int gnutls_certificate_set_openpgp_key_mem (gnutls_certificate_credentials_t
336 res,
337 const gnutls_datum_t * cert,
338 const gnutls_datum_t * key,
339 gnutls_openpgp_crt_fmt_t
340 format);
343 gnutls_certificate_set_openpgp_key_file2 (gnutls_certificate_credentials_t
344 res, const char *certfile,
345 const char *keyfile,
346 const char *subkey_id,
347 gnutls_openpgp_crt_fmt_t
348 format);
350 gnutls_certificate_set_openpgp_key_mem2 (gnutls_certificate_credentials_t
351 res, const gnutls_datum_t * cert,
352 const gnutls_datum_t * key,
353 const char *subkey_id,
354 gnutls_openpgp_crt_fmt_t format);
356 int gnutls_certificate_set_openpgp_keyring_mem (
357 gnutls_certificate_credentials_t c, const unsigned char *data,
358 size_t dlen, gnutls_openpgp_crt_fmt_t format);
360 int gnutls_certificate_set_openpgp_keyring_file (
361 gnutls_certificate_credentials_t c, const char *file,
362 gnutls_openpgp_crt_fmt_t format);
364 #ifdef __cplusplus
366 #endif
368 #endif /* GNUTLS_OPENPGP_H */