Mercurial > dovecot > core-2.2
view src/lib/hmac.h @ 21266:b861c0860dd2
lib: Add hmac helpers
These run hmac for given data with given parameters
and returns stack allocated buffer. They are helpful
when doing lots of HMACs, such as the AWS4 signing
protocol.
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Tue, 29 Nov 2016 23:18:56 +0200 |
parents | 92a54bb2ee00 |
children |
line wrap: on
line source
#ifndef HMAC_H #define HMAC_H #include "hash-method.h" #include "sha1.h" #define HMAC_MAX_CONTEXT_SIZE 256 struct hmac_context_priv { char ctx[HMAC_MAX_CONTEXT_SIZE]; char ctxo[HMAC_MAX_CONTEXT_SIZE]; const struct hash_method *hash; }; struct hmac_context { union { struct hmac_context_priv priv; uint64_t padding_requirement; } u; }; void hmac_init(struct hmac_context *ctx, const unsigned char *key, size_t key_len, const struct hash_method *meth); void hmac_final(struct hmac_context *ctx, unsigned char *digest); static inline void hmac_update(struct hmac_context *_ctx, const void *data, size_t size) { struct hmac_context_priv *ctx = &_ctx->u.priv; ctx->hash->loop(ctx->ctx, data, size); } buffer_t *t_hmac_data(const struct hash_method *meth, const unsigned char *key, size_t key_len, const void *data, size_t data_len); buffer_t *t_hmac_buffer(const struct hash_method *meth, const unsigned char *key, size_t key_len, const buffer_t *data); buffer_t *t_hmac_str(const struct hash_method *meth, const unsigned char *key, size_t key_len, const char *data); #endif