62 |
int checked; |
int checked; |
63 |
}; |
}; |
64 |
|
|
|
static int keylist_add_key( listview_ctrl_t lv, int mode, gpgme_key_t key ); |
|
65 |
static int find_secret_key( gpgme_key_t key ); |
static int find_secret_key( gpgme_key_t key ); |
66 |
|
|
67 |
|
|
184 |
n = gpgme_key_count_items( key, GPGME_ATTR_KEYID ); |
n = gpgme_key_count_items( key, GPGME_ATTR_KEYID ); |
185 |
if( n > 1 ) { |
if( n > 1 ) { |
186 |
size_sub = gpgme_key_get_ulong_attr( key, GPGME_ATTR_LEN, NULL, n-1 ); |
size_sub = gpgme_key_get_ulong_attr( key, GPGME_ATTR_LEN, NULL, n-1 ); |
187 |
_snprintf( size_id, sizeof size_id - 1, "%d/%d", size_main, size_sub ); |
_snprintf( size_id, sizeof (size_id) - 1, "%d/%d", size_main, size_sub ); |
188 |
return size_id; |
return size_id; |
189 |
} |
} |
190 |
_snprintf( size_id, sizeof size_id - 1, "%d", size_main ); |
_snprintf( size_id, sizeof (size_id) - 1, "%d", size_main ); |
191 |
return size_id; |
return size_id; |
192 |
} /* get_key_size */ |
} /* get_key_size */ |
193 |
|
|
197 |
{ |
{ |
198 |
static char fpr_md[64]; |
static char fpr_md[64]; |
199 |
const char * fpr; |
const char * fpr; |
200 |
char t[16]; |
char t[16], tmp[40]; |
201 |
size_t i; |
size_t i; |
202 |
|
|
203 |
memset( fpr_md, 0, sizeof fpr_md ); |
memset (fpr_md, 0, sizeof (fpr_md)); |
204 |
fpr = gpgme_key_get_string_attr( key, GPGME_ATTR_FPR, NULL, 0 ); |
fpr = gpgme_key_get_string_attr (key, GPGME_ATTR_FPR, NULL, 0); |
205 |
for( i = 0; i < strlen( fpr ) / 4; i++ ) { |
if (!fpr || !*fpr) { |
206 |
sprintf( t, "%c%c%c%c ", fpr[4*i], fpr[4*i+1], fpr[4*i+2], fpr[4*i+3] ); |
memset (tmp, '0', 40); |
207 |
strcat( fpr_md, t ); |
fpr = tmp; |
208 |
|
} |
209 |
|
for (i = 0; i < strlen (fpr) / 4; i++) { |
210 |
|
sprintf (t, "%c%c%c%c ", fpr[4*i], fpr[4*i+1], fpr[4*i+2], fpr[4*i+3]); |
211 |
|
strcat (fpr_md, t); |
212 |
} |
} |
213 |
return fpr_md; |
return fpr_md; |
214 |
} /* get_key_fpr */ |
} /* get_key_fpr */ |
455 |
|
|
456 |
|
|
457 |
static void |
static void |
458 |
keylist_load_keycache( listview_ctrl_t lv, int mode, gpgme_keycache_t pubkc, |
keylist_load_keycache (listview_ctrl_t lv, int mode, |
459 |
gpgme_keycache_t seckc ) |
gpgme_keycache_t pubkc, gpgme_keycache_t seckc) |
460 |
{ |
{ |
461 |
gpgme_error_t err = GPGME_No_Error; |
gpgme_error_t err = GPGME_No_Error; |
462 |
gpgme_key_t key, skey; |
gpgme_key_t key, skey; |
467 |
while( !gpgme_keycache_next_key( pubkc, 0, &key ) ) { |
while( !gpgme_keycache_next_key( pubkc, 0, &key ) ) { |
468 |
keyid = gpgme_key_get_string_attr( key, GPGME_ATTR_KEYID, NULL, 0 ); |
keyid = gpgme_key_get_string_attr( key, GPGME_ATTR_KEYID, NULL, 0 ); |
469 |
if( keyid && !gpgme_keycache_find_key( seckc, keyid, 0, &skey ) ) |
if( keyid && !gpgme_keycache_find_key( seckc, keyid, 0, &skey ) ) |
470 |
keylist_add_key( lv, mode, key ); |
keylist_add_key (lv, mode, key); |
471 |
} |
} |
472 |
} |
} |
473 |
else if( pubkc ) { |
else if (pubkc) { |
474 |
gpgme_keycache_rewind( pubkc ); |
gpgme_keycache_rewind (pubkc); |
475 |
while( !err ) { |
while (!err) { |
476 |
err = gpgme_keycache_next_key( pubkc, 0, &key ); |
err = gpgme_keycache_next_key (pubkc, 0, &key); |
477 |
if( !err ) |
if (!err) |
478 |
keylist_add_key( lv, mode, key ); |
keylist_add_key (lv, mode, key); |
479 |
} |
} |
480 |
} |
} |
481 |
} /* keylist_load_keycache */ |
} /* keylist_load_keycache */ |
630 |
} /* do_addkey */ |
} /* do_addkey */ |
631 |
|
|
632 |
|
|
633 |
static int |
int |
634 |
keylist_add_key (listview_ctrl_t lv, int mode, gpgme_key_t key) |
keylist_add_key (listview_ctrl_t lv, int mode, gpgme_key_t key) |
635 |
{ |
{ |
636 |
int uids, rc = 0, i, n = 0; |
int uids, rc = 0, i, n = 0; |
637 |
|
|
638 |
for ( i = 0; i < gpgme_key_count_items( key, GPGME_ATTR_KEYID ); i++ ) { |
for (i = 0; i < gpgme_key_count_items (key, GPGME_ATTR_KEYID); i++) { |
639 |
if( gpgme_key_get_ulong_attr( key, GPGME_ATTR_KEY_INVALID, NULL, i ) ) |
if (gpgme_key_get_ulong_attr( key, GPGME_ATTR_KEY_INVALID, NULL, i)) |
640 |
continue; /* Don't use invalid keys */ |
continue; /* Don't use invalid keys */ |
641 |
|
|
642 |
if( mode & KEYLIST_ALL ) { |
if (mode & KEYLIST_ALL) { |
643 |
uids = gpgme_key_count_items( key, GPGME_ATTR_USERID ); |
uids = gpgme_key_count_items (key, GPGME_ATTR_USERID); |
644 |
rc = do_addkey( lv, key, uids, i, 0 ); |
rc = do_addkey (lv, key, uids, i, 0); |
645 |
if( rc ) |
if( rc ) |
646 |
return rc; |
return rc; |
647 |
} |
} |
648 |
else if( mode & KEYLIST_LIST ) |
else if (mode & KEYLIST_LIST) |
649 |
return do_addkey( lv, key, -1, i, 1 ); |
return do_addkey (lv, key, -1, i, 1); |
650 |
else if (mode & KEYLIST_ENCRYPT) |
else if (mode & KEYLIST_ENCRYPT) { |
|
{ |
|
651 |
if (gpgme_key_get_cability (key, GPGME_ATTR_CAN_ENCRYPT, i) |
if (gpgme_key_get_cability (key, GPGME_ATTR_CAN_ENCRYPT, i) |
652 |
&& gpgme_key_get_ulong_attr (key, GPGME_ATTR_KEY_USABLE, NULL, i)) |
&& gpgme_key_get_ulong_attr (key, GPGME_ATTR_KEY_USABLE, NULL, i)) |
653 |
{ |
{ |
665 |
} |
} |
666 |
} |
} |
667 |
} |
} |
668 |
else if (mode & KEYLIST_ENCRYPT_MIN) |
else if (mode & KEYLIST_ENCRYPT_MIN) { |
|
{ |
|
669 |
if( gpgme_key_get_cability (key, GPGME_ATTR_CAN_ENCRYPT, i) |
if( gpgme_key_get_cability (key, GPGME_ATTR_CAN_ENCRYPT, i) |
670 |
&& gpgme_key_get_ulong_attr (key, GPGME_ATTR_KEY_USABLE, NULL, i)) |
&& gpgme_key_get_ulong_attr (key, GPGME_ATTR_KEY_USABLE, NULL, i)) |
671 |
{ |
{ |
673 |
return rc; |
return rc; |
674 |
} |
} |
675 |
} |
} |
676 |
else if( mode & KEYLIST_SIGN ) { |
else if (mode & KEYLIST_SIGN) { |
677 |
if ( gpgme_key_get_cability( key, GPGME_ATTR_CAN_SIGN, i ) |
if ( gpgme_key_get_cability( key, GPGME_ATTR_CAN_SIGN, i ) |
678 |
&& find_secret_key( key ) |
&& find_secret_key( key ) |
679 |
&& gpgme_key_get_ulong_attr (key, GPGME_ATTR_KEY_USABLE, NULL, i)) |
&& gpgme_key_get_ulong_attr (key, GPGME_ATTR_KEY_USABLE, NULL, i)) |
748 |
"doing, you may answer the next question with yes\n" |
"doing, you may answer the next question with yes\n" |
749 |
"\n" |
"\n" |
750 |
"Use \"%s\" anyway?"), id); |
"Use \"%s\" anyway?"), id); |
751 |
if( reg_prefs.always_trust ) |
if (reg_prefs.always_trust) |
752 |
rc = IDYES; |
rc = IDYES; |
753 |
else |
else |
754 |
rc = msg_box (NULL, warn, _("Recipients"), MB_ERR_ASK); |
rc = msg_box (NULL, warn, _("Recipients"), MB_ERR_ASK); |
755 |
if (rc == IDYES) |
if (rc == IDYES) { |
|
{ |
|
756 |
gpgme_recipients_add_name_with_validity (rset, keyid, GPGME_VALIDITY_FULL); |
gpgme_recipients_add_name_with_validity (rset, keyid, GPGME_VALIDITY_FULL); |
757 |
force_trust++; |
force_trust++; |
758 |
ka[ka_pos].checked = 1; |
ka[ka_pos].checked = 1; |
767 |
} |
} |
768 |
} |
} |
769 |
} |
} |
770 |
key_array_release( ka ); |
key_array_release (ka); |
771 |
if( r_force_trust ) |
if (r_force_trust) |
772 |
*r_force_trust = force_trust; |
*r_force_trust = force_trust; |
773 |
if( r_count ) |
if (r_count) |
774 |
*r_count = count; |
*r_count = count; |
775 |
return rset; |
return rset; |
776 |
} /* keylist_get_recipients */ |
} /* keylist_get_recipients */ |
925 |
*ret_key = (gpgme_key_t)k; |
*ret_key = (gpgme_key_t)k; |
926 |
} |
} |
927 |
return k? 0 : -1; |
return k? 0 : -1; |
|
} /* seclist_dlg_proc */ |
|
928 |
|
} /* seclist_dlg_proc */ |