Signed-off-by: Denys Vlasenko <[email protected]>
---
 src/include/internal_libreport.h |  6 ++++++
 src/lib/hash_sha1.c              | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h
index ae46ad4..0f335a3 100644
--- a/src/include/internal_libreport.h
+++ b/src/include/internal_libreport.h
@@ -208,6 +208,12 @@ void sha1_hash(sha1_ctx_t *ctx, const void *buffer, size_t 
len);
 #define sha1_end libreport_sha1_end
 void sha1_end(sha1_ctx_t *ctx, void *resbuf);
 
+/* Helpers to hash a string: */
+#define str_to_sha1 libreport_str_to_sha1
+const uint8_t *str_to_sha1(uint8_t result[SHA1_RESULT_LEN], const char *str);
+#define str_to_sha1str libreport_str_to_sha1str
+const char    *str_to_sha1str(char result[SHA1_RESULT_LEN*2 + 1], const char 
*str);
+
 
 #define xatou libreport_xatou
 unsigned xatou(const char *numstr);
diff --git a/src/lib/hash_sha1.c b/src/lib/hash_sha1.c
index f8f85d1..4a604c0 100644
--- a/src/lib/hash_sha1.c
+++ b/src/lib/hash_sha1.c
@@ -224,3 +224,22 @@ static void common64_end(sha1_ctx_t *ctx, int swap_needed)
                bufpos = 0;
        }
 }
+
+/* Utility helpers */
+
+const uint8_t *str_to_sha1(uint8_t hash_bytes[SHA1_RESULT_LEN], const char 
*str)
+{
+    sha1_ctx_t sha1ctx;
+    sha1_begin(&sha1ctx);
+    sha1_hash(&sha1ctx, str, strlen(str));
+    sha1_end(&sha1ctx, hash_bytes);
+    return hash_bytes;
+}
+
+const char *str_to_sha1str(char result[SHA1_RESULT_LEN*2 + 1], const char *str)
+{
+    uint8_t hash_bytes[SHA1_RESULT_LEN];
+    str_to_sha1(hash_bytes, str);
+    bin2hex(result, (void*)hash_bytes, SHA1_RESULT_LEN)[0] = '\0';
+    return result;
+}
-- 
1.8.1.4

Reply via email to