1 |
/* wptKeyEdit.h |
2 |
* Copyright (C) 2003, 2004 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_KEY_EDIT_H |
22 |
#define WPT_KEY_EDIT_H |
23 |
|
24 |
/* IDs for all possible gpg edit key commands. */ |
25 |
enum gpg_editkey_t { |
26 |
GPG_EDITKEY_SIGN = 1, |
27 |
GPG_EDITKEY_LSIGN = 2, |
28 |
GPG_EDITKEY_NRSIGN = 19, |
29 |
GPG_EDITKEY_NRLSIGN = 22, |
30 |
GPG_EDITKEY_TSIGN = 20, |
31 |
GPG_EDITKEY_TRUST = 3, |
32 |
GPG_EDITKEY_ADDUID = 4, |
33 |
GPG_EDITKEY_DELUID = 5, |
34 |
GPG_EDITKEY_DELKEY = 6, |
35 |
GPG_EDITKEY_ADDKEY = 7, |
36 |
GPG_EDITKEY_PASSWD = 8, |
37 |
GPG_EDITKEY_PRIMARY = 9, |
38 |
GPG_EDITKEY_EXPIRE = 10, |
39 |
GPG_EDITKEY_REVSIG = 11, |
40 |
GPG_EDITKEY_REVKEY = 12, |
41 |
GPG_EDITKEY_REVOKE = 13, /* revoke the whole key */ |
42 |
GPG_EDITKEY_ADDREV = 14, |
43 |
GPG_EDITKEY_ADDPHOTO= 15, |
44 |
GPG_EDITKEY_ENABLE = 16, |
45 |
GPG_EDITKEY_DISABLE = 17, |
46 |
GPG_EDITKEY_SETPREF = 18, |
47 |
GPG_EDITKEY_DELSIG = 21, |
48 |
GPG_EDITKEY_KEYSERV = 23, |
49 |
GPG_EDITKEY_REVUID = 24, |
50 |
GPG_EDITKEY_CLEAN = 25, |
51 |
GPG_EDITKEY_NOTATION= 26, |
52 |
GPG_EDITKEY_MINIMIZE= 27, |
53 |
GPG_EDITKEY_ADDCARDKEY=28 |
54 |
}; |
55 |
|
56 |
/* Reasons for revocations. */ |
57 |
enum gpg_revoke_t { |
58 |
GPG_REVOKE_INSECURE = 1, |
59 |
GPG_REVOKE_SUPERSEDED = 2, |
60 |
GPG_REVOKE_NOUSED = 3 |
61 |
}; |
62 |
|
63 |
/* Contain information about designated revokers. */ |
64 |
struct gpg_desig_rev_s { |
65 |
struct gpg_desig_rev_s *next; |
66 |
gpgme_pubkey_algo_t pubkey_algo; |
67 |
char fpr[41]; |
68 |
}; |
69 |
typedef struct gpg_desig_rev_s *gpg_desig_rev_t; |
70 |
|
71 |
/* Context to hold all user-ID information. */ |
72 |
struct gpg_user_id_info_s { |
73 |
struct gpg_user_id_info_s *next; |
74 |
struct { |
75 |
unsigned int revoked:1; |
76 |
unsigned int invalid:1; |
77 |
unsigned int primary:1; |
78 |
unsigned int mdc:1; |
79 |
unsigned int no_ks_modify:1; |
80 |
} flags; |
81 |
int validity; |
82 |
char *name; |
83 |
char *email; |
84 |
char *prefs; |
85 |
int index; |
86 |
}; |
87 |
typedef struct gpg_user_id_info_s *gpg_uid_info_t; |
88 |
|
89 |
/* Class to abstract the gpg edit key interface. */ |
90 |
class GpgKeyEdit { |
91 |
private: |
92 |
gpgme_key_t key; |
93 |
gpgme_ctx_t ctx; |
94 |
int resval; |
95 |
int type; |
96 |
|
97 |
bool key_has_passwd; |
98 |
|
99 |
int sig_index; /* signature index. */ |
100 |
int key_index; /* key index. */ |
101 |
int uid_index; /* userid index. */ |
102 |
|
103 |
int valid; |
104 |
|
105 |
public: |
106 |
int cnt; |
107 |
int cmd_sent; |
108 |
const char *pass; |
109 |
const char *new_pass; |
110 |
const char *new_prefs; |
111 |
const char *url; |
112 |
int trust_id; |
113 |
char *notation; |
114 |
char *name, *cmt, *email; |
115 |
const char *exp_date; /* XXX */ |
116 |
gpgme_pubkey_algo_t pubkey_algo; |
117 |
unsigned int pubkey_size; |
118 |
int flags; |
119 |
int sig_class; |
120 |
int reason; |
121 |
|
122 |
public: |
123 |
GpgKeyEdit (gpgme_key_t key); |
124 |
GpgKeyEdit (const char *keyid); |
125 |
~GpgKeyEdit (void); |
126 |
|
127 |
bool isValid (void); |
128 |
void reset (void); |
129 |
|
130 |
void clear (void); |
131 |
void clearPassphrase (void); |
132 |
|
133 |
void setNoPassphrase (bool val); |
134 |
void setPassphrase (const char *_pass); |
135 |
void setPassphrase2 (const char *_pass2); |
136 |
void setKey (gpgme_key_t key); |
137 |
void setKeyID (const char *keyid); |
138 |
void setLocalUser (gpgme_key_t locusr); |
139 |
void setCallback (gpgme_progress_cb_t cb, void *cb_value); |
140 |
void setResult (int val); |
141 |
int getResult (void); |
142 |
|
143 |
gpgme_key_t getKey (void); |
144 |
int getType (void); |
145 |
int getUseridIndex (void); |
146 |
int getKeyIndex (void); |
147 |
int getSigIndex (void); |
148 |
int getValidDays (void); |
149 |
|
150 |
gpgme_error_t addNotation (int uid_idx, const char *notation); |
151 |
gpgme_error_t signUserid (int uid_idx, int mode, int sig_class, |
152 |
const char *exp_date); |
153 |
gpgme_error_t signKey (int mode, int sig_class, const char *exp_date); |
154 |
gpgme_error_t setTrust (gpgme_validity_t trust); |
155 |
gpgme_error_t addUserid (const char *name, const char *cmt, |
156 |
const char *email); |
157 |
gpgme_error_t delUserid (int index); |
158 |
gpgme_error_t delKey (int index); |
159 |
gpgme_error_t addSubkey (gpgme_pubkey_algo_t pubkey_algo, |
160 |
unsigned int nbits, long valid); |
161 |
gpgme_error_t changePassphrase (const char *new_pass, int allow_empty); |
162 |
gpgme_error_t setPrimaryUserid (int uid_indx); |
163 |
gpgme_error_t setKeyExpireDate (int key_index, long exp_timestamp, |
164 |
bool exp_days); |
165 |
gpgme_error_t revokeUserid (int uid_indx); |
166 |
gpgme_error_t revokeSignature (int uid_index, int sig_index); |
167 |
gpgme_error_t revokeSubkey (int key_index, int reason, const char *cmt); |
168 |
gpgme_error_t addDesignatedRevoker (const char *uid); |
169 |
gpgme_error_t addPhotoid (const char *jpg_file); |
170 |
gpgme_error_t enable (void); |
171 |
gpgme_error_t disable (void); |
172 |
gpgme_error_t setUseridPreferences (int uid_index, const char *new_prefs); |
173 |
gpgme_error_t delUseridSignature (int uid_index, int sig_index); |
174 |
gpgme_error_t setPreferredKeyserver (int uid_index, const char *url); |
175 |
gpgme_error_t cleanKey (void); |
176 |
gpgme_error_t minimizeKey (void); |
177 |
|
178 |
gpgme_error_t addCardKey (int type); |
179 |
|
180 |
gpgme_error_t getUseridInfo (gpg_uid_info_t *r_uinf); |
181 |
|
182 |
gpgme_error_t getDesignatedRevoker (gpg_desig_rev_t *r_rev); |
183 |
}; |
184 |
|
185 |
BOOL keyedit_add_subkey (winpt_key_t k, HWND dlg, listview_ctrl_t lv); |
186 |
BOOL keyedit_add_userid (winpt_key_t k, HWND dlg, listview_ctrl_t lv); |
187 |
BOOL keyedit_add_revoker (winpt_key_t k, HWND dlg); |
188 |
BOOL keyedit_add_photo (winpt_key_t k, HWND dlg ); |
189 |
BOOL keyedit_change_passwd (winpt_key_t k, HWND dlg); |
190 |
BOOL keyedit_set_pref_keyserver (winpt_key_t k, HWND dlg); |
191 |
|
192 |
gpgme_error_t gpg_editkey (gpgme_ctx_t ctx, gpgme_key_t key, GpgKeyEdit *ek); |
193 |
void gpg_uid_info_release (gpg_uid_info_t inf); |
194 |
void gpg_desig_rev_release (gpg_desig_rev_t rev); |
195 |
|
196 |
#endif /*WPT_KEY_EDIT_H*/ |