First bits of a card support backport from 1.9. It is not enabled by
[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
64
65
66 char *serialno_and_fpr_from_sk (const unsigned char *sn, size_t snlen,
67                                 PKT_secret_key *sk);
68
69
70
71
72 /* Release the card info structure. */
73 void agent_release_card_info (struct agent_card_info_s *info);
74
75 /* Return card info. */
76 int agent_learn (struct agent_card_info_s *info);
77
78 /* Check whether the secret key for the key identified by HEXKEYGRIP
79    is available.  Return 0 for yes or an error code. */
80 int agent_havekey (const char *hexkeygrip);
81
82 /* Send a SETATTR command to the SCdaemon. */
83 int agent_scd_setattr (const char *name,
84                        const unsigned char *value, size_t valuelen);
85
86 /* Send a GENKEY command to the SCdaemon. */
87 int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force);
88
89 /* Send a PKSIGN command to the SCdaemon. */
90 int agent_scd_pksign (const char *keyid, int hashalgo,
91                       const unsigned char *indata, size_t indatalen,
92                       char **r_buf, size_t *r_buflen);
93
94 /* Send a PKDECRYPT command to the SCdaemon. */
95 int agent_scd_pkdecrypt (const char *serialno,
96                          const unsigned char *indata, size_t indatalen,
97                          char **r_buf, size_t *r_buflen);
98
99 /* Change the PIN of an OpenPGP card or reset the retry counter. */
100 int agent_scd_change_pin (int chvno);
101
102 #endif /*ENABLE_CARD_SUPPORT*/
103 #endif /*GNUPG_G10_CARDGLUE_H*/
104