From: Stephan Bosch Date: Sun, 6 Jan 2019 22:03:13 +0000 (+0100) Subject: lib: hash-method: Add hash_method_get_digest(). X-Git-Tag: 2.3.10~240 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1f1689c8ea7275b8526d0dd5b5f22f89dc9ee6d6;p=thirdparty%2Fdovecot%2Fcore.git lib: hash-method: Add hash_method_get_digest(). --- diff --git a/src/lib/hash-method.c b/src/lib/hash-method.c index a485c00aa4..c5e55023a5 100644 --- a/src/lib/hash-method.c +++ b/src/lib/hash-method.c @@ -48,18 +48,28 @@ static void hash_method_result_size(void *context, unsigned char *result_r) result_r[7] = (*ctx & 0x00000000000000ffULL); } -buffer_t *t_hash_data(const struct hash_method *meth, - const void *data, size_t data_len) +void hash_method_get_digest(const struct hash_method *meth, + const void *data, size_t data_len, + unsigned char *result_r) { i_assert(meth != NULL); i_assert(data_len == 0 || data != NULL); unsigned char ctx[meth->context_size]; + + meth->init(ctx); + meth->loop(ctx, data == NULL ? "" : data, data_len); + meth->result(ctx, result_r); +} + +buffer_t *t_hash_data(const struct hash_method *meth, + const void *data, size_t data_len) +{ + i_assert(meth != NULL); buffer_t *result = t_buffer_create(meth->digest_size); unsigned char *resptr = buffer_append_space_unsafe(result, meth->digest_size); - meth->init(ctx); - meth->loop(ctx, data == NULL ? "" : data, data_len); - meth->result(ctx, resptr); + + hash_method_get_digest(meth, data, data_len, resptr); return result; } diff --git a/src/lib/hash-method.h b/src/lib/hash-method.h index 1340e163f0..2c68b91065 100644 --- a/src/lib/hash-method.h +++ b/src/lib/hash-method.h @@ -20,6 +20,10 @@ const struct hash_method *hash_method_lookup(const char *name); /* NULL-terminated list of all hash methods */ extern const struct hash_method *hash_methods[]; +void hash_method_get_digest(const struct hash_method *meth, + const void *data, size_t data_len, + unsigned char *result_r); + /** Simple datastack helpers for digesting (hashing) * USAGE: