b57db0fc8a6da32a81def4eb72e2754667433adb
[scute.git] / src / cert.h
1 /* cert.h - Scute certificate management.
2    Copyright (C) 2006, 2007 g10 Code GmbH
3
4    This file is part of Scute.
5
6    Scute is free software; you can redistribute it and/or modify it
7    under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    Scute 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    General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with Scute; if not, write to the Free Software Foundation,
18    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
20    In addition, as a special exception, g10 Code GmbH gives permission
21    to link this library: with the Mozilla Foundation's code for
22    Mozilla (or with modified versions of it that use the same license
23    as the "Mozilla" code), and distribute the linked executables.  You
24    must obey the GNU General Public License in all respects for all of
25    the code used other than "Mozilla".  If you modify this file, you
26    may extend this exception to your version of the file, but you are
27    not obligated to do so.  If you do not wish to do so, delete this
28    exception statement from your version.  */
29
30 #ifndef CERT_H
31 #define CERT_H  1
32
33 #include <stdbool.h>
34 #include <time.h>
35
36 #include <gpg-error.h>
37 #include <assuan.h>
38
39 #include "cryptoki.h"
40
41 \f
42 /* A certificate structure holds all information of a certificate
43    during a certificate search.  */
44 struct cert
45 {
46   /* True if we started to fill in a certificate.  */
47   bool valid;
48
49   /* The certifciate reference if retrieved from a card or an empty
50    * string if not known.  Example value: "OPENPGP.3".  */
51   char certref[25];
52
53 #if 1
54   /* We disable some elements, because they are easy to get from gpgsm
55      but hard to get from the card directly.  These fields are only
56      valid when getting the certificate through gpgsm, so don't use
57      them.  */
58
59   /* The key length.  */
60   int length;
61
62   /* The public key algorithm.  */
63   int pubkey_algo;
64
65   /* The key ID.  */
66   unsigned char keyid[17];
67
68   /* The X.509 serial number.  */
69   char *issuer_serial;
70
71   /* The X.509 issuer name.  */
72   char *issuer_name;
73
74   /* The user ID strings.  */
75   char *uid;
76
77   /* The timestamp.  */
78   time_t timestamp;
79
80   /* The expiration time.  */
81   time_t expires;
82 #endif
83
84   /* The following entries are required to create a PKCS #11
85      certificate (in cert-object.c).  GpgSM delivers them directly, if
86      we get the cert from the card, we need to read them from the cert
87      ourselves.  */
88
89   /* The fingerprint.  */
90   unsigned char fpr[41];
91
92   /* The key grip.  */
93   unsigned char grip[41];
94
95   /* The chain ID.  */
96   unsigned char chain_id[41];
97
98   /* The certificate in DER format.  This is not entered by the search
99      function, but afterwards by the filter before converting it into
100      a PKCS #11 object.  */
101   unsigned char *cert_der;
102   int cert_der_len;
103
104   /* If the certificate is trusted or not.  For performance reasons,
105      this is not entered by the search function, but afterwards by the
106      filter before converting it into a PKCS #11 object.  */
107   bool is_trusted;
108 };
109
110 \f
111 /* From cert-gpgsm.c.  */
112
113 /* The callback type invoked for each certificate found in the
114    search.  */
115 typedef gpg_error_t (*cert_search_cb_t) (void *hook, struct cert *cert);
116
117 /* Invoke SEARCH_CB for each certificate found using assuan connection
118    CTX to GPGSM.  */
119 gpg_error_t scute_gpgsm_search_certs_by_grip (const char *grip,
120                                               cert_search_cb_t search_cb,
121                                               void *search_cb_hook);
122
123 /* Invoke SEARCH_CB for each certificate found using assuan connection
124    CTX to GPGSM.  */
125 gpg_error_t scute_gpgsm_search_certs_by_fpr (const char *fpr,
126                                              cert_search_cb_t search_cb,
127                                              void *search_cb_hook);
128
129 \f
130 /* From cert-object.c.  */
131
132 gpg_error_t scute_attr_cert (struct cert *cert, const char *grip,
133                              CK_ATTRIBUTE_PTR *attrp, CK_ULONG *attr_countp);
134
135 gpg_error_t scute_attr_prv (struct cert *cert, const char *grip,
136                             CK_ATTRIBUTE_PTR *attrp, CK_ULONG *attr_countp);
137
138 void scute_attr_free (CK_ATTRIBUTE_PTR attr, CK_ULONG attr_count);
139
140 #endif  /* !CERT_H */