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