X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilccrypt%2Fsilchash.c;h=f508c836e3bfa87898cd59ad7bbe0a87f96461b1;hp=4ec556bcbba3d01420ac9ab752a509970c338033;hb=392c65ba9e06f633115ab2b88ebdbbb63ccc59c8;hpb=7842456e8b7c8a81a88a9d4db35225c053eefb1c diff --git a/lib/silccrypt/silchash.c b/lib/silccrypt/silchash.c index 4ec556bc..f508c836 100644 --- a/lib/silccrypt/silchash.c +++ b/lib/silccrypt/silchash.c @@ -209,13 +209,21 @@ void silc_hash_make(SilcHash hash, const unsigned char *data, char *silc_hash_fingerprint(SilcHash hash, const unsigned char *data, uint32 data_len) { + SilcHash new_hash = NULL; unsigned char h[32]; + 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); - return silc_fingerprint(h, hash->hash->hash_len); + ret = silc_fingerprint(h, hash->hash->hash_len); + + if (new_hash != NULL) + silc_hash_free(new_hash); + return ret; } static const char vo[]= "aeiouy"; @@ -229,13 +237,16 @@ static const char co[]= "bcdfghklmnprstvzx"; 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); @@ -280,5 +291,7 @@ char *silc_hash_babbleprint(SilcHash hash, const unsigned char *data, } babbleprint[k + 3] = co[16]; + if (new_hash != NULL) + silc_hash_free(new_hash); return babbleprint; }