* main.h, seskey.c (encode_md_value): Modify to allow a q size greater
[gnupg.git] / g10 / cardglue.h
1 /* cardglue.h - Divert operations to the agent
2  * Copyright (C) 2003, 2004 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19  * USA.
20  */
21 #ifndef GNUPG_G10_CARDGLUE_H
22 #define GNUPG_G10_CARDGLUE_H 
23
24 #ifdef ENABLE_CARD_SUPPORT
25 /* 
26    Note, that most card related code has been taken from 1.9.x branch
27    and is maintained over there if at all possible.  Thus, if you make
28    changes here, please check that a similar change has been commited
29    to the 1.9.x branch.
30 */
31
32
33 struct agent_card_info_s {
34   int error;         /* private. */
35   char *serialno;    /* malloced hex string. */
36   char *disp_name;   /* malloced. */
37   char *disp_lang;   /* malloced. */
38   int  disp_sex;     /* 0 = unspecified, 1 = male, 2 = female */
39   char *pubkey_url;  /* malloced. */
40   char *login_data;  /* malloced. */
41   char *private_do[4]; /* malloced. */
42   char cafpr1valid;
43   char cafpr2valid;
44   char cafpr3valid;
45   char cafpr1[20];
46   char cafpr2[20];
47   char cafpr3[20];
48   char fpr1valid;
49   char fpr2valid;
50   char fpr3valid;
51   char fpr1[20];
52   char fpr2[20];
53   char fpr3[20];
54   u32  fpr1time;
55   u32  fpr2time;
56   u32  fpr3time;
57   unsigned long sig_counter;
58   int chv1_cached;   /* True if a PIN is not required for each
59                         signing.  Note that the gpg-agent might cache
60                         it anyway. */
61   int chvmaxlen[3];  /* Maximum allowed length of a CHV. */
62   int chvretry[3];   /* Allowed retries for the CHV; 0 = blocked. */
63 };
64
65 struct agent_card_genkey_s {
66   char fprvalid;
67   char fpr[20];
68   u32  created_at;
69   MPI  n;
70   MPI  e;
71 };
72
73
74 struct app_ctx_s;
75 struct ctrl_ctx_s;
76
77 typedef struct app_ctx_s *APP; /* deprecated. */
78 typedef struct app_ctx_s *app_t;
79 typedef struct ctrl_ctx_s *CTRL; /* deprecated. */
80 typedef struct ctrl_ctx_s *ctrl_t;
81
82
83 #define GPG_ERR_GENERAL           G10ERR_GENERAL
84 #define GPG_ERR_BAD_PIN           G10ERR_BAD_PASS
85 #define GPG_ERR_BAD_KEY           G10ERR_BAD_KEY
86 #define GPG_ERR_CARD              G10ERR_GENERAL
87 #define GPG_ERR_EEXIST            G10ERR_FILE_EXISTS
88 #define GPG_ERR_ENOMEM            G10ERR_RESOURCE_LIMIT
89 #define GPG_ERR_GENERAL           G10ERR_GENERAL
90 #define GPG_ERR_HARDWARE          G10ERR_GENERAL
91 #define GPG_ERR_INV_CARD          G10ERR_GENERAL
92 #define GPG_ERR_INV_ID            G10ERR_GENERAL
93 #define GPG_ERR_INV_NAME          G10ERR_GENERAL
94 #define GPG_ERR_INV_VALUE         G10ERR_INV_ARG
95 #define GPG_ERR_INV_SEXP          G10ERR_INV_ARG
96 #define GPG_ERR_NOT_SUPPORTED     G10ERR_UNSUPPORTED
97 #define GPG_ERR_NO_OBJ            G10ERR_GENERAL
98 #define GPG_ERR_PIN_BLOCKED       G10ERR_PASSPHRASE
99 #define GPG_ERR_UNSUPPORTED_ALGORITHM G10ERR_PUBKEY_ALGO 
100 #define GPG_ERR_USE_CONDITIONS    G10ERR_GENERAL
101 #define GPG_ERR_WRONG_CARD        G10ERR_GENERAL
102 #define GPG_ERR_WRONG_SECKEY      G10ERR_WRONG_SECKEY
103 #define GPG_ERR_PIN_NOT_SYNCED    G10ERR_GENERAL
104 #define GPG_ERR_NOT_FOUND         G10ERR_GENERAL
105 #define GPG_ERR_BUG               G10ERR_GENERAL
106 #define GPG_ERR_NOT_IMPLEMENTED   G10ERR_GENERAL
107 #define GPG_ERR_BAD_BER           G10ERR_GENERAL
108 #define GPG_ERR_EOF               (-1)
109 #define GPG_ERR_CARD_NOT_PRESENT  G10ERR_NO_CARD
110 #define GPG_ERR_CARD_RESET        G10ERR_GENERAL
111 #define GPG_ERR_WRONG_PUBKEY_ALGO G10ERR_PUBKEY_ALGO
112 #define GPG_ERR_UNKNOWN_SEXP      G10ERR_INV_ARG
113 #define GPG_ERR_DUP_VALUE         G10ERR_INV_ARG
114 #define GPG_ERR_BAD_SECKEY        G10ERR_BAD_SECKEY
115 #define GPG_ERR_TOO_LARGE         G10ERR_GENERAL
116
117 #define GPG_ERR_EBUSY             G10ERR_GENERAL
118 #define GPG_ERR_ENOENT            G10ERR_OPEN_FILE
119 #define GPG_ERR_EACCES            G10ERR_UNSUPPORTED
120 #define GPG_ERR_EIO               G10ERR_GENERAL
121 #define GPG_ERR_ENODEV            G10ERR_GENERAL
122 #define GPG_ERR_CANCELED          G10ERR_CANCELED
123
124 typedef int gpg_error_t;
125 typedef int gpg_err_code_t;
126
127 #define gpg_error(n) (n)
128 #define gpg_err_code(n) (n)
129 #define gpg_strerror(n) g10_errstr ((n))
130 #define gpg_error_from_errno(n) (G10ERR_GENERAL) /*FIXME*/
131 #define gpg_err_code_from_errno(n) (G10ERR_GENERAL)
132
133 /* We are not using it in a library, so we even let xtrymalloc
134    abort. Because we won't never return from these malloc functions,
135    we also don't need the out_of_core function, we simply define it to
136    return -1 */
137 #define xtrymalloc(n)    xmalloc((n))
138 #define xtrycalloc(n,m)  xcalloc((n),(m))
139 #define xtryrealloc(n,m) xrealloc((n),(m))
140 #define xtrymalloc_secure(n)  xmalloc_secure((n))
141 #define out_of_core()    (-1) 
142
143 #define gnupg_get_time() make_timestamp ()
144
145
146 void card_set_reader_port (const char *portstr);
147
148 char *serialno_and_fpr_from_sk (const unsigned char *sn, size_t snlen,
149                                 PKT_secret_key *sk);
150 void send_status_info (ctrl_t ctrl, const char *keyword, ...);
151 void gcry_md_hash_buffer (int algo, void *digest,
152                           const void *buffer, size_t length);
153 void log_printf (const char *fmt, ...);
154 void log_printhex (const char *text, const void *buffer, size_t length);
155
156
157 #define GCRY_MD_SHA1 DIGEST_ALGO_SHA1
158 #define GCRY_MD_RMD160 DIGEST_ALGO_RMD160
159
160 void card_close (void);
161
162
163 /* Release the card info structure. */
164 void agent_release_card_info (struct agent_card_info_s *info);
165
166 /* Return card info. */
167 int agent_learn (struct agent_card_info_s *info);
168
169 /* Check whether the secret key for the key identified by HEXKEYGRIP
170    is available.  Return 0 for yes or an error code. */
171 int agent_havekey (const char *hexkeygrip);
172
173 /* Return card info. */
174 int agent_scd_getattr (const char *name, struct agent_card_info_s *info);
175
176 /* Send a SETATTR command to the SCdaemon. */
177 int agent_scd_setattr (const char *name,
178                        const unsigned char *value, size_t valuelen,
179                        const char *serialno);
180
181 /* Send a WRITEKEY command to the SCdaemon. */
182 int agent_scd_writekey (int keyno, const char *serialno,
183                         const unsigned char *keydata, size_t keydatalen);
184
185 /* Send a GENKEY command to the SCdaemon. */
186 int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force,
187                       const char *serialno);
188
189 /* Send a PKSIGN command to the SCdaemon. */
190 int agent_scd_pksign (const char *keyid, int hashalgo,
191                       const unsigned char *indata, size_t indatalen,
192                       unsigned char **r_buf, size_t *r_buflen);
193
194 /* Send a PKDECRYPT command to the SCdaemon. */
195 int agent_scd_pkdecrypt (const char *serialno,
196                          const unsigned char *indata, size_t indatalen,
197                          unsigned char **r_buf, size_t *r_buflen);
198
199 /* Change the PIN of an OpenPGP card or reset the retry counter. */
200 int agent_scd_change_pin (int chvno, const char *serialno);
201
202 /* Send a CHECKPIN command. */
203 int agent_scd_checkpin (const char *serialnobuf);
204
205 /* Clear a cached PIN. */
206 void agent_clear_pin_cache (const char *sn);
207
208
209 #endif /*ENABLE_CARD_SUPPORT*/
210 #endif /*GNUPG_G10_CARDGLUE_H*/
211