char *silc_hash_fingerprint(SilcHash hash, const unsigned char *data,
uint32 data_len)
{
- char fingerprint[64], *cp;
+ SilcHash new_hash = NULL;
unsigned char h[32];
- int i;
+ char *ret;
- if (!hash)
- silc_hash_alloc("sha1", &hash);
+ if (!hash) {
+ silc_hash_alloc("sha1", &new_hash);
+ hash = new_hash;
+ }
silc_hash_make(hash, data, data_len, h);
-
- memset(fingerprint, 0, sizeof(fingerprint));
- cp = fingerprint;
- for (i = 0; i < hash->hash->hash_len; i++) {
- snprintf(cp, sizeof(fingerprint), "%02X", h[i]);
- cp += 2;
-
- if ((i + 1) % 2 == 0)
- snprintf(cp++, sizeof(fingerprint), " ");
+ ret = silc_fingerprint(h, hash->hash->hash_len);
- if ((i + 1) % 10 == 0)
- snprintf(cp++, sizeof(fingerprint), " ");
- }
- i--;
- if ((i + 1) % 2 == 0)
- cp[-2] = 0;
- if ((i + 1) % 10 == 0)
- cp[-1] = 0;
-
- return strdup(fingerprint);
+ if (new_hash != NULL)
+ silc_hash_free(new_hash);
+ return ret;
}
static const char vo[]= "aeiouy";
char *silc_hash_babbleprint(SilcHash hash, const unsigned char *data,
uint32 data_len)
{
+ SilcHash new_hash = NULL;
char *babbleprint;
unsigned char hval[32];
unsigned int a, b, c, d, e, check;
int i, k, out_len;
- if (!hash)
- silc_hash_alloc("sha1", &hash);
+ if (!hash) {
+ silc_hash_alloc("sha1", &new_hash);
+ hash = new_hash;
+ }
/* Take fingerprint */
silc_hash_make(hash, data, data_len, hval);
}
babbleprint[k + 3] = co[16];
+ if (new_hash != NULL)
+ silc_hash_free(new_hash);
return babbleprint;
}