Let gpgsm do the actual key selection work.
[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 as return by a gpgsm key listing.  */
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 enum keylist_modes
113   {
114    KEYLIST_BY_GRIP,
115    KEYLIST_BY_FPR
116   };
117
118
119 /* The callback type invoked for each certificate found in the
120    search.  */
121 typedef gpg_error_t (*cert_search_cb_t) (void *hook, struct cert *cert);
122
123 /* Search for certificates using a key listing using PATTERN which is
124  * described by MODE.  Invoke SEARCH_CB for each certificate found.  */
125 gpg_error_t scute_gpgsm_search_certs (enum keylist_modes mode,
126                                       const char *pattern,
127                                       cert_search_cb_t search_cb,
128                                       void *search_cb_hook);
129
130 \f
131 /* From cert-object.c.  */
132
133 gpg_error_t scute_attr_cert (struct cert *cert, const char *grip,
134                              CK_ATTRIBUTE_PTR *attrp, CK_ULONG *attr_countp);
135
136 gpg_error_t scute_attr_prv (struct cert *cert, const char *grip,
137                             CK_ATTRIBUTE_PTR *attrp, CK_ULONG *attr_countp);
138
139 void scute_attr_free (CK_ATTRIBUTE_PTR attr, CK_ULONG attr_count);
140
141 #endif  /* !CERT_H */