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

Diff of /trunk/Include/wptGPG.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 18 by twoaday, Fri May 20 08:38:47 2005 UTC revision 335 by twoaday, Sun Nov 27 12:20:21 2011 UTC
# Line 1  Line 1 
 /* wptGPG.h - GnuPG interface  
  *      Copyright (C) 2000-2005 Timo Schulz  
  *  
  * This file is part of WinPT.  
  *  
  * WinPT is free software; you can redistribute it and/or  
  * modify it under the terms of the GNU General Public License  
  * as published by the Free Software Foundation; either version 2  
  * of the License, or (at your option) any later version.  
  *    
  * WinPT is distributed in the hope that it will be useful,  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU  
  * General Public License for more details.  
  *  
  * You should have received a copy of the GNU General Public License  
  * along with WinPT; if not, write to the Free Software Foundation,  
  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  
  */  
   
 #ifndef WPT_GPG_H  
 #define WPT_GPG_H  
   
 #include "wptNLS.h"  
 #include "gpgme.h"  
   
 #define NO_STRICT 0  
   
 enum {  
     SETUP_KEYGEN    = 1,  
     SETUP_IMPORT    = 2,  
     SETUP_EXISTING  = 3  
 };  
   
 enum {  
     GPG_CMD_DECRYPT = 0,  
     GPG_CMD_SIGN    = 1  
 };  
   
 enum {  
     KEYCACHE_PRV = 0,  
     KEYCACHE_PUB = 1  
 };  
   
 enum {  
     ENTRY_OPAQUE = 1,  
     ENTRY_SINGLE = 2,  
     ENTRY_MULTI  = 3,  
     ENTRY_GROUP  = 4,  
 };  
   
 struct gpg_filetype {      
     const char *descr;  
     const char *ext;  
     int nicon;  
 };  
   
 struct refresh_cache_s {  
     int kr_reload;  
     int kr_update;  
     int tr_update;  
 };  
   
 struct gpg_option_s {  
     struct gpg_option_s * next;  
     char * name;  
     char * val;  
     unsigned int used:1;  
     int type;    
 };  
 typedef struct gpg_option_s * gpg_option_t;  
   
 struct gpg_member_s {  
     struct gpg_member_s * next;  
     char * name;  
     unsigned int used:1;    
 };  
 typedef struct gpg_member_s * gpg_member_t;  
   
 struct gpg_group_s {  
     struct gpg_group_s * next;  
     struct gpg_member_s * list;  
     char * name;  
     unsigned int used:1;    
 };  
 typedef struct gpg_group_s * gpg_group_t;  
   
 struct gpg_optfile_s {  
     struct gpg_option_s * list;  
     struct gpg_group_s * grp;  
 };  
 typedef struct gpg_optfile_s * gpg_optfile_t;  
   
 static gpg_filetype gpg_filetypes[] = {  
     {"GPG Detached Signature", ".sig", 1},  
     {"GPG Encrypted Data",     ".gpg", 2},  
     {"GPG Armored Data",       ".asc", 2},  
     {0}  
 };  
   
 struct passphrase_cb_s {  
     int gpg_cmd;  
     gpgme_recipients_t enc_to;  
     int pwd_init;  
     char pwd[256];  
     char info[1024]; /* hold up the info message */  
     char title[256];  
     const char * keyid;  
     HWND hwnd;  
     int cancel;  
     int is_card;  
 };  
   
 static const char * gpg_sigstat[] = {  
     _("Error during verification process."),  
     _("The signature is good."),  
     _("The signature is BAD!"),  
     _("The signature could not be checked due to a missing key."),  
     _("No valid OpenPGP signature."),  
     _("Signature Error"),  
     _("Good Signature (Expired Key)"),  
     _("Good Signature (Revoked Key)"),  
     NULL  
 };  
   
 #define SIGSTAT_MASK 8  
   
 extern int idea_available;  
   
 /*-- wptGPG.cpp --*/  
 char* get_gnupg_default_key( void );  
 int set_gnupg_default_key( const char *key );  
 char* get_gnupg_config (void);  
 char* get_gnupg_keyring_from_options( const char *fname, int pub );  
 int check_gnupg_config (const char *fname, int *secrings, int *pubrings);  
 char* get_gnupg_path( void );  
 int check_gnupg_prog( void );  
 int gnupg_access_files (void);  
 char* get_gnupg_prog( void );  
 char* get_gnupg_keyring (int pub, int strict);  
 char* get_gnupg_cfgfile (void);  
 int set_gnupg_options( const char *buf, size_t buflen );  
   
 int check_gnupg_options (const char *buf);  
 void init_gnupg_table (void);  
 void free_gnupg_table (void);  
 int keyring_check_last_access (void);  
 const char* gnupg_check_file_ext (const char * fname);  
 int gpg_check_permissions (int showmsg);  
 int gnupg_check_homedir (void);  
 int gnupg_access_keyring (int _pub);  
 void gnupg_backup_options (int keep);  
 void gnupg_backup_keyrings (void);  
 void gnupg_display_error (void);  
 int gnupg_copy_keyrings (void);  
 int check_gnupg_engine (int *r_major, int *r_minor, int *r_patch);  
   
 gpgme_card_t smartcard_init (void);  
   
 /*-- wptGPGME.cpp --*/  
 const char * get_signature_status( gpgme_sigstat_t sigstat );  
 void keycache_reload( HWND dlg );  
   
 int get_pubkey( const char *keyid, gpgme_key_t *ret_key );  
 int get_seckey( const char *keyid, gpgme_key_t *ret_skey );  
   
 void keycache_reload( HWND dlg );  
 void keycache_release( void );  
 gpgme_error_t keycache_update (const char *keyid);  
 gpgme_error_t keycache_init( const char *pubring, const char * secring );  
 void keycache_set_reload( int yes );  
 int keycache_get_reload( void );  
 gpgme_keycache_t keycache_get_ctx( int _pub );  
   
 int count_insecure_elgkeys( void );  
   
 int gpgme_encrypt_symmetric( void );  
   
 #define gpgme_enable_logging( ctx ) \  
     gpgme_control( (ctx), GPGME_CTRL_LOGGING, 1 )  
   
 #define gpgme_show_error( hwnd, rc, ctx, title, mode )          \  
 do {                                                            \  
     if( (rc) == GPGME_Internal_GPG_Problem && ctx ) {           \  
         char * strerr = gpgme_get_logging( (ctx) );             \  
         msg_box( (hwnd), (strerr)? (strerr) :                   \  
         _("No GPG error description available."), title, mode );\  
         safe_free( strerr );                                    \  
     }                                                           \  
     else {                                                      \  
         msg_box( (hwnd), gpgme_strerror( (rc) ),                \  
                   title, mode );                                \  
     }                                                           \  
 } while ( 0 )  
   
 /*-- wptGPGParser.cpp --*/  
 /* find */  
 gpg_group_t find_group( gpg_optfile_t opt, const char *str );  
 gpg_option_t find_option( gpg_optfile_t opt, const char *str );  
 gpg_member_t find_member( gpg_optfile_t opt, const char *grp, const char *str );  
 /* delete */  
 int delete_group( gpg_optfile_t opt, const char *str );  
 int delete_member( gpg_optfile_t opt, const char *grp, const char *str );  
 int delete_option( gpg_optfile_t opt, const char *str );  
 /* add */  
 int modify_entry( gpg_optfile_t opt, int type, const char *name, const char *val );  
 int add_entry( gpg_optfile_t opt, int type, const char *name, const char *val );  
 int add_member( gpg_optfile_t opt, const char *grp, const char *str );  
 int add_group( gpg_optfile_t opt, const char *str );  
 /* high-level */  
 int parse_gpg_options( const char *file, gpg_optfile_t *r_opt );  
 int commit_gpg_options( const char *file, gpg_optfile_t opt );  
 void release_gpg_options( gpg_optfile_t opt );  
 /* memory */  
 void release_group( gpg_group_t grp );  
   
 /*-- wptPassphraseCB.cpp --*/  
 void set_gpg_passphrase_cb( gpgme_ctx_t c, passphrase_cb_s * ctx, int cmd,  
                             HWND hwnd, const char * title );  
 char * request_passphrase( const char * title, int init, int * ret_cancel );  
 char * request_passphrase2 (const char * title, int * ret_cancel);  
 const char * passphrase_cb( void * opaque, const char * desc, void * r_hd );  
 char * get_key_userid( const char * keyid );  
   
 #endif /* WPT_GPG_H */  
