gpg: Fix using --decrypt along with --use-embedded-filename.
[gnupg.git] / tools / gpg-card.h
1 /* gpg-card.h - Common definitions for the gpg-card-tool
2  * Copyright (C) 2019 g10 Code GmbH
3  *
4  * This file is part of GnuPG.
5  *
6  * This file 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 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This file 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 Lesser 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, see <https://gnu.org/licenses/>.
18  * SPDX-License-Identifier: GPL-3.0-or-later
19  */
20
21 #ifndef GNUPG_GPG_CARD_H
22 #define GNUPG_GPG_CARD_H
23
24 #include "../common/session-env.h"
25
26
27 /* We keep all global options in the structure OPT.  */
28 struct
29 {
30   int interactive;
31   int verbose;
32   unsigned int debug;
33   int quiet;
34   int with_colons;
35   const char *gpg_program;
36   const char *gpgsm_program;
37   const char *agent_program;
38   int autostart;
39
40   /* Options passed to the gpg-agent: */
41   session_env_t session_env;
42   char *lc_ctype;
43   char *lc_messages;
44
45 } opt;
46
47 /* Debug values and macros.  */
48 #define DBG_IPC_VALUE      1024 /* Debug assuan communication.  */
49 #define DBG_EXTPROG_VALUE 16384 /* Debug external program calls */
50
51 #define DBG_IPC       (opt.debug & DBG_IPC_VALUE)
52 #define DBG_EXTPROG   (opt.debug & DBG_EXTPROG_VALUE)
53
54 /* The maximum length of a binary fingerprint.  */
55 #define MAX_FINGERPRINT_LEN  32
56
57
58 /*
59  * Data structures to store keyblocks (aka certificates).
60  */
61 struct pubkey_s
62 {
63   struct pubkey_s *next;   /* The next key.  */
64   unsigned char grip[KEYGRIP_LEN];
65   unsigned char fpr[MAX_FINGERPRINT_LEN];
66   unsigned char fprlen;     /* The used length of a FPR.  */
67   unsigned int grip_valid:1;/* The grip is valid.  */
68   unsigned int requested: 1;/* This is the requested grip.  */
69 };
70 typedef struct pubkey_s *pubkey_t;
71
72 struct userid_s
73 {
74   struct userid_s *next;
75   char *value;   /* Malloced.  */
76 };
77 typedef struct userid_s *userid_t;
78
79 struct keyblock_s
80 {
81   struct keyblock_s *next;  /* Allow to link several keyblocks.  */
82   int protocol;      /* GPGME_PROTOCOL_OPENPGP or _CMS. */
83   pubkey_t keys;     /* The key.  For OpenPGP primary + list of subkeys.  */
84   userid_t uids;     /* The list of user ids.  */
85 };
86 typedef struct keyblock_s *keyblock_t;
87
88
89
90 /* Enumeration of the known card application types. */
91 typedef enum
92   {
93    APP_TYPE_NONE,        /* Not yet known or for direct APDU sending.  */
94    APP_TYPE_OPENPGP,
95    APP_TYPE_NKS,
96    APP_TYPE_DINSIG,
97    APP_TYPE_P15,
98    APP_TYPE_GELDKARTE,
99    APP_TYPE_SC_HSM,
100    APP_TYPE_PIV,
101    APP_TYPE_UNKNOWN      /* Unknown by this tool.  */
102   } app_type_t;
103
104
105 /* OpenPGP card key attributes.  */
106 struct key_attr
107 {
108   int algo;              /* Algorithm identifier.  */
109   union {
110     unsigned int nbits;  /* Supported keysize.  */
111     const char *curve;   /* Name of curve.  */
112   };
113 };
114
115 /* An object to store information pertaining to a key pair as stored
116  * on a card.  This is commonly used as a linked list with all keys
117  * known for the current card.  */
118 struct key_info_s
119 {
120   struct key_info_s *next;
121
122   unsigned char grip[20];/* The keygrip.  */
123
124   unsigned char xflag;   /* Temporary flag to help processing a list. */
125
126   /* The three next items are mostly useful for OpenPGP cards.  */
127   unsigned char fprlen;  /* Use length of the next item.  */
128   unsigned char fpr[32]; /* The binary fingerprint of length FPRLEN.  */
129   u32 created;           /* The time the key was created.  */
130   unsigned int usage;    /* Usage flags.  (GCRY_PK_USAGE_*) */
131   char keyref[1];        /* String with the keyref (e.g. OPENPGP.1).  */
132 };
133 typedef struct key_info_s *key_info_t;
134
135
136 /*
137  * The object used to store information about a card.
138  */
139 struct card_info_s
140 {
141   int initialized;   /* True if a learn command was successful. */
142   int error;         /* private. */
143   char *reader;      /* Reader information.  */
144   char *cardtype;    /* NULL or type of the card.  */
145   unsigned int cardversion; /* Firmware version of the card.  */
146   char *apptypestr;  /* Malloced application type string.  */
147   app_type_t apptype;/* Translated from APPTYPESTR.  */
148   unsigned int appversion; /* Version of the application.  */
149   char *serialno;    /* malloced hex string. */
150   char *dispserialno;/* malloced string. */
151   char *disp_name;   /* malloced. */
152   char *disp_lang;   /* malloced. */
153   int  disp_sex;     /* 0 = unspecified, 1 = male, 2 = female */
154   char *pubkey_url;  /* malloced. */
155   char *login_data;  /* malloced. */
156   char *private_do[4]; /* malloced. */
157   char cafpr1len;     /* Length of the CA-fingerprint or 0 if invalid.  */
158   char cafpr2len;
159   char cafpr3len;
160   char cafpr1[20];
161   char cafpr2[20];
162   char cafpr3[20];
163   key_info_t kinfo;  /* Linked list with all keypair related data.  */
164   unsigned long sig_counter;
165   int chv1_cached;   /* For openpgp this is true if a PIN is not
166                         required for each signing.  Note that the
167                         gpg-agent might cache it anyway. */
168   int is_v2;         /* True if this is a v2 openpgp card.  */
169   int chvmaxlen[3];  /* Maximum allowed length of a CHV. */
170   int chvinfo[3];    /* Allowed retries for the CHV; 0 = blocked. */
171   unsigned char chvusage[2]; /* Data object 5F2F */
172   struct key_attr key_attr[3]; /* OpenPGP card key attributes.  */
173   struct {
174     unsigned int ki:1;     /* Key import available.  */
175     unsigned int aac:1;    /* Algorithm attributes are changeable.  */
176     unsigned int kdf:1;    /* KDF object to support PIN hashing available.  */
177     unsigned int bt:1;     /* Button for confirmation available.  */
178   } extcap;
179   unsigned int status_indicator;
180   int kdf_do_enabled;      /* True if card has a KDF object.  */
181   int uif[3];              /* True if User Interaction Flag is on.  */
182 };
183 typedef struct card_info_s *card_info_t;
184
185
186 /*-- card-keys.c --*/
187 void release_keyblock (keyblock_t keyblock);
188 void flush_keyblock_cache (void);
189 gpg_error_t get_matching_keys (const unsigned char *keygrip, int protocol,
190                                keyblock_t *r_keyblock);
191 gpg_error_t test_get_matching_keys (const char *hexgrip);
192
193
194 /*-- card-misc.c --*/
195 key_info_t find_kinfo (card_info_t info, const char *keyref);
196 void *hex_to_buffer (const char *string, size_t *r_length);
197 gpg_error_t send_apdu (const char *hexapdu, const char *desc,
198                        unsigned int ignore,
199                        unsigned char **r_data, size_t *r_datalen);
200
201 /*-- card-call-scd.c --*/
202 void release_card_info (card_info_t info);
203 const char *app_type_string (app_type_t app_type);
204
205 gpg_error_t scd_apdu (const char *hexapdu, unsigned int *r_sw,
206                       unsigned char **r_data, size_t *r_datalen);
207 gpg_error_t scd_learn (card_info_t info);
208 gpg_error_t scd_getattr (const char *name, struct card_info_s *info);
209 gpg_error_t scd_setattr (const char *name,
210                          const unsigned char *value, size_t valuelen);
211 gpg_error_t scd_writecert (const char *certidstr,
212                            const unsigned char *certdata, size_t certdatalen);
213 gpg_error_t scd_writekey (const char *keyref, int force, const char *keygrip);
214 gpg_error_t scd_genkey (const char *keyref, int force, const char *algo,
215                         u32 *createtime);
216 gpg_error_t scd_serialno (char **r_serialno, const char *demand);
217 gpg_error_t scd_readcert (const char *certidstr,
218                           void **r_buf, size_t *r_buflen);
219 gpg_error_t scd_readkey (const char *keyrefstr, gcry_sexp_t *r_result);
220 gpg_error_t scd_cardlist (strlist_t *result);
221 gpg_error_t scd_change_pin (const char *pinref, int reset_mode);
222 gpg_error_t scd_checkpin (const char *serialno);
223
224 unsigned long agent_get_s2k_count (void);
225
226 /*-- card-yubikey.c --*/
227 gpg_error_t yubikey_commands (card_info_t info,
228                               estream_t fp, int argc, char *argv[]);
229
230
231 #endif /*GNUPG_GPG_CARD_H*/