1.1.2
by Martin Pitt
Import upstream version 1.5.11+cvs20060403 |
1 |
/*
|
2 |
* Copyright (C) 2003 Werner Koch <wk@gnupg.org>
|
|
3 |
* Copyright (C) 2004 g10code GmbH
|
|
4 |
*
|
|
5 |
* This program is free software; you can redistribute it and/or modify
|
|
6 |
* it under the terms of the GNU General Public License as published by
|
|
7 |
* the Free Software Foundation; either version 2 of the License, or
|
|
8 |
* (at your option) any later version.
|
|
9 |
*
|
|
10 |
* This program is distributed in the hope that it will be useful,
|
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13 |
* GNU General Public License for more details.
|
|
14 |
*
|
|
15 |
* You should have received a copy of the GNU General Public License
|
|
16 |
* along with this program; if not, write to the Free Software
|
|
17 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
18 |
*/
|
|
19 |
||
20 |
/*
|
|
21 |
Common definitions and prototypes for the crypt functions. They are
|
|
22 |
all defined in crypt.c and cryptglue.c
|
|
23 |
*/
|
|
24 |
||
25 |
#ifndef MUTT_CRYPT_H
|
|
26 |
#define MUTT_CRYPT_H
|
|
27 |
||
28 |
#include "mutt.h" /* Need this to declare BODY, ADDRESS. STATE etc. */ |
|
29 |
/* FIXME: They should be pointer to anonymous structures for better
|
|
30 |
information hiding. */
|
|
31 |
||
32 |
||
33 |
||
34 |
#define ENCRYPT (1 << 0)
|
|
35 |
#define SIGN (1 << 1)
|
|
36 |
#define GOODSIGN (1 << 2)
|
|
37 |
#define BADSIGN (1 << 3)
|
|
38 |
#define PARTSIGN (1 << 4)
|
|
39 |
#define SIGNOPAQUE (1 << 5)
|
|
40 |
#define KEYBLOCK (1 << 6) /* KEY too generic? */ |
|
41 |
#define INLINE (1 << 7)
|
|
42 |
||
43 |
#define APPLICATION_PGP (1 << 8)
|
|
44 |
#define APPLICATION_SMIME (1 << 9)
|
|
45 |
||
46 |
#define PGP_TRADITIONAL_CHECKED (1 << 10)
|
|
47 |
||
48 |
#define PGPENCRYPT (APPLICATION_PGP | ENCRYPT)
|
|
49 |
#define PGPSIGN (APPLICATION_PGP | SIGN)
|
|
50 |
#define PGPGOODSIGN (APPLICATION_PGP | GOODSIGN)
|
|
51 |
#define PGPKEY (APPLICATION_PGP | KEYBLOCK)
|
|
52 |
#define PGPINLINE (APPLICATION_PGP | INLINE)
|
|
53 |
||
54 |
#define SMIMEENCRYPT (APPLICATION_SMIME | ENCRYPT)
|
|
55 |
#define SMIMESIGN (APPLICATION_SMIME | SIGN)
|
|
56 |
#define SMIMEGOODSIGN (APPLICATION_SMIME | GOODSIGN)
|
|
57 |
#define SMIMEBADSIGN (APPLICATION_SMIME | BADSIGN)
|
|
58 |
#define SMIMEOPAQUE (APPLICATION_SMIME | SIGNOPAQUE)
|
|
59 |
||
60 |
||
61 |
/* WITHCRYPTO actually replaces ifdefs so make the code more readable.
|
|
62 |
Because it is defined as a constant and known at compile time, the
|
|
63 |
compiler can do dead code elimination and thus it behaves
|
|
64 |
effectively as a conditional compile directive. It is set to false
|
|
65 |
if no crypto backend is configures or to a bit vector denoting the
|
|
66 |
configured backends. */
|
|
67 |
#if (defined(CRYPT_BACKEND_CLASSIC_PGP) && defined(CRYPT_BACKEND_CLASSIC_SMIME)) || defined (CRYPT_BACKEND_GPGME)
|
|
68 |
# define WithCrypto (APPLICATION_PGP | APPLICATION_SMIME)
|
|
69 |
#elif defined(CRYPT_BACKEND_CLASSIC_PGP)
|
|
70 |
# define WithCrypto APPLICATION_PGP
|
|
71 |
#elif defined(CRYPT_BACKEND_CLASSIC_SMIME)
|
|
72 |
# define WithCrypto APPLICATION_SMIME
|
|
73 |
#else
|
|
74 |
# define WithCrypto 0
|
|
75 |
#endif
|
|
76 |
||
77 |
||
78 |
#define KEYFLAG_CANSIGN (1 << 0)
|
|
79 |
#define KEYFLAG_CANENCRYPT (1 << 1)
|
|
80 |
#define KEYFLAG_ISX509 (1 << 2)
|
|
81 |
#define KEYFLAG_SECRET (1 << 7)
|
|
82 |
#define KEYFLAG_EXPIRED (1 << 8)
|
|
83 |
#define KEYFLAG_REVOKED (1 << 9)
|
|
84 |
#define KEYFLAG_DISABLED (1 << 10)
|
|
85 |
#define KEYFLAG_SUBKEY (1 << 11)
|
|
86 |
#define KEYFLAG_CRITICAL (1 << 12)
|
|
87 |
#define KEYFLAG_PREFER_ENCRYPTION (1 << 13)
|
|
88 |
#define KEYFLAG_PREFER_SIGNING (1 << 14)
|
|
89 |
||
90 |
#define KEYFLAG_CANTUSE (KEYFLAG_DISABLED|KEYFLAG_REVOKED|KEYFLAG_EXPIRED)
|
|
91 |
#define KEYFLAG_RESTRICTIONS (KEYFLAG_CANTUSE|KEYFLAG_CRITICAL)
|
|
92 |
||
93 |
#define KEYFLAG_ABILITIES (KEYFLAG_CANSIGN|KEYFLAG_CANENCRYPT|KEYFLAG_PREFER_ENCRYPTION|KEYFLAG_PREFER_SIGNING)
|
|
94 |
||
95 |
enum pgp_ring |
|
96 |
{
|
|
97 |
PGP_PUBRING, |
|
98 |
PGP_SECRING
|
|
99 |
};
|
|
100 |
typedef enum pgp_ring pgp_ring_t; |
|
101 |
||
102 |
||
103 |
struct pgp_keyinfo; |
|
104 |
typedef struct pgp_keyinfo *pgp_key_t; |
|
105 |
||
106 |
||
107 |
||
108 |
/* Some prototypes -- old crypt.h. */
|
|
109 |
||
110 |
int mutt_protect (HEADER *, char *); |
|
111 |
||
112 |
int mutt_is_multipart_encrypted (BODY *); |
|
113 |
||
114 |
int mutt_is_multipart_signed (BODY *); |
|
115 |
||
116 |
int mutt_is_application_pgp (BODY *); |
|
117 |
||
118 |
int mutt_is_application_smime (BODY *); |
|
119 |
||
120 |
int mutt_signed_handler (BODY *, STATE *); |
|
121 |
||
1.1.3
by Martin Pitt
Import upstream version 1.5.12 |
122 |
int mutt_parse_crypt_hdr (char *, int, int); |
1.1.2
by Martin Pitt
Import upstream version 1.5.11+cvs20060403 |
123 |
|
124 |
||
125 |
void convert_to_7bit (BODY *); |
|
126 |
||
127 |
||
128 |
||
129 |
/*-- crypt.c --*/
|
|
130 |
||
131 |
/* Print the current time. */
|
|
132 |
void crypt_current_time(STATE *s, char *app_name); |
|
133 |
||
134 |
/* Check out the type of encryption used and set the cached status
|
|
135 |
values if there are any. */
|
|
136 |
int crypt_query (BODY *m); |
|
137 |
||
138 |
/* Fixme: To be documented. */
|
|
139 |
void crypt_extract_keys_from_messages (HEADER *h); |
|
140 |
||
141 |
/* Do a quick check to make sure that we can find all of the
|
|
142 |
encryption keys if the user has requested this service.
|
|
143 |
Return the list of keys in KEYLIST. */
|
|
144 |
int crypt_get_keys (HEADER *msg, char **keylist); |
|
145 |
||
146 |
/* Forget a passphrase and display a message. */
|
|
147 |
void crypt_forget_passphrase (void); |
|
148 |
||
149 |
/* Check that we have a usable passphrase, ask if not. */
|
|
150 |
int crypt_valid_passphrase (int); |
|
151 |
||
152 |
/* Write the message body/part A described by state S to a the given
|
|
153 |
TEMPFILE. */
|
|
154 |
int crypt_write_signed(BODY *a, STATE *s, const char *tempf); |
|
155 |
||
156 |
||
157 |
||
158 |
/*-- cryptglue.c --*/
|
|
159 |
||
160 |
/* Show a message that a backend will be invoked. */
|
|
161 |
void crypt_invoke_message (int type); |
|
162 |
||
163 |
||
164 |
/* Silently forget about a passphrase. */
|
|
165 |
void crypt_pgp_void_passphrase (void); |
|
166 |
||
167 |
int crypt_pgp_valid_passphrase (void); |
|
168 |
||
169 |
||
170 |
/* Decrypt a PGP/MIME message. */
|
|
171 |
int crypt_pgp_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d); |
|
172 |
||
173 |
/* MIME handler for the application/pgp content-type. */
|
|
174 |
int crypt_pgp_application_pgp_handler (BODY *m, STATE *s); |
|
175 |
||
176 |
/* MIME handler for an PGP/MIME encrypted message. */
|
|
177 |
int crypt_pgp_encrypted_handler (BODY *a, STATE *s); |
|
178 |
||
179 |
/* fixme: needs documentation. */
|
|
180 |
void crypt_pgp_invoke_getkeys (ADDRESS *addr); |
|
181 |
||
182 |
/* Ask for a PGP key. */
|
|
183 |
pgp_key_t crypt_pgp_ask_for_key (char *tag, char *whatfor, |
|
184 |
short abilities, pgp_ring_t keyring); |
|
185 |
||
186 |
/* Check for a traditional PGP message in body B. */
|
|
187 |
int crypt_pgp_check_traditional (FILE *fp, BODY *b, int tagged_only); |
|
188 |
||
189 |
/* fixme: needs documentation. */
|
|
190 |
BODY *crypt_pgp_traditional_encryptsign (BODY *a, int flags, char *keylist); |
|
191 |
||
192 |
/* Release the PGP key KPP (note, that we pass a pointer to it). */
|
|
193 |
void crypt_pgp_free_key (pgp_key_t *kpp); |
|
194 |
||
195 |
/* Generate a PGP public key attachment. */
|
|
196 |
BODY *crypt_pgp_make_key_attachment (char *tempf); |
|
197 |
||
198 |
/* This routine attempts to find the keyids of the recipients of a
|
|
199 |
message. It returns NULL if any of the keys can not be found. */
|
|
200 |
char *crypt_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc); |
|
201 |
||
202 |
/* Create a new body with a PGP signed message from A. */
|
|
203 |
BODY *crypt_pgp_sign_message (BODY *a); |
|
204 |
||
205 |
/* Warning: A is no longer freed in this routine, you need to free it
|
|
206 |
later. This is necessary for $fcc_attach. */
|
|
207 |
BODY *crypt_pgp_encrypt_message (BODY *a, char *keylist, int sign); |
|
208 |
||
209 |
/* Invoke the PGP command to import a key. */
|
|
210 |
void crypt_pgp_invoke_import (const char *fname); |
|
211 |
||
212 |
int crypt_pgp_send_menu (HEADER *msg, int *redraw); |
|
213 |
||
214 |
/* fixme: needs documentation */
|
|
215 |
int crypt_pgp_verify_one (BODY *sigbdy, STATE *s, const char *tempf); |
|
216 |
||
217 |
/* Access the keyID in K. */
|
|
218 |
char *crypt_pgp_keyid (pgp_key_t k); |
|
219 |
||
220 |
/* fixme: needs documentation */
|
|
221 |
void crypt_pgp_extract_keys_from_attachment_list (FILE *fp, int tag,BODY *top); |
|
222 |
||
1.1.5
by Christoph Berg
Import upstream version 1.5.15+20070412 |
223 |
void crypt_pgp_set_sender (const char *sender); |
1.1.2
by Martin Pitt
Import upstream version 1.5.11+cvs20060403 |
224 |
|
225 |
||
226 |
||
227 |
/* Silently forget about a passphrase. */
|
|
228 |
void crypt_smime_void_passphrase (void); |
|
229 |
||
230 |
int crypt_smime_valid_passphrase (void); |
|
231 |
||
232 |
/* Decrypt an S/MIME message. */
|
|
233 |
int crypt_smime_decrypt_mime (FILE *a, FILE **b, BODY *c, BODY **d); |
|
234 |
||
235 |
/* MIME handler for the application/smime content-type. */
|
|
236 |
int crypt_smime_application_smime_handler (BODY *m, STATE *s); |
|
237 |
||
238 |
/* fixme: Needs documentation. */
|
|
239 |
void crypt_smime_getkeys (ENVELOPE *env); |
|
240 |
||
241 |
/* Check that the sender matches. */
|
|
242 |
int crypt_smime_verify_sender(HEADER *h); |
|
243 |
||
244 |
/* Ask for an SMIME key. */
|
|
245 |
char *crypt_smime_ask_for_key (char *prompt, char *mailbox, short public); |
|
246 |
||
247 |
/* This routine attempts to find the keyids of the recipients of a
|
|
248 |
message. It returns NULL if any of the keys can not be found. */
|
|
249 |
char *crypt_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc); |
|
250 |
||
251 |
/* fixme: Needs documentation. */
|
|
252 |
BODY *crypt_smime_sign_message (BODY *a); |
|
253 |
||
254 |
/* fixme: needs documentation. */
|
|
255 |
BODY *crypt_smime_build_smime_entity (BODY *a, char *certlist); |
|
256 |
||
257 |
/* Add a certificate and update index file (externally). */
|
|
258 |
void crypt_smime_invoke_import (char *infile, char *mailbox); |
|
259 |
||
260 |
int crypt_smime_send_menu (HEADER *msg, int *redraw); |
|
261 |
||
1.1.5
by Christoph Berg
Import upstream version 1.5.15+20070412 |
262 |
void crypt_smime_set_sender (const char *sender); |
263 |
||
1.1.2
by Martin Pitt
Import upstream version 1.5.11+cvs20060403 |
264 |
/* fixme: needs documentation */
|
265 |
int crypt_smime_verify_one (BODY *sigbdy, STATE *s, const char *tempf); |
|
266 |
||
267 |
void crypt_init (void); |
|
268 |
||
269 |
#endif /*MUTT_CRYPT_H*/ |