* keylist.c (print_seckey_info, print_pubkey_info): --keyid-format
[gnupg.git] / g10 / cardglue.h
1 /* call-agent.h - Divert operations to the agent
2  * Copyright (C) 2003 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 #ifndef GNUPG_G10_CARDGLUE_H
21 #define GNUPG_G10_CARDGLUE_H 
22
23 #ifdef ENABLE_CARD_SUPPORT
24 /* 
25    Note, that most card related code has been taken from 1.9.x branch
26    and is maintained over there if at all possible.  Thus, if you make
27    changes here, please check that a similar change has been commited
28    to the 1.9.x branch.
29 */
30
31
32 struct agent_card_info_s {
33   int error;         /* private. */
34   char *serialno;    /* malloced hex string. */
35   char *disp_name;   /* malloced. */
36   char *disp_lang;   /* malloced. */
37   int  disp_sex;     /* 0 = unspecified, 1 = male, 2 = female */
38   char *pubkey_url;  /* malloced. */
39   char *login_data;  /* malloced. */
40   char fpr1valid;
41   char fpr2valid;
42   char fpr3valid;
43   char fpr1[20];
44   char fpr2[20];
45   char fpr3[20];
46   unsigned long sig_counter;
47   int chv1_cached;   /* True if a PIN is not required for each
48                         signing.  Note that the gpg-agent might cache
49                         it anyway. */
50   int chvmaxlen[3];  /* Maximum allowed length of a CHV. */
51   int chvretry[3];   /* Allowed retries for the CHV; 0 = blocked. */
52 };
53
54 struct agent_card_genkey_s {
55   char fprvalid;
56   char fpr[20];
57   u32  created_at;
58   MPI  n;
59   MPI  e;
60 };
61
62
63 struct app_ctx_s;
64 struct ctrl_ctx_s;
65
66 typedef struct app_ctx_s *APP;
67 typedef struct ctrl_ctx_s *CTRL;
68
69
70 #define GPG_ERR_GENERAL           G10ERR_GENERAL
71 #define GPG_ERR_BAD_PIN           G10ERR_BAD_PASS
72 #define GPG_ERR_CARD              G10ERR_GENERAL
73 #define GPG_ERR_EEXIST            G10ERR_FILE_EXISTS
74 #define GPG_ERR_ENOMEM            G10ERR_RESOURCE_LIMIT
75 #define GPG_ERR_GENERAL           G10ERR_GENERAL
76 #define GPG_ERR_HARDWARE          G10ERR_GENERAL
77 #define GPG_ERR_INV_CARD          G10ERR_GENERAL
78 #define GPG_ERR_INV_ID            G10ERR_GENERAL
79 #define GPG_ERR_INV_NAME          G10ERR_GENERAL
80 #define GPG_ERR_INV_VALUE         G10ERR_INV_ARG
81 #define GPG_ERR_NOT_SUPPORTED     G10ERR_UNSUPPORTED
82 #define GPG_ERR_NO_OBJ            G10ERR_GENERAL
83 #define GPG_ERR_PIN_BLOCKED       G10ERR_PASSPHRASE
84 #define GPG_ERR_UNSUPPORTED_ALGORITHM G10ERR_PUBKEY_ALGO 
85 #define GPG_ERR_USE_CONDITIONS    G10ERR_GENERAL
86 #define GPG_ERR_WRONG_CARD        G10ERR_GENERAL
87 #define GPG_ERR_WRONG_SECKEY      G10ERR_WRONG_SECKEY
88 #define GPG_ERR_PIN_NOT_SYNCED    G10ERR_GENERAL
89
90 typedef int gpg_error_t;
91 typedef int gpg_err_code_t;
92
93 #define gpg_error(n) (n)
94 #define gpg_err_code(n) (n)
95 #define gpg_strerror(n) g10_errstr ((n))
96 #define gpg_error_from_errno(n) (G10ERR_GENERAL) /*FIXME*/
97
98
99 /* We are not using it in a library, so we even let xtrymalloc
100    abort. Because we won't never return from these malloc functions,
101    we also don't need the out_of_core function, we simply define it to
102    return -1 */
103 #define xtrymalloc(n)    xmalloc((n))
104 #define xtrycalloc(n,m)  xcalloc((n),(m))
105 #define xtryrealloc(n,m) xrealloc((n),(m))
106 #define out_of_core()    (-1) 
107
108 #define gnupg_get_time() make_timestamp ()
109
110
111 void card_set_reader_port (const char *portstr);
112
113 char *serialno_and_fpr_from_sk (const unsigned char *sn, size_t snlen,
114                                 PKT_secret_key *sk);
115 void send_status_info (CTRL ctrl, const char *keyword, ...);
116 void gcry_md_hash_buffer (int algo, void *digest,
117                           const void *buffer, size_t length);
118 void log_printf (const char *fmt, ...);
119 void log_printhex (const char *text, const void *buffer, size_t length);
120
121
122 #define GCRY_MD_SHA1 DIGEST_ALGO_SHA1
123 #define GCRY_MD_RMD160 DIGEST_ALGO_RMD160
124
125 void card_close (void);
126
127
128 /* Release the card info structure. */
129 void agent_release_card_info (struct agent_card_info_s *info);
130
131 /* Return card info. */
132 int agent_learn (struct agent_card_info_s *info);
133
134 /* Check whether the secret key for the key identified by HEXKEYGRIP
135    is available.  Return 0 for yes or an error code. */
136 int agent_havekey (const char *hexkeygrip);
137
138 /* Return card info. */
139 int agent_scd_getattr (const char *name, struct agent_card_info_s *info);
140
141 /* Send a SETATTR command to the SCdaemon. */
142 int agent_scd_setattr (const char *name,
143                        const unsigned char *value, size_t valuelen);
144
145 /* Send a GENKEY command to the SCdaemon. */
146 int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force);
147
148 /* Send a PKSIGN command to the SCdaemon. */
149 int agent_scd_pksign (const char *keyid, int hashalgo,
150                       const unsigned char *indata, size_t indatalen,
151                       unsigned char **r_buf, size_t *r_buflen);
152
153 /* Send a PKDECRYPT command to the SCdaemon. */
154 int agent_scd_pkdecrypt (const char *serialno,
155                          const unsigned char *indata, size_t indatalen,
156                          unsigned char **r_buf, size_t *r_buflen);
157
158 /* Change the PIN of an OpenPGP card or reset the retry counter. */
159 int agent_scd_change_pin (int chvno);
160
161 /* Send a CHECKPIN command. */
162 int agent_scd_checkpin (const char *serialnobuf);
163
164
165 #endif /*ENABLE_CARD_SUPPORT*/
166 #endif /*GNUPG_G10_CARDGLUE_H*/
167