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

Annotation of /trunk/Include/wptGPG.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (hide 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 twoaday 2 /* 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 twoaday 23 #include "w32gpgme.h"
25 twoaday 2 #include "wptNLS.h"
26    
27 twoaday 23
28 twoaday 2 #define NO_STRICT 0
29    
30 twoaday 23 #define key_is_useable(key) (!(key)->revoked && !(key)->expired && !(key)->disabled)
31    
32 twoaday 2 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 twoaday 23 struct gpg_card_s;
56     typedef struct gpg_card_s * gpg_card_t;
57    
58     /* GPG file association context. */
59 twoaday 2 struct gpg_filetype {
60     const char *descr;
61     const char *ext;
62     int nicon;
63     };
64    
65 twoaday 23 /* Keycache refresh context. */
66 twoaday 2 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 twoaday 23 char *pwd;
113 twoaday 2 char info[1024]; /* hold up the info message */
114 twoaday 23 char *title;
115     char keyid[16+1];
116 twoaday 2 HWND hwnd;
117     int cancel;
118     int is_card;
119 twoaday 23 gpgme_ctx_t gpg;
120 twoaday 2 };
121    
122 twoaday 23
123 twoaday 2 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 twoaday 23 int sigsum_to_index (gpgme_sigsum_t sum);
136 twoaday 2 #define SIGSTAT_MASK 8
137 twoaday 23 #define get_gpg_sigstat(sum) gpg_sigstat[sigsum_to_index ((sum)) % SIGSTAT_MASK]
138 twoaday 2
139 twoaday 23 /* This variable is 1 if IDEA is available. */
140 twoaday 2 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 twoaday 23 void gnupg_backup_options ();
165 twoaday 2 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 twoaday 23 gpg_card_t smartcard_init (void);
171 twoaday 2
172     /*-- wptGPGME.cpp --*/
173 twoaday 23 const char * get_signature_status( gpgme_sigsum_t sigstat );
174 twoaday 2 void keycache_reload( HWND dlg );
175    
176 twoaday 23 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 twoaday 2
181     void keycache_reload( HWND dlg );
182     void keycache_release( void );
183 twoaday 22 gpgme_error_t keycache_update (int is_sec, const char *keyid);
184 twoaday 2 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 twoaday 18 if( (rc) == GPGME_Internal_GPG_Problem && ctx ) { \
199 twoaday 2 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 twoaday 22 enum {
233     PASSDLG_REPEAT = 0,
234     PASSDLG_INIT = 1,
235     PASSDLG_STRICT = 2
236     };
237 twoaday 2
238 twoaday 23 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 twoaday 22 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 twoaday 2 #endif /* WPT_GPG_H */

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26