1    /* wptGPG.h - GnuPG interface
2     *      Copyright (C) 2000-2007, 2009 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    #ifndef WPT_GPG_H
17    #define WPT_GPG_H
18    
19    #include <gpgme.h>
20    #include "wptKeyCache.h"
21    #include "wptNLS.h"
22    
23    
24    #define NO_STRICT 0
25    
26    /* Macro to indicate if a key is useable or not. */
27    #define key_is_useable(key) (!(key)->revoked && \
28                                 !(key)->expired && \
29                                 !(key)->disabled)
30    
31    enum setup_t {
32        SETUP_KEYGEN    = 1,
33        SETUP_IMPORT    = 2,
34        SETUP_EXISTING  = 3,
35        SETUP_CARDGEN   = 4
36    };
37    
38    enum gpg_cmd_t {
39        GPG_CMD_DECRYPT = 0,
40        GPG_CMD_SIGN    = 1
41    };
42    
43    enum keycache_t {
44        KEYCACHE_PRV = 0,
45        KEYCACHE_PUB = 1
46    };
47    
48    
49    struct gpg_card_s;
50    typedef struct gpg_card_s *gpg_card_t;
51    
52    /* Keycache refresh context. */
53    struct refresh_cache_s {
54        int kring_update; /* update the keyring cache. */
55        int sig_update;   /* update the signature cache. */
56    };
57    
58    
59    /* Structure for the passphrase callback. */
60    struct passphrase_cb_s {
61        int gpg_cmd;        /* sign or decrypt. */
62        int pwd_init;       /* 1 = passphrase request via dialog. */
63        char *pwd;          /* actual passphrase. */
64        char info[1024];    /* hold up the info message */
65        char *title;        /* dialog title. */
66        char keyid[16+1];   /* keyid of the secret key the pwd can be used for. */
67        HWND hwnd;          /* handle of the dialog window. */
68        int cancel;         /* 1 = user cancelled passphrase request. */
69        unsigned int is_card:1; /* 1 = key stored on a smart card. */
70        unsigned int bad_pwd:1; /* 1 = last passphrase was bad. */
71        gpgme_ctx_t gpg;
72        gpgme_recipient_t recipients;
73        struct {
74            int sym_algo;
75            int s2k_mode;
76            int s2k_hash;
77        } sym;
78    };
79    
80    
81    /* This variable is 1 if IDEA is available. */
82    extern int idea_available;
83    
84    /*-- wptGPG.cpp --*/
85    char* get_gnupg_default_key (void);
86    int set_gnupg_default_key (const char *key);
87    char* get_gnupg_config (void);
88    int check_gnupg_config (const char *fname, int *secrings, int *pubrings);
89    char* get_gnupg_path (void);
90    int check_gnupg_prog (void);
91    int gnupg_access_files (void);
92    char* get_gnupg_prog (void);
93    char* get_gnupg_keyring (int pub, int strict);
94    char* get_gnupg_cfgfile (void);
95    int set_gnupg_options( const char *buf, size_t buflen );
96    int gnupg_load_config (void);
97    char* multi_gnupg_path (int strict);
98    
99    int check_gnupg_options (const char *buf, int showerr);
100    void init_gnupg_table (void);
101    void free_gnupg_table (void);
102    int keyring_check_last_access (void);
103    const char* gnupg_check_file_ext (const char *fname, int *r_type);
104    int gpg_check_permissions (int showmsg);
105    int gpg_check_file_permissions (const char *fname);
106    int gnupg_check_homedir (void);
107    int gnupg_access_keyring (int _pub);
108    void gnupg_backup_options ();
109    void gnupg_backup_keyrings (int auto_backup, int backup_mode,
110                                int include_secr);
111    int gnupg_copy_keyrings (void);
112    int gnupg_import_keypair (void);
113    int check_gnupg_engine (const char *need_gpg_ver,
114                            int *r_major, int *r_minor, int *r_patch);
115    
116    /*-- wptGPGME.cpp --*/
117    const char * get_signature_status( gpgme_sigsum_t sigstat );
118    
119    gpgme_error_t get_pubkey (const char *keyid, gpgme_key_t *ret_key);
120    gpgme_error_t winpt_get_pubkey (const char *keyid, struct winpt_key_s *k);
121    void          winpt_release_pubkey (winpt_key_s *k);
122    gpgme_error_t get_seckey (const char *keyid, gpgme_key_t *ret_skey);
123    gpgme_error_t winpt_get_seckey (const char *keyid, struct winpt_key_s *k);
124    
125    void keycache_release (int cleanup);
126    gpgme_error_t keycache_update (int is_sec, const char *keyid);
127    gpgme_error_t keycache_init (const char *pubring, const char * secring);
128    gpg_keycache_t keycache_get_ctx (int _pub);
129    
130    gpgme_error_t gpg_clip_sym_encrypt (void);
131    const char *get_gpg_sigstat (gpgme_sigsum_t sum);
132    int check_ultimate_trusted_key (void);
133    bool secret_key_available (void);
134    
135    /*-- wptGPGParser.cpp --*/
136    enum entry_t {
137        ENTRY_OPAQUE = 1,
138        ENTRY_SINGLE = 2,
139        ENTRY_MULTI  = 3,
140        ENTRY_GROUP  = 4,
141    };
142    
143    struct conf_option_s {
144        struct conf_option_s *next;
145        char *name;
146        char *val;
147        unsigned int used:1;
148        int type;  
149    };
150    typedef struct conf_option_s *conf_option_t;
151    
152    struct conf_member_s {
153        struct conf_member_s * next;
154        char *name;
155        unsigned int used:1;  
156    };
157    typedef struct conf_member_s *conf_member_t;
158    
159    struct conf_group_s {
160        struct conf_group_s *next;
161        struct conf_member_s *list;
162        char *name;
163        unsigned int used:1;  
164    };
165    typedef struct conf_group_s *conf_group_t;
166    
167    struct conf_file_s {
168        conf_option_t list;
169        conf_group_t grp;
170    };
171    typedef struct conf_file_s *config_file_t;
172    
173    /* find/delete/add */
174    conf_group_t conf_find_group (config_file_t opt, const char *str);
175    conf_option_t conf_find_option (config_file_t opt, const char *str);
176    conf_member_t conf_find_member (config_file_t opt,
177                                    const char *grp, const char *str);
178    int conf_delete_group (config_file_t opt, const char *str);
179    int conf_delete_member (config_file_t opt, const char *grp, const char *str);
180    int conf_delete_option (config_file_t opt, const char *str);
181    int conf_modify_entry (config_file_t opt, int type, const char *name, const char *val);
182    int conf_add_entry (config_file_t opt, int type, const char *name, const char *val);
183    int conf_add_entry_int (config_file_t opt, int type, const char *name, int val);
184    int conf_add_member (config_file_t opt, const char *grp, const char *str);
185    int conf_add_group (config_file_t opt, const char *str);
186    /* high-level */
187    void new_config (config_file_t *r_opt);
188    int parse_config (const char *file, config_file_t *r_opt);
189    int commit_config (const char *file, config_file_t opt);
190    void release_config (config_file_t opt);
191    void release_group (conf_group_t grp);
192    
193    /*-- wptPassphraseCB.cpp --*/
194    enum passdlg_t {
195        PASSDLG_REPEAT  = 0, /* indicate the dialig is in the 'repeat passwd' state. */
196        PASSDLG_INIT    = 1,
197        PASSDLG_STRICT  = 2,
198        PASSDLG_NOTEMPTY= 4,
199        PASSDLG_WARN_UTF8=8,
200    };
201    
202    void set_gpg_passphrase_cb (passphrase_cb_s *cb, gpgme_ctx_t ctx,
203                                int cmd, HWND hwnd, const char *title);
204    void release_gpg_passphrase_cb (passphrase_cb_s *cb);
205    void release_gpg_recipients (gpgme_recipient_t *recipients);
206    
207    char *request_passphrase (const char *title, int flags, int *ret_cancel);
208    char *request_passphrase2 (const char *title, int flags, int *ret_cancel);
209    char *request_key_passphrase (gpgme_key_t key, const char *title,
210                                  int *ret_cancel);
211    //const char * passphrase_cb (void *opaque, const char * desc, void *r_hd);
212    char * get_key_userid (const char *keyid);
213    int check_passwd_quality (const char *pass, int strict);
214    
215    /*-- wptClipboard.cpp --*/
216    gpgme_error_t gpg_clip_istext_avail (int *r_val);
217    gpgme_error_t gpg_clip_is_secured (int *r_type, int *r_val);
218    gpgme_error_t gpg_clip_get_pgptype (int *r_type);
219    gpgme_error_t gpg_clip_parse_pgpid (const char *data, int *r_type);
220    
221    gpgme_error_t gpg_data_utf8_new_from_clipboard (gpgme_data_t *r_dh,
222                                                    int wraplen, int *r_is_utf8);
223    gpgme_error_t gpg_data_new_from_clipboard (gpgme_data_t *r_dh,
224                                               int wraplen);
225    
226    gpgme_error_t gpg_data_release_utf8_to_clipboard (gpgme_data_t dh);
227    gpgme_error_t gpg_data_release_to_clipboard (gpgme_data_t dh, int chg_ver);
228                                                      
229    
230    /* wptGPGMEData.cpp --*/
231    
232    size_t       gpg_data_readline (gpgme_data_t dh, char *line, size_t nbytes);
233    
234    gpgme_error_t gpg_data_release_and_set_file (gpgme_data_t dh, const char *fname);
235    gpgme_error_t  gpg_data_mail_quote (gpgme_data_t *r_dh);
236    gpgme_error_t  gpg_data_extract_plaintext (gpgme_data_t sig, gpgme_data_t *r_plain);
237    void          gpg_data_putc (gpgme_data_t hd, int c);
238    
239    /*-- wptGPGUtil.cpp --*/
240    gpgme_error_t gpg_rebuild_cache (char **r_inf);
241    gpgme_error_t gpg_get_version (char **r_inf);
242    void          gpg_set_debug_mode (int val);
243    gpgme_error_t gpg_export_seckey (const char *keyid, const char *outfile);
244    gpgme_error_t gpg_manage_ownertrust (char **data, int do_export);
245    gpgme_error_t gpg_get_photoid_data (const char *keyid, char **r_status_data,
246                                        unsigned char **r_data,
247                                        unsigned long *ndata);
248    gpgme_error_t gpg_revoke_cert (int desig_revoke, const char *inp_data,
249                                   const char *keyid, char **r_revcert);
250    gpgme_error_t gpg_decode_c_string (const char *src, char **destp, size_t len);
251    gpgme_error_t gpg_import_key_list (const char *fname, char **r_out);
252    gpgme_error_t gpg_extract_keys (const char *keyfile, const char **keys, DWORD nkeys,
253                                    char **new_keyfile);
254    gpgme_error_t get_uat_validity (const char *keyid, gpgme_validity_t *r_valid);
255    gpgme_error_t gpg_get_recipients (const char *file, gpgme_recipient_t *r_list);
256    gpgme_error_t gpg_find_key_subpacket (const char *key, int subpktid,
257                                          char **value);
258    int gpg_check_return_code (const char *args);
259    
260    #endif /* WPT_GPG_H */

Legend:
Removed from v.18  
changed lines
  Added in v.335

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26