/* * Generate a fingerprint string for the key. Compatible with the * OpenSSH fingerprint code. */ char *rsa_ssh1_fingerprint(RSAKey *key) { unsigned char digest[16]; strbuf *out; int i; /* * The hash preimage for SSH-1 key fingerprinting consists of the * modulus and exponent _without_ any preceding length field - * just the minimum number of bytes to represent each integer, * stored big-endian, concatenated with no marker at the division * between them. */ ssh_hash *hash = ssh_hash_new(&ssh_md5); for (size_t i = (mp_get_nbits(key->modulus) + 7) / 8; i-- > 0 ;) put_byte(hash, mp_get_byte(key->modulus, i)); for (size_t i = (mp_get_nbits(key->exponent) + 7) / 8; i-- > 0 ;) put_byte(hash, mp_get_byte(key->exponent, i)); ssh_hash_final(hash, digest); out = strbuf_new(); strbuf_catf(out, "%d ", mp_get_nbits(key->modulus)); for (i = 0; i < 16; i++) strbuf_catf(out, "%s%02x", i ? ":" : "", digest[i]); if (key->comment) strbuf_catf(out, " %s", key->comment); return strbuf_to_str(out); }
char *rsastr_fmt(RSAKey *key) { strbuf *sb = strbuf_new(); append_hex_to_strbuf(sb, key->exponent); append_hex_to_strbuf(sb, key->modulus); return strbuf_to_str(sb); }
static char *ecc_cache_str_shared( const char *curve_name, mp_int *x, mp_int *y) { strbuf *sb = strbuf_new(); if (curve_name) strbuf_catf(sb, "%s,", curve_name); char *hx = mp_get_hex(x); char *hy = mp_get_hex(y); strbuf_catf(sb, "0x%s,0x%s", hx, hy); sfree(hx); sfree(hy); return strbuf_to_str(sb); }