-#ifdef WITH_LIBCRYPTO
-#include <openssl/sha.h>
-static inline void *sha1_buffer(const char *buffer, size_t len, void *resblock)
+static inline void copy_hash(u8 dest[SHA1_HASH_SIZE],
+ const u8 src[SHA1_HASH_SIZE])
+{
+ memcpy(dest, src, SHA1_HASH_SIZE);
+}
+
+static inline void random_hash(u8 hash[SHA1_HASH_SIZE])
+{
+ randomize_byte_array(hash, SHA1_HASH_SIZE);
+}
+
+static inline bool hashes_equal(const u8 h1[SHA1_HASH_SIZE],
+ const u8 h2[SHA1_HASH_SIZE])
+{
+ return memcmp(h1, h2, SHA1_HASH_SIZE) == 0;
+}
+static inline int hashes_cmp(const u8 h1[SHA1_HASH_SIZE],
+ const u8 h2[SHA1_HASH_SIZE])
+{
+ return memcmp(h1, h2, SHA1_HASH_SIZE);
+}
+
+/* Prints a hash code field. */
+static inline void print_hash(const u8 hash[SHA1_HASH_SIZE])
+{
+ print_byte_field(hash, SHA1_HASH_SIZE);
+}
+
+static inline bool is_zero_hash(const u8 hash[SHA1_HASH_SIZE])
+{
+ for (u8 i = 0; i < SHA1_HASH_SIZE / 4; i++)
+ if (((u32*)hash)[i])
+ return false;
+ return true;
+}
+
+static void zero_hash(u8 hash[SHA1_HASH_SIZE])