Signed-off-by: Martin Milata mmilata@redhat.com --- lib/core_fingerprint.c | 10 +--------- lib/sha1.c | 16 ++++++++++++++++ lib/sha1.h | 5 +++++ 3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/lib/core_fingerprint.c b/lib/core_fingerprint.c index 5e52c30..aeea837 100644 --- a/lib/core_fingerprint.c +++ b/lib/core_fingerprint.c @@ -562,15 +562,7 @@ hash_frame (struct sr_core_frame *frame) if (!frame->fingerprint) return;
- struct sr_sha1_state ctx; - char bin_hash[SR_SHA1_RESULT_BIN_LEN]; - char *hash = sr_malloc(SR_SHA1_RESULT_LEN); - - sr_sha1_begin(&ctx); - sr_sha1_hash(&ctx, frame->fingerprint, strlen(frame->fingerprint)); - sr_sha1_end(&ctx, bin_hash); - sr_bin2hex(hash, bin_hash, sizeof(bin_hash))[0] = '\0'; - + char *hash = sr_sha1_hash_string(frame->fingerprint); free(frame->fingerprint); frame->fingerprint = hash; frame->fingerprint_hashed = true; diff --git a/lib/sha1.c b/lib/sha1.c index 3c781ed..0f21fe8 100644 --- a/lib/sha1.c +++ b/lib/sha1.c @@ -27,6 +27,7 @@ stored in memory. It runs at 22 cycles per byte on a Pentium P4 processor */ #include "sha1.h" +#include "utils.h"
#if defined(__BIG_ENDIAN__) && __BIG_ENDIAN__ # define SHA1_BIG_ENDIAN 1 @@ -236,3 +237,18 @@ common64_end(struct sr_sha1_state *state, bufpos = 0; } } + +char * +sr_sha1_hash_string(const char *str) +{ + struct sr_sha1_state ctx; + char bin_hash[SR_SHA1_RESULT_BIN_LEN]; + char *hex_hash = sr_malloc(SR_SHA1_RESULT_LEN); + + sr_sha1_begin(&ctx); + sr_sha1_hash(&ctx, str, strlen(str)); + sr_sha1_end(&ctx, bin_hash); + sr_bin2hex(hex_hash, bin_hash, sizeof(bin_hash))[0] = '\0'; + + return hex_hash; +} diff --git a/lib/sha1.h b/lib/sha1.h index 6220c15..0a647c8 100644 --- a/lib/sha1.h +++ b/lib/sha1.h @@ -76,6 +76,11 @@ sr_sha1_hash(struct sr_sha1_state *state, void sr_sha1_end(struct sr_sha1_state *state, void *resbuf);
+/* High level function that hashes C string and returns hexadecimal encoding of + * the hash. */ +char * +sr_sha1_hash_string(const char *str); + #ifdef __cplusplus } #endif