diff options
author | James Almer <jamrial@gmail.com> | 2015-07-28 21:36:14 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2015-07-29 22:09:16 +0300 |
commit | 7e38340b831af8e3271f22bd66b9da14953c02af (patch) | |
tree | cb60cb18ec1efe3a9b9a652b03fabd95584a73e8 | |
parent | c6e0829e3696c894d24c8088c3ee30a9c17534c2 (diff) |
hmac: add support for SHA-2
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavutil/hmac.c | 31 | ||||
-rw-r--r-- | libavutil/hmac.h | 2 |
2 files changed, 28 insertions, 5 deletions
diff --git a/libavutil/hmac.c b/libavutil/hmac.c index f87728e181..318174ec31 100644 --- a/libavutil/hmac.c +++ b/libavutil/hmac.c @@ -26,7 +26,7 @@ #include "sha.h" #include "mem.h" -#define MAX_HASHLEN 20 +#define MAX_HASHLEN 32 #define MAX_BLOCKLEN 64 struct AVHMAC { @@ -39,11 +39,16 @@ struct AVHMAC { int keylen; }; -static av_cold void sha1_init(void *ctx) -{ - av_sha_init(ctx, 160); +#define DEFINE_SHA(bits) \ +static av_cold void sha ## bits ##_init(void *ctx) \ +{ \ + av_sha_init(ctx, bits); \ } +DEFINE_SHA(160) +DEFINE_SHA(224) +DEFINE_SHA(256) + AVHMAC *av_hmac_alloc(enum AVHMACType type) { AVHMAC *c = av_mallocz(sizeof(*c)); @@ -61,7 +66,23 @@ AVHMAC *av_hmac_alloc(enum AVHMACType type) case AV_HMAC_SHA1: c->blocklen = 64; c->hashlen = 20; - c->init = sha1_init; + c->init = sha160_init; + c->update = av_sha_update; + c->final = av_sha_final; + c->hash = av_sha_alloc(); + break; + case AV_HMAC_SHA224: + c->blocklen = 64; + c->hashlen = 28; + c->init = sha224_init; + c->update = av_sha_update; + c->final = av_sha_final; + c->hash = av_sha_alloc(); + break; + case AV_HMAC_SHA256: + c->blocklen = 64; + c->hashlen = 32; + c->init = sha256_init; c->update = av_sha_update; c->final = av_sha_final; c->hash = av_sha_alloc(); diff --git a/libavutil/hmac.h b/libavutil/hmac.h index 28c2062b1b..1ed56269cb 100644 --- a/libavutil/hmac.h +++ b/libavutil/hmac.h @@ -32,6 +32,8 @@ enum AVHMACType { AV_HMAC_MD5, AV_HMAC_SHA1, + AV_HMAC_SHA224, + AV_HMAC_SHA256, }; typedef struct AVHMAC AVHMAC; |