/[winpt]/trunk/Include/wptGPG.h
ViewVC logotype

Contents of /trunk/Include/wptGPG.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (show annotations)
Fri Sep 30 10:10:16 2005 UTC (19 years, 5 months ago) by twoaday
File MIME type: text/plain
File size: 7469 byte(s)
Almost finished phase 1 of the WinPT GPGME port.
Still need more cleanup, comments and tests.


1 /* wptGPG.h - GnuPG interface
2 * Copyright (C) 2000-2005 Timo Schulz
3 *
4 * This file is part of WinPT.
5 *
6 * WinPT is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * WinPT 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 GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with WinPT; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #ifndef WPT_GPG_H
22 #define WPT_GPG_H
23
24 #include "w32gpgme.h"
25 #include "wptNLS.h"
26
27
28 #define NO_STRICT 0
29
30 #define key_is_useable(key) (!(key)->revoked && !(key)->expired && !(key)->disabled)
31
32 enum {
33 SETUP_KEYGEN = 1,
34 SETUP_IMPORT = 2,
35 SETUP_EXISTING = 3
36 };
37
38 enum {
39 GPG_CMD_DECRYPT = 0,
40 GPG_CMD_SIGN = 1
41 };
42
43 enum {
44 KEYCACHE_PRV = 0,
45 KEYCACHE_PUB = 1
46 };
47
48 enum {
49 ENTRY_OPAQUE = 1,
50 ENTRY_SINGLE = 2,
51 ENTRY_MULTI = 3,
52 ENTRY_GROUP = 4,
53 };
54
55 struct gpg_card_s;
56 typedef struct gpg_card_s * gpg_card_t;
57
58 /* GPG file association context. */
59 struct gpg_filetype {
60 const char *descr;
61 const char *ext;
62 int nicon;
63 };
64
65 /* Keycache refresh context. */
66 struct refresh_cache_s {
67 int kr_reload;
68 int kr_update;
69 int tr_update;
70 };
71
72 struct gpg_option_s {
73 struct gpg_option_s * next;
74 char * name;
75 char * val;
76 unsigned int used:1;
77 int type;
78 };
79 typedef struct gpg_option_s * gpg_option_t;
80
81 struct gpg_member_s {
82 struct gpg_member_s * next;
83 char * name;
84 unsigned int used:1;
85 };
86 typedef struct gpg_member_s * gpg_member_t;
87
88 struct gpg_group_s {
89 struct gpg_group_s * next;
90 struct gpg_member_s * list;
91 char * name;
92 unsigned int used:1;
93 };
94 typedef struct gpg_group_s * gpg_group_t;
95
96 struct gpg_optfile_s {
97 struct gpg_option_s * list;
98 struct gpg_group_s * grp;
99 };
100 typedef struct gpg_optfile_s * gpg_optfile_t;
101
102 static gpg_filetype gpg_filetypes[] = {
103 {"GPG Detached Signature", ".sig", 1},
104 {"GPG Encrypted Data", ".gpg", 2},
105 {"GPG Armored Data", ".asc", 2},
106 {0}
107 };
108
109 struct passphrase_cb_s {
110 int gpg_cmd;
111 int pwd_init;
112 char *pwd;
113 char info[1024]; /* hold up the info message */
114 char *title;
115 char keyid[16+1];
116 HWND hwnd;
117 int cancel;
118 int is_card;
119 gpgme_ctx_t gpg;
120 };
121
122
123 static const char * gpg_sigstat[] = {
124 _("Error during verification process."),
125 _("The signature is good."),
126 _("The signature is BAD!"),
127 _("The signature could not be checked due to a missing key."),
128 _("No valid OpenPGP signature."),
129 _("Signature Error"),
130 _("Good Signature (Expired Key)"),
131 _("Good Signature (Revoked Key)"),
132 NULL
133 };
134
135 int sigsum_to_index (gpgme_sigsum_t sum);
136 #define SIGSTAT_MASK 8
137 #define get_gpg_sigstat(sum) gpg_sigstat[sigsum_to_index ((sum)) % SIGSTAT_MASK]
138
139 /* This variable is 1 if IDEA is available. */
140 extern int idea_available;
141
142 /*-- wptGPG.cpp --*/
143 char* get_gnupg_default_key( void );
144 int set_gnupg_default_key( const char *key );
145 char* get_gnupg_config (void);
146 char* get_gnupg_keyring_from_options( const char *fname, int pub );
147 int check_gnupg_config (const char *fname, int *secrings, int *pubrings);
148 char* get_gnupg_path( void );
149 int check_gnupg_prog( void );
150 int gnupg_access_files (void);
151 char* get_gnupg_prog( void );
152 char* get_gnupg_keyring (int pub, int strict);
153 char* get_gnupg_cfgfile (void);
154 int set_gnupg_options( const char *buf, size_t buflen );
155
156 int check_gnupg_options (const char *buf);
157 void init_gnupg_table (void);
158 void free_gnupg_table (void);
159 int keyring_check_last_access (void);
160 const char* gnupg_check_file_ext (const char * fname);
161 int gpg_check_permissions (int showmsg);
162 int gnupg_check_homedir (void);
163 int gnupg_access_keyring (int _pub);
164 void gnupg_backup_options ();
165 void gnupg_backup_keyrings (void);
166 void gnupg_display_error (void);
167 int gnupg_copy_keyrings (void);
168 int check_gnupg_engine (int *r_major, int *r_minor, int *r_patch);
169
170 gpg_card_t smartcard_init (void);
171
172 /*-- wptGPGME.cpp --*/
173 const char * get_signature_status( gpgme_sigsum_t sigstat );
174 void keycache_reload( HWND dlg );
175
176 int get_pubkey (const char *keyid, gpgme_key_t *ret_key);
177 int winpt_get_pubkey (const char *keyid, struct winpt_key_s *k);
178 int get_seckey (const char *keyid, gpgme_key_t *ret_skey);
179 int winpt_get_seckey (const char *keyid, struct winpt_key_s *k);
180
181 void keycache_reload( HWND dlg );
182 void keycache_release( void );
183 gpgme_error_t keycache_update (int is_sec, const char *keyid);
184 gpgme_error_t keycache_init( const char *pubring, const char * secring );
185 void keycache_set_reload( int yes );
186 int keycache_get_reload( void );
187 gpgme_keycache_t keycache_get_ctx( int _pub );
188
189 int count_insecure_elgkeys( void );
190
191 int gpgme_encrypt_symmetric( void );
192
193 #define gpgme_enable_logging( ctx ) \
194 gpgme_control( (ctx), GPGME_CTRL_LOGGING, 1 )
195
196 #define gpgme_show_error( hwnd, rc, ctx, title, mode ) \
197 do { \
198 if( (rc) == GPGME_Internal_GPG_Problem && ctx ) { \
199 char * strerr = gpgme_get_logging( (ctx) ); \
200 msg_box( (hwnd), (strerr)? (strerr) : \
201 _("No GPG error description available."), title, mode );\
202 safe_free( strerr ); \
203 } \
204 else { \
205 msg_box( (hwnd), gpgme_strerror( (rc) ), \
206 title, mode ); \
207 } \
208 } while ( 0 )
209
210 /*-- wptGPGParser.cpp --*/
211 /* find */
212 gpg_group_t find_group( gpg_optfile_t opt, const char *str );
213 gpg_option_t find_option( gpg_optfile_t opt, const char *str );
214 gpg_member_t find_member( gpg_optfile_t opt, const char *grp, const char *str );
215 /* delete */
216 int delete_group( gpg_optfile_t opt, const char *str );
217 int delete_member( gpg_optfile_t opt, const char *grp, const char *str );
218 int delete_option( gpg_optfile_t opt, const char *str );
219 /* add */
220 int modify_entry( gpg_optfile_t opt, int type, const char *name, const char *val );
221 int add_entry( gpg_optfile_t opt, int type, const char *name, const char *val );
222 int add_member( gpg_optfile_t opt, const char *grp, const char *str );
223 int add_group( gpg_optfile_t opt, const char *str );
224 /* high-level */
225 int parse_gpg_options( const char *file, gpg_optfile_t *r_opt );
226 int commit_gpg_options( const char *file, gpg_optfile_t opt );
227 void release_gpg_options( gpg_optfile_t opt );
228 /* memory */
229 void release_group( gpg_group_t grp );
230
231 /*-- wptPassphraseCB.cpp --*/
232 enum {
233 PASSDLG_REPEAT = 0,
234 PASSDLG_INIT = 1,
235 PASSDLG_STRICT = 2
236 };
237
238 void set_gpg_passphrase_cb (passphrase_cb_s *cb, gpgme_ctx_t ctx,
239 int cmd, HWND hwnd, const char *title);
240 void release_gpg_passphrase_cb (passphrase_cb_s *cb);
241
242 char * request_passphrase (const char *title, int flags, int *ret_cancel);
243 char * request_passphrase2 (const char *title, int flags, int *ret_cancel);
244 const char * passphrase_cb (void *opaque, const char * desc, void *r_hd);
245 char * get_key_userid (const char *keyid);
246 int check_passwd_quality (const char *pass, int strict);
247
248 #endif /* WPT_GPG_H */

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26