113 |
|
|
114 |
int keygen_check_date (SYSTEMTIME *st); |
int keygen_check_date (SYSTEMTIME *st); |
115 |
void get_userid_preflist (char **r_prefs, int * r_flags); |
void get_userid_preflist (char **r_prefs, int * r_flags); |
116 |
char* get_subkey_fingerprint (const char *keyid); |
char* get_subkey_keyid (const char *keyid); |
117 |
|
|
118 |
|
|
119 |
/* Associate each key with a combo box entry. |
/* Associate each key with a combo box entry. |
195 |
_snprintf (info, sizeof info-1, "%d-bit %s", |
_snprintf (info, sizeof info-1, "%d-bit %s", |
196 |
keygen->bits, |
keygen->bits, |
197 |
get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo)); |
get_key_pubalgo ((gpgme_pubkey_algo_t)keygen->algo)); |
198 |
_snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+32); |
_snprintf (keyid, sizeof keyid-1, "0x%s", keygen->fpr+8); |
199 |
n = listview_count_items (lv, 0); |
n = listview_count_items (lv, 0); |
200 |
listview_add_item_pos (lv, n); |
listview_add_item_pos (lv, n); |
201 |
listview_add_sub_item (lv, n, 0, info); |
listview_add_sub_item (lv, n, 0, info); |
202 |
listview_add_sub_item (lv, n, 1, keyid); |
listview_add_sub_item (lv, n, 1, keyid); |
203 |
listview_add_sub_item (lv, n, 2, get_key_created (time (NULL))); |
listview_add_sub_item (lv, n, 2, get_key_created (time (NULL))); |
204 |
listview_add_sub_item (lv, n, 3, expdate); |
listview_add_sub_item (lv, n, 3, expdate); |
205 |
if (flags & KM_FLAG_REVOKED) s = _("Revoked"); |
if (flags & KM_FLAG_REVOKED) |
206 |
else if (flags & KM_FLAG_EXPIRED) s = _("Expired"); |
s = _("Revoked"); |
207 |
else s = _("OK"); |
else if (flags & KM_FLAG_EXPIRED) |
208 |
|
s = _("Expired"); |
209 |
|
else |
210 |
|
s = _("OK"); |
211 |
listview_add_sub_item (lv, n, 4, s); |
listview_add_sub_item (lv, n, 4, s); |
212 |
} /* do_add_new_subkey */ |
} |
213 |
|
|
214 |
|
|
215 |
/* Try to find the GPG edit key index which belongs to the user ID |
/* Try to find the GPG edit key index which belongs to the user ID |
613 |
return FALSE; |
return FALSE; |
614 |
|
|
615 |
case WM_SYSCOMMAND: |
case WM_SYSCOMMAND: |
616 |
if( LOWORD (wparam) == SC_CLOSE ) { |
if (LOWORD (wparam) == SC_CLOSE) { |
617 |
EndDialog( dlg, TRUE ); |
EndDialog (dlg, TRUE); |
618 |
} |
} |
619 |
return FALSE; |
return FALSE; |
620 |
|
|
621 |
case WM_COMMAND: |
case WM_COMMAND: |
622 |
if (HIWORD (wparam) == BN_CLICKED && LOWORD (wparam) == IDC_ADDSUBKEY_EXPIRE) { |
if (HIWORD (wparam) == BN_CLICKED && |
623 |
|
LOWORD (wparam) == IDC_ADDSUBKEY_EXPIRE) { |
624 |
if (IsDlgButtonChecked (dlg, IDC_ADDSUBKEY_EXPIRE)) |
if (IsDlgButtonChecked (dlg, IDC_ADDSUBKEY_EXPIRE)) |
625 |
EnableWindow (GetDlgItem (dlg, IDC_ADDSUBKEY_EXPDATE), FALSE); |
EnableWindow (GetDlgItem (dlg, IDC_ADDSUBKEY_EXPDATE), FALSE); |
626 |
else |
else |
627 |
EnableWindow (GetDlgItem (dlg, IDC_ADDSUBKEY_EXPDATE), TRUE); |
EnableWindow (GetDlgItem (dlg, IDC_ADDSUBKEY_EXPDATE), TRUE); |
628 |
} |
} |
629 |
if (HIWORD (wparam) == LBN_SELCHANGE && LOWORD (wparam) == IDC_ADDSUBKEY_ALGO) { |
if (HIWORD (wparam) == LBN_SELCHANGE && |
630 |
|
LOWORD (wparam) == IDC_ADDSUBKEY_ALGO) { |
631 |
index = SendMessage ((HWND)lparam, LB_GETCURSEL, 0, 0); |
index = SendMessage ((HWND)lparam, LB_GETCURSEL, 0, 0); |
632 |
if (index == 0) |
if (index == 0) |
633 |
SendDlgItemMessage (dlg, IDC_ADDSUBKEY_SIZE, CB_SETCURSEL, 0, 0); |
SendDlgItemMessage (dlg, IDC_ADDSUBKEY_SIZE, CB_SETCURSEL, 0, 0); |
634 |
} |
} |
635 |
|
|
636 |
switch ( LOWORD(wparam) ) { |
switch (LOWORD (wparam)) { |
637 |
case IDOK: |
case IDOK: |
638 |
lb = GetDlgItem (dlg, IDC_ADDSUBKEY_ALGO); |
lb = GetDlgItem (dlg, IDC_ADDSUBKEY_ALGO); |
639 |
switch (listbox_get_cursel (lb)) { |
switch (listbox_get_cursel (lb)) { |
641 |
case 1: index = 4; break; |
case 1: index = 4; break; |
642 |
case 2: index = 5; break; |
case 2: index = 5; break; |
643 |
case 3: index = 6; break; |
case 3: index = 6; break; |
644 |
default: |
default: |
645 |
msg_box( dlg, _("Please select one entry."), _("Add Subkey"), MB_ERR ); |
msg_box (dlg, _("Please select one entry."), _("Add Subkey"), MB_ERR); |
646 |
return FALSE; |
return FALSE; |
647 |
} |
} |
648 |
size = get_keysize_from_box (dlg, IDC_ADDSUBKEY_SIZE); |
size = get_keysize_from_box (dlg, IDC_ADDSUBKEY_SIZE); |
649 |
if (index == 2 && size != 1024) { |
if (index == 2 && size != 1024) { |
650 |
msg_box( dlg,_("DSS uses a fixed keysize of 1024. Size changed."), _("Add Subkey"), MB_INFO ); |
msg_box (dlg,_("DSS uses a fixed keysize of 1024. Size changed."), |
651 |
|
_("Add Subkey"), MB_INFO); |
652 |
size = 1024; |
size = 1024; |
653 |
} |
} |
654 |
valid = diff_time (GetDlgItem (dlg, IDC_ADDSUBKEY_EXPDATE), NULL); |
valid = diff_time (GetDlgItem (dlg, IDC_ADDSUBKEY_EXPDATE), NULL); |
|
|
|
655 |
keygen->bits = size; |
keygen->bits = size; |
656 |
switch (index) { |
switch (index) { |
657 |
case 2: keygen->algo = GPGME_PK_DSA; break; |
case 2: keygen->algo = GPGME_PK_DSA; break; |
667 |
BUG (NULL); |
BUG (NULL); |
668 |
ke->setCallback (keygen_cb, NULL); |
ke->setCallback (keygen_cb, NULL); |
669 |
if (ctx->pass) |
if (ctx->pass) |
670 |
ke->setPassphrase (ctx->pass); |
ke->setPassphrase (ctx->pass); |
671 |
keygen_cb_dlg_create (); |
keygen_cb_dlg_create (); |
672 |
|
|
673 |
err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid); |
err = ke->addSubkey ((gpgme_pubkey_algo_t)index, size, valid); |
674 |
keygen->fpr = get_subkey_fingerprint (ctx->keyid); |
keygen->fpr = get_subkey_keyid (ctx->keyid); |
675 |
keygen_cb_dlg_destroy (); |
keygen_cb_dlg_destroy (); |
676 |
keygen_cb (NULL, NULL, 0, 0, 0); /* flush */ |
keygen_cb (NULL, NULL, 0, 0, 0); /* flush */ |
677 |
if (err) |
if (err) |
679 |
else { |
else { |
680 |
msg_box (dlg, _("Subkey successfully added."), _("GnuPG Status"), MB_OK); |
msg_box (dlg, _("Subkey successfully added."), _("GnuPG Status"), MB_OK); |
681 |
if (ctx->lv) |
if (ctx->lv) |
682 |
do_add_new_subkey (ctx->lv, keygen, /*XXXk->flags*/0); |
do_add_new_subkey (ctx->lv, keygen, 0); |
683 |
ctx->finished = 1; |
ctx->finished = 1; |
684 |
} |
} |
685 |
delete ke; |
delete ke; |
733 |
|
|
734 |
|
|
735 |
char* |
char* |
736 |
get_subkey_fingerprint (const char *keyid) |
get_subkey_keyid (const char *keyid) |
737 |
{ |
{ |
738 |
gpgme_error_t err; |
gpgme_error_t err; |
739 |
gpgme_key_t key, main; |
gpgme_key_t key; |
740 |
gpgme_ctx_t ctx; |
gpgme_ctx_t ctx; |
741 |
gpgme_subkey_t last_sk, k, new_sk; |
gpgme_subkey_t subk; |
742 |
int n; |
char *kid; |
743 |
|
|
744 |
err = gpgme_new (&ctx); |
err = gpgme_new (&ctx); |
745 |
if (err) |
if (err) |
746 |
return NULL; |
return NULL; |
747 |
err = gpgme_get_key (ctx, keyid, &key, 0); |
err = gpgme_get_key (ctx, keyid, &key, 0); |
748 |
|
gpgme_release (ctx); |
749 |
if (err) |
if (err) |
750 |
return NULL; |
return NULL; |
751 |
/* XXX: this is very slow and complicated */ |
subk = get_nth_key (key, count_subkeys (key)); |
752 |
|
kid = strdup (subk->keyid); |
|
n = count_subkeys (key); |
|
|
last_sk = get_nth_key (key, n-1); |
|
|
new_sk = (gpgme_subkey_t)calloc (1, sizeof *new_sk); |
|
|
if (!new_sk) |
|
|
BUG (NULL); |
|
|
memcpy (new_sk, last_sk, sizeof *last_sk); |
|
|
new_sk->fpr = strdup (last_sk->fpr); |
|
|
new_sk->keyid = strdup (last_sk->keyid); |
|
|
|
|
|
get_pubkey (keyid, &main); |
|
|
for (k=main->subkeys; k->next; k=k->next) |
|
|
; |
|
|
k->next = new_sk; |
|
|
|
|
753 |
gpgme_key_release (key); |
gpgme_key_release (key); |
754 |
return new_sk->fpr; |
return kid; |
755 |
} |
} |
756 |
|
|
757 |
|
|
775 |
|
|
776 |
memset (&keygen, 0, sizeof (keygen)); |
memset (&keygen, 0, sizeof (keygen)); |
777 |
memset (&cb, 0, sizeof (cb)); |
memset (&cb, 0, sizeof (cb)); |
778 |
|
cb.lv = lv; |
779 |
cb.keyid = k->keyid; |
cb.keyid = k->keyid; |
780 |
cb.pass = k->is_protected? pass : NULL; |
cb.pass = k->is_protected? pass : NULL; |
781 |
cb.opaque = &keygen; |
cb.opaque = &keygen; |
783 |
dlg, keyedit_addsubkey_dlg_proc, |
dlg, keyedit_addsubkey_dlg_proc, |
784 |
(LPARAM)&cb, _("Add new Subkey"), |
(LPARAM)&cb, _("Add new Subkey"), |
785 |
IDS_WINPT_KEYEDIT_ADDSUBKEY); |
IDS_WINPT_KEYEDIT_ADDSUBKEY); |
786 |
|
safe_free (keygen.fpr); |
787 |
if (cb.finished) |
if (cb.finished) |
788 |
k->update = 1; |
k->update = 1; |
789 |
|
|