Added basic code for keylisting.
[gnupg.git] / sm / gpgsm.h
1 /* gpgsm.h - Global definitions for GpgSM
2  *      Copyright (C) 2001 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
21 #ifndef GPGSM_H
22 #define GPGSM_H
23
24 #include <ksba.h>
25 #include "util.h"
26
27 /* Error numbers */
28 enum {
29   GPGSM_EOF = -1,
30   GPGSM_No_Error = 0,
31   GPGSM_General_Error = 1, 
32   GPGSM_Out_Of_Core = 2,
33   GPGSM_Invalid_Value = 3,
34   GPGSM_IO_Error = 4,
35   GPGSM_Resource_Limit = 5,
36   GPGSM_Internal_Error = 6,
37   GPGSM_Bad_Certificate = 7,
38   GPGSM_Bad_Certificate_Path = 8,
39   GPGSM_Missing_Certificate = 9,
40   GPGSM_No_Data = 10,
41   GPGSM_Bad_Signature = 11,
42   GPGSM_Not_Implemented = 12,
43   GPGSM_Conflict = 13,
44 };
45
46 /* Status codes (shared with gpg) */
47 enum {
48   STATUS_ENTER,
49   STATUS_LEAVE,
50   STATUS_ABORT,
51   STATUS_GOODSIG,
52   STATUS_BADSIG,
53   STATUS_ERRSIG,
54   STATUS_BADARMOR,
55   STATUS_RSA_OR_IDEA,
56   STATUS_SIGEXPIRED,
57   STATUS_KEYREVOKED,
58   STATUS_TRUST_UNDEFINED,
59   STATUS_TRUST_NEVER,
60   STATUS_TRUST_MARGINAL,
61   STATUS_TRUST_FULLY,
62   STATUS_TRUST_ULTIMATE,
63   
64   STATUS_SHM_INFO,
65   STATUS_SHM_GET,
66   STATUS_SHM_GET_BOOL,
67   STATUS_SHM_GET_HIDDEN,
68   
69   STATUS_NEED_PASSPHRASE,
70   STATUS_VALIDSIG,
71   STATUS_SIG_ID,
72   STATUS_ENC_TO,
73   STATUS_NODATA,
74   STATUS_BAD_PASSPHRASE,
75   STATUS_NO_PUBKEY,
76   STATUS_NO_SECKEY,
77   STATUS_NEED_PASSPHRASE_SYM,
78   STATUS_DECRYPTION_FAILED,
79   STATUS_DECRYPTION_OKAY,
80   STATUS_MISSING_PASSPHRASE,
81   STATUS_GOOD_PASSPHRASE,
82   STATUS_GOODMDC,
83   STATUS_BADMDC,
84   STATUS_ERRMDC,
85   STATUS_IMPORTED,
86   STATUS_IMPORT_RES,
87   STATUS_FILE_START,
88   STATUS_FILE_DONE,
89   STATUS_FILE_ERROR,
90   
91   STATUS_BEGIN_DECRYPTION,
92   STATUS_END_DECRYPTION,
93   STATUS_BEGIN_ENCRYPTION,
94   STATUS_END_ENCRYPTION,
95   
96   STATUS_DELETE_PROBLEM,
97   STATUS_GET_BOOL,
98   STATUS_GET_LINE,
99   STATUS_GET_HIDDEN,
100   STATUS_GOT_IT,
101   STATUS_PROGRESS,
102   STATUS_SIG_CREATED,
103   STATUS_SESSION_KEY,
104   STATUS_NOTATION_NAME,
105   STATUS_NOTATION_DATA,
106   STATUS_POLICY_URL,
107   STATUS_BEGIN_STREAM,
108   STATUS_END_STREAM,
109   STATUS_KEY_CREATED,
110   STATUS_USERID_HIN,
111   STATUS_UNEXPECTED,
112   STATUS_INV_RECP,
113   STATUS_NO_RECP,
114   STATUS_ALREADY_SIGNED,
115 };
116
117
118 #define MAX_DIGEST_LEN 24 
119
120 /* A large struct name "opt" to keep global flags */
121 struct {
122   unsigned int debug; /* debug flags (DBG_foo_VALUE) */
123   int verbose;      /* verbosity level */
124   int quiet;        /* be as quiet as possible */
125   int batch;        /* run in batch mode, i.e w/o any user interaction */
126   int answer_yes;   /* assume yes on most questions */
127   int answer_no;    /* assume no on most questions */
128   int dry_run;      /* don't change any persistent data */
129
130   const char *homedir; /* configuration directory name */
131   char *outfile;    /* name of output file */
132
133   int with_key_data;/* include raw key in the column delimted output */
134
135   int fingerprint;  /* list fingerprints in all key listings */
136
137   int armor;        /* force base64 armoring */
138   int no_armor;     /* don't try to figure out whether data is base64 armored*/
139
140   int def_cipher_algo;    /* cipher algorithm to use if nothing else is know */
141   int def_digest_algo;    /* Ditto for hash algorithm */
142   int def_compress_algo;  /* Ditto for compress algorithm */
143
144   char *def_recipient;    /* userID of the default recipient */
145   int def_recipient_self; /* The default recipient is the default key */
146
147   int always_trust;       /* Trust the given keys even if there is no
148                              valid certification path */
149   int skip_verify;        /* do not check signatures on data */
150
151   int lock_once;          /* Keep lock once they are set */
152
153   int ignore_time_conflict; /* Ignore certain time conflicts */
154
155 } opt;
156
157
158 #define DBG_X509_VALUE    1     /* debug x.509 data reading/writing */
159 #define DBG_MPI_VALUE     2     /* debug mpi details */
160 #define DBG_CRYPTO_VALUE  4     /* debug low level crypto */
161 #define DBG_MEMORY_VALUE  32    /* debug memory allocation stuff */
162 #define DBG_CACHE_VALUE   64    /* debug the caching */
163 #define DBG_MEMSTAT_VALUE 128   /* show memory statistics */
164 #define DBG_HASHING_VALUE 512   /* debug hashing operations */
165
166 #define DBG_X509    (opt.debug & DBG_X509_VALUE)
167 #define DBG_CRYPTO  (opt.debug & DBG_CRYPTO_VALUE)
168 #define DBG_MEMORY  (opt.debug & DBG_MEMORY_VALUE)
169 #define DBG_CACHE   (opt.debug & DBG_CACHE_VALUE)
170 #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE)
171
172 struct server_local_s;
173
174 struct server_control_s {
175   int no_server;     /* we are not running under server control */
176   int  status_fd;    /* only for non-server mode */
177   struct server_local_s *server_local;
178   int with_colons;  /* use column delimited output format */
179 };
180 typedef struct server_control_s *CTRL;
181
182
183 /*-- gpgsm.c --*/
184 void gpgsm_exit (int rc);
185
186 /*-- server.c --*/
187 void gpgsm_server (void);
188 void gpgsm_status (CTRL ctrl, int no, const char *text);
189
190 /*-- fingerprint --*/
191 char *gpgsm_get_fingerprint (KsbaCert cert, int algo, char *array, int *r_len);
192 char *gpgsm_get_fingerprint_string (KsbaCert cert, int algo);
193 char *gpgsm_get_fingerprint_hexstring (KsbaCert cert, int algo);
194
195 /*-- certdump.c --*/
196 void gpgsm_dump_cert (const char *text, KsbaCert cert);
197
198 /*-- certcheck.c --*/
199 int gpgsm_check_cert_sig (KsbaCert issuer_cert, KsbaCert cert);
200 int gpgsm_check_cms_signature (KsbaCert cert, const char *sigval,
201                                GCRY_MD_HD md, int hash_algo);
202
203
204 /*-- certpath.c --*/
205 int gpgsm_validate_path (KsbaCert cert);
206
207 /*-- keylist.c --*/
208 void gpgsm_list_keys (CTRL ctrl, STRLIST names, FILE *fp);
209
210
211 /*-- import.c --*/
212 int gpgsm_import (CTRL ctrl, int in_fd);
213
214 /*-- verify.c --*/
215 int gpgsm_verify (CTRL ctrl, int in_fd, int data_fd);
216
217
218
219
220 /*-- errors.c (built) --*/
221 const char *gpgsm_strerror (int err);
222
223
224 #endif /*GPGSM_H*/