corrected copyright notices
[gnutls.git] / lib / includes / gnutls / abstract.h
blob204e3296aba84d553286191e90cbe5b66408acea
1 /*
2 * Copyright (C) 2010-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 #ifndef __GNUTLS_ABSTRACT_H
24 #define __GNUTLS_ABSTRACT_H
26 #include <gnutls/gnutls.h>
27 #include <gnutls/x509.h>
28 #include <gnutls/pkcs11.h>
29 #include <gnutls/openpgp.h>
30 #include <gnutls/tpm.h>
32 #ifdef __cplusplus
33 extern "C"
35 #endif
37 /* Public key operations */
39 struct gnutls_pubkey_st;
40 typedef struct gnutls_pubkey_st *gnutls_pubkey_t;
42 struct gnutls_privkey_st;
43 typedef struct gnutls_privkey_st *gnutls_privkey_t;
45 typedef int (*gnutls_privkey_sign_func) (gnutls_privkey_t key,
46 void *userdata,
47 const gnutls_datum_t * raw_data,
48 gnutls_datum_t * signature);
49 typedef int (*gnutls_privkey_decrypt_func) (gnutls_privkey_t key,
50 void *userdata,
51 const gnutls_datum_t * ciphertext,
52 gnutls_datum_t * plaintext);
54 typedef void (*gnutls_privkey_deinit_func) (gnutls_privkey_t key,
55 void *userdata);
57 int gnutls_pubkey_init (gnutls_pubkey_t * key);
58 void gnutls_pubkey_deinit (gnutls_pubkey_t key);
60 void gnutls_pubkey_set_pin_function (gnutls_pubkey_t key,
61 gnutls_pin_callback_t fn, void *userdata);
63 int gnutls_pubkey_get_pk_algorithm (gnutls_pubkey_t key, unsigned int *bits);
65 int gnutls_pubkey_import_x509 (gnutls_pubkey_t key, gnutls_x509_crt_t crt,
66 unsigned int flags);
67 int gnutls_pubkey_import_x509_crq (gnutls_pubkey_t key, gnutls_x509_crq_t crq,
68 unsigned int flags);
69 int gnutls_pubkey_import_pkcs11 (gnutls_pubkey_t key,
70 gnutls_pkcs11_obj_t obj, unsigned int flags);
71 int gnutls_pubkey_import_openpgp (gnutls_pubkey_t key,
72 gnutls_openpgp_crt_t crt,
73 unsigned int flags);
75 int gnutls_pubkey_import_openpgp_raw (gnutls_pubkey_t pkey,
76 const gnutls_datum_t * data,
77 gnutls_openpgp_crt_fmt_t format,
78 const gnutls_openpgp_keyid_t keyid,
79 unsigned int flags);
80 int gnutls_pubkey_import_x509_raw (gnutls_pubkey_t pkey,
81 const gnutls_datum_t * data,
82 gnutls_x509_crt_fmt_t format,
83 unsigned int flags);
85 int
86 gnutls_pubkey_import_privkey (gnutls_pubkey_t key, gnutls_privkey_t pkey,
87 unsigned int usage, unsigned int flags);
89 int
90 gnutls_pubkey_import_tpm_url (gnutls_pubkey_t pkey,
91 const char* url,
92 const char *srk_password,
93 unsigned int flags);
95 int
96 gnutls_pubkey_import_url (gnutls_pubkey_t key, const char *url,
97 unsigned int flags);
99 int
100 gnutls_pubkey_import_tpm_raw (gnutls_pubkey_t pkey,
101 const gnutls_datum_t * fdata,
102 gnutls_tpmkey_fmt_t format,
103 const char *srk_password,
104 unsigned int flags);
106 int gnutls_pubkey_get_preferred_hash_algorithm (gnutls_pubkey_t key,
107 gnutls_digest_algorithm_t *
108 hash, unsigned int *mand);
110 int gnutls_pubkey_get_pk_rsa_raw (gnutls_pubkey_t key,
111 gnutls_datum_t * m, gnutls_datum_t * e);
112 int gnutls_pubkey_get_pk_dsa_raw (gnutls_pubkey_t key,
113 gnutls_datum_t * p, gnutls_datum_t * q,
114 gnutls_datum_t * g, gnutls_datum_t * y);
115 int gnutls_pubkey_get_pk_ecc_raw (gnutls_pubkey_t key, gnutls_ecc_curve_t *curve,
116 gnutls_datum_t * x, gnutls_datum_t * y);
117 int gnutls_pubkey_get_pk_ecc_x962 (gnutls_pubkey_t key, gnutls_datum_t* parameters,
118 gnutls_datum_t * ecpoint);
120 int gnutls_pubkey_export (gnutls_pubkey_t key,
121 gnutls_x509_crt_fmt_t format,
122 void *output_data, size_t * output_data_size);
124 int gnutls_pubkey_export2 (gnutls_pubkey_t key,
125 gnutls_x509_crt_fmt_t format,
126 gnutls_datum_t * out);
128 int gnutls_pubkey_get_key_id (gnutls_pubkey_t key, unsigned int flags,
129 unsigned char *output_data,
130 size_t * output_data_size);
133 gnutls_pubkey_get_openpgp_key_id (gnutls_pubkey_t key, unsigned int flags,
134 unsigned char *output_data,
135 size_t * output_data_size,
136 unsigned int *subkey);
138 int gnutls_pubkey_get_key_usage (gnutls_pubkey_t key, unsigned int *usage);
139 int gnutls_pubkey_set_key_usage (gnutls_pubkey_t key, unsigned int usage);
141 int gnutls_pubkey_import (gnutls_pubkey_t key,
142 const gnutls_datum_t * data,
143 gnutls_x509_crt_fmt_t format);
146 int gnutls_pubkey_import_pkcs11_url (gnutls_pubkey_t key, const char *url,
147 unsigned int flags
148 /* GNUTLS_PKCS11_OBJ_FLAG_* */ );
149 int gnutls_pubkey_import_dsa_raw (gnutls_pubkey_t key,
150 const gnutls_datum_t * p,
151 const gnutls_datum_t * q,
152 const gnutls_datum_t * g,
153 const gnutls_datum_t * y);
154 int gnutls_pubkey_import_rsa_raw (gnutls_pubkey_t key,
155 const gnutls_datum_t * m,
156 const gnutls_datum_t * e);
159 gnutls_pubkey_import_ecc_x962 (gnutls_pubkey_t key,
160 const gnutls_datum_t * parameters,
161 const gnutls_datum_t * ecpoint);
164 gnutls_pubkey_import_ecc_raw (gnutls_pubkey_t key,
165 gnutls_ecc_curve_t curve,
166 const gnutls_datum_t * x,
167 const gnutls_datum_t * y);
170 gnutls_pubkey_encrypt_data (gnutls_pubkey_t key, unsigned int flags,
171 const gnutls_datum_t * plaintext,
172 gnutls_datum_t * ciphertext);
174 int gnutls_x509_crt_set_pubkey (gnutls_x509_crt_t crt, gnutls_pubkey_t key);
176 int gnutls_x509_crq_set_pubkey (gnutls_x509_crq_t crq, gnutls_pubkey_t key);
178 #define GNUTLS_PUBKEY_VERIFY_FLAG_TLS_RSA 1
179 /* The following flag disables call to PIN callbacks etc.
180 * Only works for TPM keys.
182 #define GNUTLS_PUBKEY_DISABLE_CALLBACKS (1<<2)
184 gnutls_pubkey_verify_hash2 (gnutls_pubkey_t key,
185 gnutls_sign_algorithm_t algo,
186 unsigned int flags,
187 const gnutls_datum_t * hash,
188 const gnutls_datum_t * signature);
191 gnutls_pubkey_get_verify_algorithm (gnutls_pubkey_t key,
192 const gnutls_datum_t * signature,
193 gnutls_digest_algorithm_t * hash);
196 gnutls_pubkey_verify_data2 (gnutls_pubkey_t pubkey,
197 gnutls_sign_algorithm_t algo,
198 unsigned int flags,
199 const gnutls_datum_t * data,
200 const gnutls_datum_t * signature);
202 /* Private key operations */
204 int gnutls_privkey_init (gnutls_privkey_t * key);
205 void gnutls_privkey_deinit (gnutls_privkey_t key);
207 void gnutls_privkey_set_pin_function (gnutls_privkey_t key,
208 gnutls_pin_callback_t fn, void *userdata);
210 int gnutls_privkey_get_pk_algorithm (gnutls_privkey_t key,
211 unsigned int *bits);
212 gnutls_privkey_type_t gnutls_privkey_get_type (gnutls_privkey_t key);
215 #define GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE (1<<0)
216 #define GNUTLS_PRIVKEY_IMPORT_COPY (1<<1)
217 /* The following flag disables call to PIN callbacks etc.
218 * Only works for TPM keys.
220 #define GNUTLS_PRIVKEY_DISABLE_CALLBACKS (1<<2)
221 int gnutls_privkey_import_pkcs11 (gnutls_privkey_t pkey,
222 gnutls_pkcs11_privkey_t key,
223 unsigned int flags);
224 int gnutls_privkey_import_x509 (gnutls_privkey_t pkey,
225 gnutls_x509_privkey_t key,
226 unsigned int flags);
227 int gnutls_privkey_import_openpgp (gnutls_privkey_t pkey,
228 gnutls_openpgp_privkey_t key,
229 unsigned int flags);
231 int gnutls_privkey_import_openpgp_raw (gnutls_privkey_t pkey,
232 const gnutls_datum_t * data,
233 gnutls_openpgp_crt_fmt_t format,
234 const gnutls_openpgp_keyid_t keyid,
235 const char* password);
237 int gnutls_privkey_import_x509_raw (gnutls_privkey_t pkey,
238 const gnutls_datum_t * data,
239 gnutls_x509_crt_fmt_t format,
240 const char* password, unsigned int flags);
243 gnutls_privkey_import_tpm_raw (gnutls_privkey_t pkey,
244 const gnutls_datum_t * fdata,
245 gnutls_tpmkey_fmt_t format,
246 const char *srk_password,
247 const char *key_password, unsigned int flags);
250 gnutls_privkey_import_tpm_url (gnutls_privkey_t pkey,
251 const char* url, const char *srk_password, const char *key_password,
252 unsigned int flags);
254 int gnutls_privkey_import_url (gnutls_privkey_t key, const char *url, unsigned int flags);
256 int gnutls_privkey_import_pkcs11_url (gnutls_privkey_t key, const char *url);
259 gnutls_privkey_import_ext (gnutls_privkey_t pkey,
260 gnutls_pk_algorithm_t pk,
261 void* userdata,
262 gnutls_privkey_sign_func sign_func,
263 gnutls_privkey_decrypt_func decrypt_func,
264 unsigned int flags);
267 gnutls_privkey_import_ext2 (gnutls_privkey_t pkey,
268 gnutls_pk_algorithm_t pk,
269 void* userdata,
270 gnutls_privkey_sign_func sign_func,
271 gnutls_privkey_decrypt_func decrypt_func,
272 gnutls_privkey_deinit_func deinit_func,
273 unsigned int flags);
275 int gnutls_privkey_sign_data (gnutls_privkey_t signer,
276 gnutls_digest_algorithm_t hash,
277 unsigned int flags,
278 const gnutls_datum_t * data,
279 gnutls_datum_t * signature);
281 int gnutls_privkey_sign_hash (gnutls_privkey_t signer,
282 gnutls_digest_algorithm_t hash_algo,
283 unsigned int flags,
284 const gnutls_datum_t * hash_data,
285 gnutls_datum_t * signature);
287 int gnutls_privkey_decrypt_data (gnutls_privkey_t key,
288 unsigned int flags,
289 const gnutls_datum_t * ciphertext,
290 gnutls_datum_t * plaintext);
292 int gnutls_x509_crt_privkey_sign (gnutls_x509_crt_t crt,
293 gnutls_x509_crt_t issuer,
294 gnutls_privkey_t issuer_key,
295 gnutls_digest_algorithm_t dig,
296 unsigned int flags);
298 int gnutls_x509_crl_privkey_sign (gnutls_x509_crl_t crl,
299 gnutls_x509_crt_t issuer,
300 gnutls_privkey_t issuer_key,
301 gnutls_digest_algorithm_t dig,
302 unsigned int flags);
304 int gnutls_x509_crq_privkey_sign (gnutls_x509_crq_t crq,
305 gnutls_privkey_t key,
306 gnutls_digest_algorithm_t dig,
307 unsigned int flags);
310 * gnutls_pcert_st:
311 * @pubkey: public key of parsed certificate.
312 * @cert: certificate itself of parsed certificate
313 * @type: type of certificate, a #gnutls_certificate_type_t type.
315 * A parsed certificate.
317 typedef struct gnutls_pcert_st
319 gnutls_pubkey_t pubkey;
320 gnutls_datum_t cert;
321 gnutls_certificate_type_t type;
322 } gnutls_pcert_st;
324 /* Do not initialize the "cert" element of
325 * the certificate */
326 #define GNUTLS_PCERT_NO_CERT 1
328 int gnutls_pcert_import_x509 (gnutls_pcert_st* pcert,
329 gnutls_x509_crt_t crt, unsigned int flags);
332 gnutls_pcert_list_import_x509_raw (gnutls_pcert_st * pcerts,
333 unsigned int *pcert_max,
334 const gnutls_datum_t * data,
335 gnutls_x509_crt_fmt_t format, unsigned int flags);
337 int gnutls_pcert_import_x509_raw (gnutls_pcert_st* pcert,
338 const gnutls_datum_t* cert,
339 gnutls_x509_crt_fmt_t format, unsigned int flags);
341 int gnutls_pcert_import_openpgp_raw (gnutls_pcert_st* pcert,
342 const gnutls_datum_t* cert,
343 gnutls_openpgp_crt_fmt_t format,
344 gnutls_openpgp_keyid_t keyid, unsigned int flags);
346 int gnutls_pcert_import_openpgp (gnutls_pcert_st* pcert,
347 gnutls_openpgp_crt_t crt, unsigned int flags);
349 void gnutls_pcert_deinit (gnutls_pcert_st* pcert);
351 /* For certificate credentials */
352 /* This is the same as gnutls_certificate_retrieve_function()
353 * but retrieves a gnutls_pcert_st which requires much less processing
354 * within the library.
356 typedef int gnutls_certificate_retrieve_function2 (gnutls_session_t,
357 const gnutls_datum_t *
358 req_ca_rdn,
359 int nreqs,
360 const
361 gnutls_pk_algorithm_t
362 * pk_algos,
363 int pk_algos_length,
364 gnutls_pcert_st **,
365 unsigned int *pcert_length,
366 gnutls_privkey_t *privkey);
369 void gnutls_certificate_set_retrieve_function2 (
370 gnutls_certificate_credentials_t cred,
371 gnutls_certificate_retrieve_function2 * func);
374 gnutls_certificate_set_key (gnutls_certificate_credentials_t res,
375 const char** names,
376 int names_size,
377 gnutls_pcert_st * pcert_list,
378 int pcert_list_size,
379 gnutls_privkey_t key);
381 #include <gnutls/compat.h>
383 int gnutls_pubkey_verify_data (gnutls_pubkey_t pubkey,
384 unsigned int flags,
385 const gnutls_datum_t * data,
386 const gnutls_datum_t * signature) _GNUTLS_GCC_ATTR_DEPRECATED;
388 int gnutls_pubkey_verify_hash (gnutls_pubkey_t key, unsigned int flags,
389 const gnutls_datum_t * hash,
390 const gnutls_datum_t * signature) _GNUTLS_GCC_ATTR_DEPRECATED;
393 gnutls_pubkey_print (gnutls_pubkey_t pubkey,
394 gnutls_certificate_print_formats_t format,
395 gnutls_datum_t * out);
397 #ifdef __cplusplus
399 #endif
401 #endif