mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 03:22:48 -05:00
Centralise SSH-2 key fingerprinting into sshpubk.c.
There were ad-hoc functions for fingerprinting a bare key blob in both cmdgen.c and pageant.c, not quite doing the same thing. Also, every SSH-2 public key algorithm in the code base included a dedicated fingerprint() method, which is completely pointless since SSH-2 key fingerprints are computed in an algorithm-independent way (just hash the standard-format public key blob), so each of those methods was just duplicating the work of the public_blob() method with a less general output mechanism. Now sshpubk.c centrally provides an ssh2_fingerprint_blob() function that does all the real work, plus an ssh2_fingerprint() function that wraps it and deals with calling public_blob() to get something to fingerprint. And the fingerprint() method has been completely removed from ssh_signkey and all its implementations, and good riddance.
This commit is contained in:
26
cmdgen.c
26
cmdgen.c
@ -192,27 +192,6 @@ static int move(char *from, char *to)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static char *blobfp(char *alg, int bits, unsigned char *blob, int bloblen)
|
||||
{
|
||||
char buffer[128];
|
||||
unsigned char digest[16];
|
||||
struct MD5Context md5c;
|
||||
int i;
|
||||
|
||||
MD5Init(&md5c);
|
||||
MD5Update(&md5c, blob, bloblen);
|
||||
MD5Final(digest, &md5c);
|
||||
|
||||
sprintf(buffer, "%s ", alg);
|
||||
if (bits > 0)
|
||||
sprintf(buffer + strlen(buffer), "%d ", bits);
|
||||
for (i = 0; i < 16; i++)
|
||||
sprintf(buffer + strlen(buffer), "%s%02x", i ? ":" : "",
|
||||
digest[i]);
|
||||
|
||||
return dupstr(buffer);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char *infile = NULL;
|
||||
@ -980,10 +959,11 @@ int main(int argc, char **argv)
|
||||
rsa_fingerprint(fingerprint, 128, ssh1key);
|
||||
} else {
|
||||
if (ssh2key) {
|
||||
fingerprint = ssh2key->alg->fingerprint(ssh2key->data);
|
||||
fingerprint = ssh2_fingerprint(ssh2key->alg,
|
||||
ssh2key->data);
|
||||
} else {
|
||||
assert(ssh2blob);
|
||||
fingerprint = blobfp(ssh2alg, bits, ssh2blob, ssh2bloblen);
|
||||
fingerprint = ssh2_fingerprint_blob(ssh2blob, ssh2bloblen);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user