64 |
CMD_LSIGN, |
CMD_LSIGN, |
65 |
CMD_CHECK, |
CMD_CHECK, |
66 |
CMD_CLEAN, |
CMD_CLEAN, |
67 |
|
CMD_MINIMIZE |
68 |
}; |
}; |
69 |
|
|
70 |
struct cmdlist_s { |
struct cmdlist_s { |
92 |
{"LSIGN", 0, CMD_LSIGN}, |
{"LSIGN", 0, CMD_LSIGN}, |
93 |
{"CHECK", 0, CMD_CHECK}, |
{"CHECK", 0, CMD_CHECK}, |
94 |
{"CLEAN", 0, CMD_CLEAN}, |
{"CLEAN", 0, CMD_CLEAN}, |
95 |
|
{"MINIMIZE", 0, CMD_MINIMIZE}, |
96 |
{NULL, 0} |
{NULL, 0} |
97 |
}; |
}; |
98 |
|
|
123 |
const char *keyid; |
const char *keyid; |
124 |
const char *pass; |
const char *pass; |
125 |
listview_ctrl_t lv; |
listview_ctrl_t lv; |
126 |
|
int lv_pos; |
127 |
void *opaque; |
void *opaque; |
128 |
unsigned int finished:1; |
unsigned int finished:1; |
129 |
unsigned int is_protected:1; |
unsigned int is_protected:1; |
193 |
ComboBox_AddString_utf8 (GetDlgItem (dlg, IDC_ADDREV_KEYLIST), s); |
ComboBox_AddString_utf8 (GetDlgItem (dlg, IDC_ADDREV_KEYLIST), s); |
194 |
} |
} |
195 |
gpg_keycache_rewind (pub); |
gpg_keycache_rewind (pub); |
196 |
n = SendDlgItemMessage( dlg, IDC_ADDREV_KEYLIST, CB_GETCOUNT, 0, 0 ); |
n = SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_GETCOUNT, 0, 0); |
197 |
for (i = 0; i < n; i++) { |
for (i = 0; i < n; i++) { |
198 |
gpg_keycache_next_key (pub, 0, &key); |
gpg_keycache_next_key (pub, 0, &key); |
199 |
SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_SETITEMDATA, |
SendDlgItemMessage (dlg, IDC_ADDREV_KEYLIST, CB_SETITEMDATA, |
245 |
keygen->bits, |
keygen->bits, |
246 |
get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo)); |
get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo)); |
247 |
_snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+8); |
_snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+8); |
248 |
|
s = get_key_created (time (NULL)); |
249 |
n = listview_count_items (lv, 0); |
n = listview_count_items (lv, 0); |
250 |
listview_add_item_pos (lv, n); |
listview_add_item_pos (lv, n); |
251 |
listview_add_sub_item (lv, n, 0, info); |
listview_add_sub_item (lv, n, SUBK_COL_DESC, info); |
252 |
listview_add_sub_item (lv, n, 1, keyid); |
listview_add_sub_item (lv, n, SUBK_COL_KEYID, keyid); |
253 |
listview_add_sub_item (lv, n, 2, get_key_created (time (NULL))); |
listview_add_sub_item (lv, n, SUBK_COL_CREATION, s); |
254 |
listview_add_sub_item (lv, n, 3, expdate); |
listview_add_sub_item (lv, n, SUBK_COL_EXPIRES, expdate); |
255 |
if (flags & KM_FLAG_REVOKED) |
if (flags & KM_FLAG_REVOKED) |
256 |
s = _("Revoked"); |
s = _("Revoked"); |
257 |
else if (flags & KM_FLAG_EXPIRED) |
else if (flags & KM_FLAG_EXPIRED) |
258 |
s = _("Expired"); |
s = _("Expired"); |
259 |
else |
else |
260 |
s = _("OK"); |
s = _("OK"); |
261 |
listview_add_sub_item (lv, n, 4, s); |
listview_add_sub_item (lv, n, SUBK_COL_STATUS, s); |
262 |
} |
} |
263 |
|
|
264 |
|
|
273 |
GpgKeyEdit *ke; |
GpgKeyEdit *ke; |
274 |
gpgme_error_t err; |
gpgme_error_t err; |
275 |
gpg_uid_info_t inf, ui; |
gpg_uid_info_t inf, ui; |
|
char *ui_name = NULL; |
|
276 |
int pos = -1; |
int pos = -1; |
277 |
|
|
278 |
ke = create_GpgKeyEdit (keyid); |
ke = create_GpgKeyEdit (keyid); |
286 |
} |
} |
287 |
|
|
288 |
for (ui = inf; ui; ui = ui->next) { |
for (ui = inf; ui; ui = ui->next) { |
289 |
safe_free (ui_name); |
if (name && email && ui->email && ui->name) { |
|
ui_name = utf8_to_native (ui->name); |
|
|
if (name && email && ui->email && ui_name) { |
|
290 |
if (!strcmp (ui->email, email) && |
if (!strcmp (ui->email, email) && |
291 |
!strncmp (ui_name, name, strlen (name))) { |
!strncmp (ui->name, name, strlen (name))) { |
292 |
pos = ui->index; |
pos = ui->index; |
293 |
break; |
break; |
294 |
} |
} |
295 |
continue; |
continue; |
296 |
} |
} |
297 |
if (ui->email) { |
if (email && ui->email) { |
298 |
if (!strcmp (ui->email, email)) { |
if (!strcmp (ui->email, email)) { |
299 |
pos = ui->index; |
pos = ui->index; |
300 |
break; |
break; |
303 |
as the fallbck when no email address is available. */ |
as the fallbck when no email address is available. */ |
304 |
continue; |
continue; |
305 |
} |
} |
306 |
if (ui_name && name && !strcmp (ui_name, name)) { |
if (ui->name && name && !strcmp (ui->name, name)) { |
307 |
pos = ui->index; |
pos = ui->index; |
308 |
break; |
break; |
309 |
} |
} |
312 |
*r_inf = inf; |
*r_inf = inf; |
313 |
else |
else |
314 |
gpg_uid_info_release (inf); |
gpg_uid_info_release (inf); |
|
safe_free (ui_name); |
|
315 |
return pos; |
return pos; |
316 |
} |
} |
317 |
|
|
448 |
SetForegroundWindow (dlg); |
SetForegroundWindow (dlg); |
449 |
break; |
break; |
450 |
|
|
|
case WM_DESTROY: |
|
|
break; |
|
|
|
|
451 |
case WM_SYSCOMMAND: |
case WM_SYSCOMMAND: |
452 |
if (LOWORD (wparam) == SC_CLOSE) |
if (LOWORD (wparam) == SC_CLOSE) |
453 |
EndDialog (dlg, FALSE); |
EndDialog (dlg, FALSE); |
585 |
{ |
{ |
586 |
const char *sizelist[] = { |
const char *sizelist[] = { |
587 |
"1024", "1536", |
"1024", "1536", |
588 |
"2048", "2560", |
"2048", "3072", |
|
"3072", "3854", |
|
589 |
"4096", NULL |
"4096", NULL |
590 |
}; |
}; |
591 |
int i; |
int i; |
607 |
if (pos == CB_ERR) |
if (pos == CB_ERR) |
608 |
return -1; |
return -1; |
609 |
SendDlgItemMessage (dlg, ctlid, CB_GETLBTEXT, pos, (LPARAM)(char*)buf); |
SendDlgItemMessage (dlg, ctlid, CB_GETLBTEXT, pos, (LPARAM)(char*)buf); |
610 |
return atol (buf); |
return atoi (buf); |
611 |
} |
} |
612 |
|
|
613 |
|
|
728 |
|
|
729 |
err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid); |
err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid); |
730 |
keygen->fpr = get_subkey_keyid (ctx->keyid); |
keygen->fpr = get_subkey_keyid (ctx->keyid); |
731 |
keygen_cb_dlg_destroy (); |
keygen_cb_dlg_destroy (1); |
|
keygen_cb (NULL, NULL, 0, 0, 0); /* flush */ |
|
732 |
if (err) |
if (err) |
733 |
msg_box (dlg, gpgme_strerror (err), _("Add Subkey"), MB_ERR); |
msg_box (dlg, gpgme_strerror (err), _("Add Subkey"), MB_ERR); |
734 |
else { |
else { |
1071 |
subkey_list_init (HWND dlg, winpt_key_t k) |
subkey_list_init (HWND dlg, winpt_key_t k) |
1072 |
{ |
{ |
1073 |
LV_ITEM lvi; |
LV_ITEM lvi; |
|
gpgme_key_t key; |
|
1074 |
gpgme_subkey_t sub; |
gpgme_subkey_t sub; |
1075 |
struct listview_column_s cols[] = { |
struct listview_column_s cols[] = { |
1076 |
{0, 80, (char *)_("Description")}, |
{0, 80, (char *)_("Description")}, |
1087 |
listview_ctrl_t lv; |
listview_ctrl_t lv; |
1088 |
char buf[256], tmp[128]; |
char buf[256], tmp[128]; |
1089 |
const char *t; |
const char *t; |
1090 |
int nkeys = 0, rc = 0, i, bits; |
int nkeys = 0, i, bits; |
1091 |
|
|
1092 |
if (get_pubkey (k->keyid, &key)) { |
nkeys = count_subkeys (k->ctx); |
|
msg_box (dlg, _("Could not find key."), _("Key Edit"), MB_ERR); |
|
|
return NULL; |
|
|
} |
|
|
if (!k->ctx) |
|
|
k->ctx = key; |
|
|
nkeys = count_subkeys (key); |
|
1093 |
if( !nkeys ) { |
if( !nkeys ) { |
1094 |
msg_box (dlg, _("No subkey(s) found."), _("Key Edit"), MB_ERR); |
msg_box (dlg, _("No subkey(s) found."), _("Key Edit"), MB_ERR); |
1095 |
return NULL; |
return NULL; |
1096 |
} |
} |
1097 |
|
|
1098 |
rc = listview_new( &lv ); |
listview_new (&lv, GetDlgItem (dlg, IDC_KEYEDIT_KEYLIST)); |
1099 |
if( rc ) |
for (i = 0; cols[i].fieldname != NULL; i++) |
1100 |
BUG( dlg ); |
listview_add_column (lv, &cols[i]); |
|
|
|
|
lv->ctrl = GetDlgItem( dlg, IDC_KEYEDIT_KEYLIST ); |
|
|
for( i = 0; cols[i].fieldname != NULL; i++ ) |
|
|
listview_add_column( lv, &cols[i] ); |
|
1101 |
|
|
1102 |
for( i = 0; i < nkeys; i++ ) { |
for( i = 0; i < nkeys; i++ ) { |
1103 |
listview_add_item( lv, "" ); |
listview_add_item( lv, "" ); |
1104 |
listview_add_sub_item( lv, 0, 1, "" ); |
listview_add_sub_item( lv, 0, 1, "" ); |
1105 |
memset( &lvi, 0, sizeof lvi ); |
memset( &lvi, 0, sizeof lvi ); |
1106 |
lvi.mask = LVIF_PARAM; |
lvi.mask = LVIF_PARAM; |
1107 |
lvi.lParam = (LPARAM)key; |
lvi.lParam = (LPARAM)k->ctx; |
1108 |
if( ListView_SetItem( lv->ctrl, &lvi ) == FALSE ) |
if( ListView_SetItem( lv->ctrl, &lvi ) == FALSE ) |
1109 |
return NULL; |
return NULL; |
1110 |
} |
} |
1111 |
|
|
1112 |
listview_set_ext_style( lv ); |
listview_set_ext_style( lv ); |
1113 |
for( i = 0, sub = key->subkeys; i < nkeys; i++, sub = sub->next ) { |
for( i = 0, sub = k->ctx->subkeys; i < nkeys; i++, sub = sub->next ) { |
1114 |
memset( buf, 0, sizeof buf ); |
memset( buf, 0, sizeof buf ); |
1115 |
|
|
1116 |
bits = sub->length; |
bits = sub->length; |
1164 |
userid_list_init (HWND dlg, winpt_key_t k) |
userid_list_init (HWND dlg, winpt_key_t k) |
1165 |
{ |
{ |
1166 |
listview_ctrl_t lv = NULL; |
listview_ctrl_t lv = NULL; |
|
gpgme_key_t key; |
|
1167 |
gpgme_key_sig_t ks; |
gpgme_key_sig_t ks; |
1168 |
gpgme_user_id_t u; |
struct native_uid_s *u; |
1169 |
int nuids = 0, rc, j, u_attr; |
int nuids = 0, j, u_attr; |
1170 |
struct listview_column_s cols[] = { |
struct listview_column_s cols[] = { |
1171 |
{0, 72, (char *)_("Validity")}, |
{0, 72, (char *)_("Validity")}, |
1172 |
{1, 150, (char *)_("Name")}, |
{1, 150, (char *)_("Name")}, |
1175 |
{0, 0, 0} |
{0, 0, 0} |
1176 |
}; |
}; |
1177 |
const char *attr; |
const char *attr; |
|
|
|
|
if (get_pubkey (k->keyid, &key)) { |
|
|
msg_box (dlg, _("Could not find key."), _("Key Edit"), MB_ERR); |
|
|
return NULL; |
|
|
} |
|
1178 |
|
|
1179 |
nuids = count_userids (key); |
nuids = count_userids (k->ctx); |
1180 |
if (!nuids) { |
if (!nuids) { |
1181 |
msg_box (dlg, _("No user ID(s) found."), _("Key Edit"), MB_ERR); |
msg_box (dlg, _("No user ID(s) found."), _("Key Edit"), MB_ERR); |
1182 |
return NULL; |
return NULL; |
1183 |
} |
} |
1184 |
|
|
1185 |
rc = listview_new (&lv); |
listview_new (&lv, GetDlgItem (dlg, IDC_KEYEDIT_UIDLIST)); |
|
if (rc) |
|
|
BUG (dlg); |
|
|
lv->ctrl = GetDlgItem( dlg, IDC_KEYEDIT_UIDLIST ); |
|
1186 |
for( j = 0; cols[j].fieldname != NULL; j++ ) |
for( j = 0; cols[j].fieldname != NULL; j++ ) |
1187 |
listview_add_column( lv, &cols[j] ); |
listview_add_column (lv, &cols[j]); |
1188 |
|
|
1189 |
for( j = 0; j < nuids; j++ ) { |
for (j = 0; j < nuids; j++) { |
1190 |
listview_add_item( lv, " " ); |
listview_add_item (lv, " "); |
1191 |
listview_add_sub_item( lv, 0, 1, " " ); |
listview_add_sub_item (lv, 0, 1, " " ); |
1192 |
} |
} |
1193 |
|
|
1194 |
listview_set_ext_style (lv); |
listview_set_ext_style (lv); |
1195 |
for (j = 0, u=key->uids; j < nuids; u=u->next, j++) { |
for (j = 0, u=k->ext->uids; j < nuids; u=u->next, j++) { |
1196 |
if (u->revoked) |
if (u->revoked) |
1197 |
attr = _("Revoked"); |
attr = _("Revoked"); |
1198 |
else { |
else { |
1199 |
u_attr = (int)u->validity; |
u_attr = (int)u->validity; |
1200 |
attr = get_key_trust2 (NULL, u_attr, 0, 0); |
attr = get_key_trust2 (NULL, u_attr, 0, 0); |
1201 |
} |
} |
1202 |
listview_add_sub_item (lv, j, 0, (char *)attr); |
listview_add_sub_item (lv, j, UID_COL_VALID, (char *)attr); |
1203 |
/* XXX: add comment if available */ |
/* XXX: add comment if available */ |
1204 |
listview_add_sub_item (lv, j, 1, |
listview_add_sub_item (lv, j, UID_COL_NAME, |
1205 |
u->name? u->name : _("Invalid user ID")); |
u->name? u->name : _("Invalid user ID")); |
1206 |
if (u->email) |
if (u->email) |
1207 |
listview_add_sub_item (lv, j, 2, u->email); |
listview_add_sub_item (lv, j, UID_COL_EMAIL, u->email); |
1208 |
|
|
1209 |
ks = get_selfsig (u, k->keyid, 1); |
ks = get_selfsig (u->signatures, k->keyid, 1); |
1210 |
if (ks) |
if (ks) |
1211 |
listview_add_sub_item (lv, j, 3, get_key_created (ks->timestamp)); |
listview_add_sub_item (lv, j, UID_COL_CREATION, |
1212 |
|
get_key_created (ks->timestamp)); |
1213 |
} |
} |
1214 |
if( !k->key_pair ) { |
if( !k->key_pair ) { |
1215 |
CheckDlgButton( dlg, IDC_KEYUID_ADD, BST_INDETERMINATE ); |
CheckDlgButton (dlg, IDC_KEYUID_ADD, BST_INDETERMINATE); |
1216 |
CheckDlgButton( dlg, IDC_KEYUID_REVOKE, BST_INDETERMINATE ); |
CheckDlgButton (dlg, IDC_KEYUID_REVOKE, BST_INDETERMINATE); |
1217 |
} |
} |
1218 |
return lv; |
return lv; |
1219 |
} |
} |
1280 |
"SIGN \t\tsign a user-id (exportable)\r\n" |
"SIGN \t\tsign a user-id (exportable)\r\n" |
1281 |
"LSIGN \t\tsign a user-id (non-exportable)\r\n" |
"LSIGN \t\tsign a user-id (non-exportable)\r\n" |
1282 |
"CLEAN \t\tremove unusable signatures from key\r\n" |
"CLEAN \t\tremove unusable signatures from key\r\n" |
1283 |
|
"MINIMIZE \t\tremove all signatures from key\r\n" |
1284 |
)); |
)); |
1285 |
msg_box (dlg, helptext, _("Key Edit Help"), MB_OK); |
msg_box (dlg, helptext, _("Key Edit Help"), MB_OK); |
1286 |
} |
} |
1684 |
showpref_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
showpref_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
1685 |
{ |
{ |
1686 |
static keyedit_cb_t cb = NULL; |
static keyedit_cb_t cb = NULL; |
1687 |
gpg_uid_info_t inf=NULL; |
gpg_uid_info_t inf=NULL, u; |
1688 |
gpgme_key_t key; |
gpgme_key_t key; |
1689 |
char buf[128]; |
char buf[128]; |
1690 |
int pos; |
int pos; |
1695 |
if (!cb) |
if (!cb) |
1696 |
BUG (NULL); |
BUG (NULL); |
1697 |
key = (gpgme_key_t)cb->opaque; |
key = (gpgme_key_t)cb->opaque; |
1698 |
_snprintf (buf, sizeof (buf)-1, "%s <%s>", |
listview_get_item_text (cb->lv, cb->lv_pos, |
1699 |
key->uids->name, key->uids->email); |
UID_COL_EMAIL, buf, sizeof (buf)-1); |
1700 |
SetDlgItemText (dlg, IDC_SHOWPREF_INFO, buf); |
pos = do_find_userid (cb->keyid, buf, NULL, &inf); |
1701 |
pos = do_find_userid (cb->keyid, key->uids->email, NULL, &inf); |
if (pos < 0 || !inf) { |
|
if (inf) { |
|
|
const char *prefs = inf->prefs; |
|
|
if (prefs && *prefs) { |
|
|
if (parse_preflist (dlg, prefs) <= 0) |
|
|
pos = -1; |
|
|
} |
|
|
else |
|
|
pos = -1; |
|
1702 |
gpg_uid_info_release (inf); |
gpg_uid_info_release (inf); |
1703 |
if (pos == -1) { |
EndDialog (dlg, FALSE); |
1704 |
msg_box (dlg, _("No preferences available."), _("Key Edit"), MB_ERR); |
break; |
1705 |
EndDialog (dlg, TRUE); |
} |
1706 |
|
for (u=inf; u; u = u->next) { |
1707 |
|
if (u->index == pos && u->prefs && *u->prefs) { |
1708 |
|
_snprintf (buf, sizeof (buf)-1, "%s", u->name); |
1709 |
|
SetDlgItemText (dlg, IDC_SHOWPREF_INFO, buf); |
1710 |
|
if (parse_preflist (dlg, u->prefs) <= 0) |
1711 |
|
pos = -1; |
1712 |
|
if (u->flags.mdc) |
1713 |
|
CheckDlgButton (dlg, IDC_SHOWPREF_MDC, BST_CHECKED); |
1714 |
|
break; |
1715 |
} |
} |
1716 |
if (inf->flags.mdc) |
} |
1717 |
CheckDlgButton (dlg, IDC_SHOWPREF_MDC, BST_CHECKED); |
gpg_uid_info_release (inf); |
1718 |
|
if (pos == -1) { |
1719 |
|
msg_box (dlg, _("No preferences available."), _("Key Edit"), MB_ERR); |
1720 |
|
EndDialog (dlg, FALSE); |
1721 |
|
break; |
1722 |
} |
} |
1723 |
SetDlgItemText (dlg, IDC_SHOWPREF_MDC, _("MDC feature")); |
SetDlgItemText (dlg, IDC_SHOWPREF_MDC, _("MDC feature")); |
1724 |
SetDlgItemText (dlg, IDC_SHOWPREF_PREFINF, _("Preferences")); |
SetDlgItemText (dlg, IDC_SHOWPREF_PREFINF, _("Preferences")); |
1732 |
case IDOK: |
case IDOK: |
1733 |
EndDialog (dlg, TRUE); |
EndDialog (dlg, TRUE); |
1734 |
break; |
break; |
1735 |
|
|
1736 |
|
case IDCANCEL: |
1737 |
|
EndDialog (dlg, FALSE); |
1738 |
|
break; |
1739 |
} |
} |
1740 |
break; |
break; |
1741 |
} |
} |
1747 |
do_editkey_showpref (winpt_key_t k, HWND dlg, listview_ctrl_t lv) |
do_editkey_showpref (winpt_key_t k, HWND dlg, listview_ctrl_t lv) |
1748 |
{ |
{ |
1749 |
struct keyedit_cb_s cb; |
struct keyedit_cb_s cb; |
1750 |
|
char status[32]; |
1751 |
|
|
1752 |
if (k->is_v3) |
if (k->is_v3) |
1753 |
return TRUE; |
return TRUE; |
1756 |
msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR); |
msg_box (dlg, _("Please select a user ID."), _("Key Edit"), MB_ERR); |
1757 |
return FALSE; |
return FALSE; |
1758 |
} |
} |
|
|
|
1759 |
memset (&cb, 0, sizeof (cb)); |
memset (&cb, 0, sizeof (cb)); |
1760 |
cb.opaque = k->ctx; |
cb.opaque = k->ctx; |
1761 |
cb.keyid = k->keyid; |
cb.keyid = k->keyid; |
1762 |
|
cb.lv = lv; |
1763 |
|
cb.lv_pos = listview_get_curr_pos (lv); |
1764 |
|
|
1765 |
|
listview_get_item_text (lv, cb.lv_pos, UID_COL_VALID, |
1766 |
|
status, sizeof (status)-1); |
1767 |
|
if (!strcmp (status, _("Revoked"))) |
1768 |
|
return TRUE; |
1769 |
|
|
1770 |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT_SHOWPREF, dlg, |
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT_SHOWPREF, dlg, |
1771 |
showpref_dlg_proc, (LPARAM)&cb); |
showpref_dlg_proc, (LPARAM)&cb); |
1772 |
return TRUE; |
return TRUE; |
1916 |
|
|
1917 |
|
|
1918 |
static void |
static void |
1919 |
|
do_editkey_minimize (winpt_key_t k, HWND dlg) |
1920 |
|
{ |
1921 |
|
gpgme_error_t err; |
1922 |
|
GpgKeyEdit *ke; |
1923 |
|
|
1924 |
|
ke = create_GpgKeyEdit (k->keyid); |
1925 |
|
err = ke->minimizeKey (); |
1926 |
|
if (err) |
1927 |
|
msg_box (dlg, gpgme_strerror (err), _("Key Edit"), MB_ERR); |
1928 |
|
else { |
1929 |
|
msg_box (dlg, _("Finished to compact key."), _("Key Edit"), MB_OK); |
1930 |
|
k->update = 1; |
1931 |
|
} |
1932 |
|
delete ke; |
1933 |
|
} |
1934 |
|
|
1935 |
|
|
1936 |
|
static void |
1937 |
do_editkey_clean (winpt_key_t k, HWND dlg) |
do_editkey_clean (winpt_key_t k, HWND dlg) |
1938 |
{ |
{ |
1939 |
gpgme_error_t err; |
gpgme_error_t err; |
2034 |
} |
} |
2035 |
|
|
2036 |
|
|
2037 |
|
|
2038 |
|
gpgme_error_t key_get_revokers (winpt_key_t key, int reload, |
2039 |
|
gpg_desig_rev_t *r_rev); |
2040 |
|
|
2041 |
|
/* Check if the key supports designated revokers and if |
2042 |
|
secret keys exist to generate such a revoke cert. */ |
2043 |
|
static bool |
2044 |
|
check_desig_rev (winpt_key_t key) |
2045 |
|
{ |
2046 |
|
gpg_desig_rev_t rev, u; |
2047 |
|
struct winpt_key_s sk; |
2048 |
|
|
2049 |
|
if (!key->ext->gloflags.has_desig_rev) |
2050 |
|
return false; |
2051 |
|
key_get_revokers (key, 0, &rev); |
2052 |
|
for (u = rev; u; u = u->next) { |
2053 |
|
memset (&sk, 0, sizeof (sk)); |
2054 |
|
if (!winpt_get_seckey (u->fpr+32, &sk)) |
2055 |
|
return true; |
2056 |
|
} |
2057 |
|
return false; |
2058 |
|
} |
2059 |
|
|
2060 |
|
|
2061 |
|
/* Use the gpg --desig-revoker command to create a revocation |
2062 |
|
cert for a key that lists our key as a designated revoker. */ |
2063 |
|
static void |
2064 |
|
gen_desig_revoke_cert (winpt_key_t key, HWND dlg) |
2065 |
|
{ |
2066 |
|
const char *warn; |
2067 |
|
char *inf, *p; |
2068 |
|
int id; |
2069 |
|
|
2070 |
|
inf = km_key_get_info (key, 0); |
2071 |
|
warn = _("Your keys is listed as a designated revoker for the key\n\n" |
2072 |
|
"%s\n\n" |
2073 |
|
"Are you sure you want to create a revocation certificate\n" |
2074 |
|
"which allow to revoke the key listed above?"); |
2075 |
|
p = new char[strlen (inf)+1+strlen (warn)+1]; |
2076 |
|
sprintf (p, warn, inf); |
2077 |
|
free_if_alloc (inf); |
2078 |
|
|
2079 |
|
id = msg_box (dlg, p, _("Key Edit"), MB_YESNO|MB_ICONWARNING); |
2080 |
|
free_if_alloc (p); |
2081 |
|
if (id == IDNO) |
2082 |
|
return; |
2083 |
|
|
2084 |
|
key->internal = 1; |
2085 |
|
DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_KEYREVOKE, dlg, |
2086 |
|
key_revoke_dlg_proc, (LPARAM)key); |
2087 |
|
} |
2088 |
|
|
2089 |
|
|
2090 |
/* Dialog box procedure for the edit key dialog. */ |
/* Dialog box procedure for the edit key dialog. */ |
2091 |
BOOL CALLBACK |
BOOL CALLBACK |
2092 |
keyedit_main_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
keyedit_main_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam) |
2141 |
SetDlgItemText (dlg, IDC_KEYEDIT_CMDINF, _("Command>")); |
SetDlgItemText (dlg, IDC_KEYEDIT_CMDINF, _("Command>")); |
2142 |
SetDlgItemText (dlg, IDCANCEL, _("&Close")); |
SetDlgItemText (dlg, IDCANCEL, _("&Close")); |
2143 |
SetDlgItemText (dlg, IDC_KEYEDIT_HELP, _("&Help")); |
SetDlgItemText (dlg, IDC_KEYEDIT_HELP, _("&Help")); |
2144 |
|
SetDlgItemText (dlg, IDC_KEYEDIT_REVOKE, _("&Revoke...")); |
2145 |
|
if (!check_desig_rev (k)) |
2146 |
|
ShowWindow (GetDlgItem (dlg, IDC_KEYEDIT_REVOKE), SW_HIDE); |
2147 |
SetWindowText (dlg, _("Key Edit")); |
SetWindowText (dlg, _("Key Edit")); |
2148 |
SetForegroundWindow (dlg); |
SetForegroundWindow (dlg); |
2149 |
center_window (dlg, NULL); |
center_window (dlg, NULL); |
2204 |
lvuid, cmd); |
lvuid, cmd); |
2205 |
break; |
break; |
2206 |
case CMD_CLEAN: do_editkey_clean (k, dlg); |
case CMD_CLEAN: do_editkey_clean (k, dlg); |
2207 |
|
case CMD_MINIMIZE: do_editkey_minimize (k, dlg); |
2208 |
} |
} |
2209 |
break; |
break; |
2210 |
|
|
2211 |
case IDCANCEL: |
case IDCANCEL: |
2212 |
EndDialog (dlg, FALSE); |
EndDialog (dlg, FALSE); |
2213 |
break; |
break; |
2215 |
case IDC_KEYEDIT_HELP: |
case IDC_KEYEDIT_HELP: |
2216 |
do_show_help (dlg); |
do_show_help (dlg); |
2217 |
break; |
break; |
2218 |
|
|
2219 |
|
case IDC_KEYEDIT_REVOKE: |
2220 |
|
gen_desig_revoke_cert (k, dlg); |
2221 |
|
break; |
2222 |
} |
} |
2223 |
break; |
break; |
2224 |
} |
} |