c2c302395ecdfe5d5d38373c359f52ae4943af7f
[gnupg.git] / g10 / app-common.h
1 /* app-common.h - Common declarations for all card applications
2  *      Copyright (C) 2003, 2005 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it 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  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  *
20  * $Id$
21  */
22
23 #ifndef GNUPG_SCD_APP_COMMON_H
24 #define GNUPG_SCD_APP_COMMON_H
25
26 #if GNUPG_MAJOR_VERSION == 1
27 # ifdef ENABLE_AGENT_SUPPORT
28 # include "assuan.h"
29 # endif 
30 #else
31 # include <ksba.h>
32 #endif
33
34
35 struct app_local_s;  /* Defined by all app-*.c.  */
36
37 struct app_ctx_s {
38   int initialized;  /* The application has been initialied and the
39                        function pointers may be used.  Note that for
40                        unsupported operations the particular
41                        function pointer is set to NULL */
42   int slot;         /* Used reader. */
43
44   /* If this is used by GnuPG 1.4 we need to know the assuan context
45      in case we need to divert the operation to an already running
46      agent.  This if ASSUAN_CTX is not NULL we take this as indication
47      that all operations are diverted to gpg-agent. */
48 #if GNUPG_MAJOR_VERSION == 1 && defined(ENABLE_AGENT_SUPPORT)
49   assuan_context_t assuan_ctx;
50 #endif /*GNUPG_MAJOR_VERSION == 1*/
51
52   unsigned char *serialno; /* Serialnumber in raw form, allocated. */
53   size_t serialnolen;      /* Length in octets of serialnumber. */
54   const char *apptype;
55   unsigned int card_version;
56   int did_chv1;
57   int force_chv1;   /* True if the card does not cache CHV1. */
58   int did_chv2;
59   int did_chv3;
60   struct app_local_s *app_local;  /* Local to the application. */
61   struct {
62     void (*deinit) (app_t app);
63     gpg_error_t (*learn_status) (app_t app, ctrl_t ctrl);
64     gpg_error_t (*readcert) (app_t app, const char *certid,
65                      unsigned char **cert, size_t *certlen);
66     gpg_error_t (*readkey) (app_t app, const char *certid,
67                     unsigned char **pk, size_t *pklen);
68     gpg_error_t (*getattr) (app_t app, ctrl_t ctrl, const char *name);
69     gpg_error_t (*setattr) (app_t app, const char *name,
70                     gpg_error_t (*pincb)(void*, const char *, char **),
71                     void *pincb_arg,
72                     const unsigned char *value, size_t valuelen);
73     gpg_error_t (*sign) (app_t app,
74                  const char *keyidstr, int hashalgo,
75                  gpg_error_t (*pincb)(void*, const char *, char **),
76                  void *pincb_arg,
77                  const void *indata, size_t indatalen,
78                  unsigned char **outdata, size_t *outdatalen );
79     gpg_error_t (*auth) (app_t app, const char *keyidstr,
80                  gpg_error_t (*pincb)(void*, const char *, char **),
81                  void *pincb_arg,
82                  const void *indata, size_t indatalen,
83                  unsigned char **outdata, size_t *outdatalen);
84     gpg_error_t (*decipher) (app_t app, const char *keyidstr,
85                      gpg_error_t (*pincb)(void*, const char *, char **),
86                      void *pincb_arg,
87                      const void *indata, size_t indatalen,
88                      unsigned char **outdata, size_t *outdatalen);
89     gpg_error_t (*writekey) (app_t app, ctrl_t ctrl,
90                              const char *certid, unsigned int flags,
91                              gpg_error_t (*pincb)(void*,const char *,char **),
92                              void *pincb_arg,
93                              const unsigned char *pk, size_t pklen);
94     gpg_error_t (*genkey) (app_t app, ctrl_t ctrl,
95                    const char *keynostr, unsigned int flags,
96                    gpg_error_t (*pincb)(void*, const char *, char **),
97                    void *pincb_arg);
98     gpg_error_t (*change_pin) (app_t app, ctrl_t ctrl,
99                        const char *chvnostr, int reset_mode,
100                        gpg_error_t (*pincb)(void*, const char *, char **),
101                        void *pincb_arg);
102     gpg_error_t (*check_pin) (app_t app, const char *keyidstr,
103                       gpg_error_t (*pincb)(void*, const char *, char **),
104                       void *pincb_arg);
105   } fnc;
106
107 };
108
109 #if GNUPG_MAJOR_VERSION == 1
110 gpg_error_t app_select_openpgp (app_t app);
111 gpg_error_t app_get_serial_and_stamp (app_t app, char **serial, time_t *stamp);
112 gpg_error_t app_openpgp_storekey (app_t app, int keyno,
113                           unsigned char *template, size_t template_len,
114                           time_t created_at,
115                           const unsigned char *m, size_t mlen,
116                           const unsigned char *e, size_t elen,
117                           gpg_error_t (*pincb)(void*, const char *, char **),
118                           void *pincb_arg);
119 #else
120 /*-- app-help.c --*/
121 gpg_error_t app_help_get_keygrip_string (ksba_cert_t cert, char *hexkeygrip);
122 size_t app_help_read_length_of_cert (int slot, int fid, size_t *r_certoff);
123
124
125 /*-- app.c --*/
126 gpg_error_t select_application (ctrl_t ctrl, int slot, const char *name,
127                                 app_t *r_app);
128 void release_application (app_t app);
129 gpg_error_t app_munge_serialno (app_t app);
130 gpg_error_t app_get_serial_and_stamp (app_t app, char **serial, time_t *stamp);
131 gpg_error_t app_write_learn_status (app_t app, ctrl_t ctrl);
132 gpg_error_t app_readcert (app_t app, const char *certid,
133                   unsigned char **cert, size_t *certlen);
134 gpg_error_t app_readkey (app_t app, const char *keyid,
135                  unsigned char **pk, size_t *pklen);
136 gpg_error_t app_getattr (app_t app, ctrl_t ctrl, const char *name);
137 gpg_error_t app_setattr (app_t app, const char *name,
138                  gpg_error_t (*pincb)(void*, const char *, char **),
139                  void *pincb_arg,
140                  const unsigned char *value, size_t valuelen);
141 gpg_error_t app_sign (app_t app, const char *keyidstr, int hashalgo,
142               gpg_error_t (*pincb)(void*, const char *, char **),
143               void *pincb_arg,
144               const void *indata, size_t indatalen,
145               unsigned char **outdata, size_t *outdatalen );
146 gpg_error_t app_auth (app_t app, const char *keyidstr,
147               gpg_error_t (*pincb)(void*, const char *, char **),
148               void *pincb_arg,
149               const void *indata, size_t indatalen,
150               unsigned char **outdata, size_t *outdatalen);
151 gpg_error_t app_decipher (app_t app, const char *keyidstr,
152                   gpg_error_t (*pincb)(void*, const char *, char **),
153                   void *pincb_arg,
154                   const void *indata, size_t indatalen,
155                   unsigned char **outdata, size_t *outdatalen );
156 gpg_error_t app_writekey (app_t app, ctrl_t ctrl,
157                           const char *keyidstr, unsigned int flags,
158                           gpg_error_t (*pincb)(void*, const char *, char **),
159                           void *pincb_arg,
160                           const unsigned char *keydata, size_t keydatalen);
161 gpg_error_t app_genkey (app_t app, ctrl_t ctrl,
162                 const char *keynostr, unsigned int flags,
163                 gpg_error_t (*pincb)(void*, const char *, char **),
164                 void *pincb_arg);
165 gpg_error_t app_get_challenge (app_t app, size_t nbytes,
166                                unsigned char *buffer);
167 gpg_error_t app_change_pin (app_t app, ctrl_t ctrl,
168                     const char *chvnostr, int reset_mode,
169                     gpg_error_t (*pincb)(void*, const char *, char **),
170                     void *pincb_arg);
171 gpg_error_t app_check_pin (app_t app, const char *keyidstr,
172                    gpg_error_t (*pincb)(void*, const char *, char **),
173                    void *pincb_arg);
174
175
176 /*-- app-openpgp.c --*/
177 gpg_error_t app_select_openpgp (app_t app);
178
179 gpg_error_t app_openpgp_cardinfo (app_t app,
180                           char **serialno,
181                           char **disp_name,
182                           char **pubkey_url,
183                           unsigned char **fpr1,
184                           unsigned char **fpr2,
185                           unsigned char **fpr3);
186 gpg_error_t app_openpgp_storekey (app_t app, int keyno,
187                           unsigned char *template, size_t template_len,
188                           time_t created_at,
189                           const unsigned char *m, size_t mlen,
190                           const unsigned char *e, size_t elen,
191                           gpg_error_t (*pincb)(void*, const char *, char **),
192                           void *pincb_arg);
193 gpg_error_t app_openpgp_readkey (app_t app, int keyno,
194                          unsigned char **m, size_t *mlen,
195                          unsigned char **e, size_t *elen);
196 /*-- app-nks.c --*/
197 gpg_error_t app_select_nks (app_t app);
198
199 /*-- app-dinsig.c --*/
200 gpg_error_t app_select_dinsig (app_t app);
201
202 /*-- app-p15.c --*/
203 gpg_error_t app_select_p15 (app_t app);
204
205
206 #endif
207
208
209
210 #endif /*GNUPG_SCD_APP_COMMON_H*/
211
212
213