2 * Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2010 Free Software
5 * Author: Nikos Mavrogiannopoulos
7 * This file is part of GNUTLS.
9 * The GNUTLS library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public License
11 * as published by the Free Software Foundation; either version 2.1 of
12 * the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
28 # include "gnutls_cert.h"
29 # include "gnutls_auth.h"
30 # include "auth_dh_common.h"
31 # include "x509/x509_int.h"
32 # include "openpgp/openpgp_int.h"
34 /* This structure may be complex, but it's the only way to
35 * support a server that has multiple certificates
37 typedef struct gnutls_certificate_credentials_st
39 gnutls_dh_params_t dh_params
;
40 gnutls_rsa_params_t rsa_params
;
41 /* this callback is used to retrieve the DH or RSA
44 gnutls_params_function
*params_func
;
46 gnutls_cert
**cert_list
;
47 /* contains a list of a list of certificates.
48 * eg (X509): [0] certificate1, certificate11, certificate111
49 * (if more than one, one certificate certifies the one before)
50 * [1] certificate2, certificate22, ...
52 unsigned *cert_list_length
;
53 /* contains the number of the certificates in a
54 * row (should be 1 for OpenPGP keys).
56 unsigned ncerts
; /* contains the number of columns in cert_list.
57 * This is the same with the number of pkeys.
61 /* private keys. It contains ncerts private
62 * keys. pkey[i] corresponds to certificate in
67 /* OpenPGP specific stuff */
68 gnutls_openpgp_keyring_t keyring
;
71 /* X509 specific stuff */
73 gnutls_x509_crt_t
*x509_ca_list
;
74 unsigned x509_ncas
; /* number of CAs in the ca_list
77 gnutls_x509_crl_t
*x509_crl_list
;
78 unsigned x509_ncrls
; /* number of CRLs in the crl_list
81 unsigned int verify_flags
; /* flags to be used at
82 * certificate verification.
84 unsigned int verify_depth
;
85 unsigned int verify_bits
;
87 /* holds a sequence of the
88 * RDNs of the CAs above.
90 * generating on every handshake.
92 gnutls_datum_t x509_rdn_sequence
;
94 gnutls_certificate_client_retrieve_function
*client_get_cert_callback
;
95 gnutls_certificate_server_retrieve_function
*server_get_cert_callback
;
96 gnutls_certificate_verify_function
*verify_callback
;
97 } certificate_credentials_st
;
99 typedef struct rsa_info_st
101 gnutls_datum_t modulus
;
102 gnutls_datum_t exponent
;
105 /* This is the information we keep for the peer
108 typedef struct cert_auth_info_st
110 /* These (dh/rsa) are just copies from the credentials_t structure.
111 * They must be freed.
114 rsa_info_st rsa_export
;
116 gnutls_datum_t
*raw_certificate_list
; /* holds the raw certificate of the
119 unsigned int ncerts
; /* holds the size of the list above */
121 gnutls_certificate_type_t cert_type
;
122 gnutls_sign_algorithm_t sign_algo
;
123 #ifdef ENABLE_OPENPGP
125 gnutls_openpgp_keyid_t subkey_id
;
129 typedef struct cert_auth_info_st cert_auth_info_st
;
131 void _gnutls_free_rsa_info (rsa_info_st
* rsa
);
133 /* AUTH X509 functions */
134 int _gnutls_gen_cert_server_certificate (gnutls_session_t
, opaque
**);
135 int _gnutls_gen_cert_client_certificate (gnutls_session_t
, opaque
**);
136 int _gnutls_gen_cert_client_cert_vrfy (gnutls_session_t
, opaque
**);
137 int _gnutls_gen_cert_server_cert_req (gnutls_session_t
, opaque
**);
138 int _gnutls_proc_cert_cert_req (gnutls_session_t
, opaque
*, size_t);
139 int _gnutls_proc_cert_client_cert_vrfy (gnutls_session_t
, opaque
*, size_t);
140 int _gnutls_proc_cert_server_certificate (gnutls_session_t
, opaque
*, size_t);
141 int _gnutls_get_selected_cert (gnutls_session_t session
,
142 gnutls_cert
** apr_cert_list
,
143 int *apr_cert_list_length
,
144 gnutls_privkey
** apr_pkey
);
146 int _gnutls_server_select_cert (struct gnutls_session_int
*,
147 gnutls_pk_algorithm_t
);
148 void _gnutls_selected_certs_deinit (gnutls_session_t session
);
149 void _gnutls_selected_certs_set (gnutls_session_t session
,
150 gnutls_cert
* certs
, int ncerts
,
151 gnutls_privkey
* key
, int need_free
);
153 #define _gnutls_proc_cert_client_certificate _gnutls_proc_cert_server_certificate
155 gnutls_rsa_params_t
_gnutls_certificate_get_rsa_params (gnutls_rsa_params_t
157 gnutls_params_function
161 int _gnutls_get_auth_info_gcert (gnutls_cert
* gcert
,
162 gnutls_certificate_type_t type
,
163 cert_auth_info_t info
,
164 int flags
/* OR of ConvFlags */ );