updates
[silc.git] / lib / silccrypt / silchash.c
index 4d0d27062d1f0485f4d5f81f5b0b677f2e2b2459..f508c836e3bfa87898cd59ad7bbe0a87f96461b1 100644 (file)
@@ -209,34 +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)
 {
-  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";
@@ -250,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);
@@ -301,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;
 }