mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
Fix display of ECC keys in the Windows Pageant list box.
This is an absolutely horrible piece of code, relying not only on font metrics but also on an observed correlation between the length of a key algorithm name and whether or not it needs a separate key size displayed. But it'll do for the moment, and it's less effort than writing a custom piece of Windows API code to display the list box entries in a properly robust way :-(
This commit is contained in:
parent
0b42fed9bd
commit
906ceef0fc
@ -301,11 +301,32 @@ void keylist_update(void)
|
||||
for (i = 0; NULL != (skey = pageant_nth_ssh2_key(i)); i++) {
|
||||
char *listentry, *p;
|
||||
int pos;
|
||||
/*
|
||||
* Replace spaces with tabs in the fingerprint prefix, for
|
||||
* nice alignment in the list box, until we encounter a :
|
||||
* meaning we're into the fingerprint proper.
|
||||
*/
|
||||
|
||||
/*
|
||||
* For nice alignment in the list box, we would ideally
|
||||
* want every entry to align to the tab stop settings, and
|
||||
* have a column for algorithm name, one for bit count,
|
||||
* one for hex fingerprint, and one for key comment.
|
||||
*
|
||||
* Unfortunately, some of the algorithm names are so long
|
||||
* that they overflow into the bit-count field.
|
||||
* Fortunately, at the moment, those are _precisely_ the
|
||||
* algorithm names that don't need a bit count displayed
|
||||
* anyway (because for NIST-style ECDSA the bit count is
|
||||
* mentioned in the algorithm name, and for ssh-ed25519
|
||||
* there is only one possible value anyway). So we fudge
|
||||
* this by simply omitting the bit count field in that
|
||||
* situation.
|
||||
*
|
||||
* This is fragile not only in the face of further key
|
||||
* types that don't follow this pattern, but also in the
|
||||
* face of font metrics changes - the Windows semantics
|
||||
* for list box tab stops is that \t aligns to the next
|
||||
* one you haven't already exceeded, so I have to guess
|
||||
* when the key type will overflow past the bit-count tab
|
||||
* stop and leave out a tab character. Urgh.
|
||||
*/
|
||||
|
||||
p = ssh2_fingerprint(skey->alg, skey->data);
|
||||
listentry = dupprintf("%s\t%s", p, skey->comment);
|
||||
sfree(p);
|
||||
@ -317,6 +338,26 @@ void keylist_update(void)
|
||||
break;
|
||||
listentry[pos++] = '\t';
|
||||
}
|
||||
if (skey->alg != &ssh_dss && skey->alg != &ssh_rsa) {
|
||||
/*
|
||||
* Remove the bit-count field, which is between the
|
||||
* first and second \t.
|
||||
*/
|
||||
int outpos;
|
||||
pos = 0;
|
||||
while (listentry[pos] && listentry[pos] != '\t')
|
||||
pos++;
|
||||
outpos = pos;
|
||||
pos++;
|
||||
while (listentry[pos] && listentry[pos] != '\t')
|
||||
pos++;
|
||||
while (1) {
|
||||
if ((listentry[outpos] = listentry[pos]) == '\0')
|
||||
break;
|
||||
outpos++;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
||||
SendDlgItemMessage(keylist, 100, LB_ADDSTRING, 0,
|
||||
(LPARAM) listentry);
|
||||
|
Loading…
Reference in New Issue
Block a user