-removing 2nd argument from GNUNET_CLIENT_disconnect as it was virtually always GNUNE...
[oweals/gnunet.git] / src / util / crypto_hash.c
index aaf5175d7db556a5712472f1c3e56e6699ea510e..4d957c00e7b74ad1cd62ef0e320f21a6abf0aa39 100644 (file)
@@ -220,7 +220,7 @@ GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority,
     return NULL;
   }
   fhc->bsize = blocksize;
-  if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fhc->fsize, GNUNET_NO))
+  if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fhc->fsize, GNUNET_NO, GNUNET_YES))
   {
     GNUNET_free (fhc->filename);
     GNUNET_free (fhc);
@@ -298,7 +298,12 @@ int
 GNUNET_CRYPTO_hash_from_string2 (const char *enc, size_t enclen,
                                 GNUNET_HashCode * result)
 {
-  return GNUNET_STRINGS_string_to_data (enc, enclen,
+  char upper_enc[enclen];
+  char* up_ptr = upper_enc;
+
+  GNUNET_STRINGS_utf8_toupper(enc, &up_ptr);
+
+  return GNUNET_STRINGS_string_to_data (upper_enc, enclen,
                                        (unsigned char*) result,
                                        sizeof (struct GNUNET_HashCode));
 }
@@ -609,7 +614,7 @@ GNUNET_CRYPTO_short_hash_double (const struct GNUNET_CRYPTO_ShortHashCode *sh,
 /**
  * Truncate doubled short hash back to a short hash.
  *
- * @param lh doubled short hash to reduce again
+ * @param dh doubled short hash to reduce again
  * @param sh where to store the short hash
  * @return GNUNET_OK on success, GNUNET_SYSERR if this was not a
  *         doubled short hash
@@ -642,7 +647,12 @@ int
 GNUNET_CRYPTO_short_hash_from_string2 (const char *enc, size_t enclen,
                                       struct GNUNET_CRYPTO_ShortHashCode * result)
 {
-  return GNUNET_STRINGS_string_to_data (enc, enclen,
+
+  char upper_enc[enclen];
+  char* up_ptr = upper_enc;
+
+  GNUNET_STRINGS_utf8_toupper(enc, &up_ptr);
+  return GNUNET_STRINGS_string_to_data (upper_enc, enclen,
                                        (unsigned char*) result,
                                        sizeof (struct GNUNET_CRYPTO_ShortHashCode));
 }
@@ -669,6 +679,32 @@ GNUNET_CRYPTO_short_hash_to_enc (const struct GNUNET_CRYPTO_ShortHashCode * bloc
   *np = '\0';
 }
 
+/**
+ * Compare function for ShortHashCodes, producing a total ordering
+ * of all hashcodes.
+ *
+ * @param h1 some hash code
+ * @param h2 some hash code
+ * @return 1 if h1 > h2, -1 if h1 < h2 and 0 if h1 == h2.
+ */
+int
+GNUNET_CRYPTO_short_hash_cmp (const struct GNUNET_CRYPTO_ShortHashCode * h1,
+                        const struct GNUNET_CRYPTO_ShortHashCode * h2)
+{
+  unsigned int *i1;
+  unsigned int *i2;
+  int i;
 
+  i1 = (unsigned int *) h1;
+  i2 = (unsigned int *) h2;
+  for (i = (sizeof (struct GNUNET_CRYPTO_ShortHashCode) / sizeof (unsigned int)) - 1; i >= 0; i--)
+  {
+    if (i1[i] > i2[i])
+      return 1;
+    if (i1[i] < i2[i])
+      return -1;
+  }
+  return 0;
+}
 
 /* end of crypto_hash.c */