From b6249acae6963691211af21dc262be7ac0d9b090 Mon Sep 17 00:00:00 2001 From: James Almer Date: Sun, 2 Jun 2013 17:48:49 -0300 Subject: [PATCH] lavu/hash: Add support for SHA-2 512 Signed-off-by: James Almer --- libavutil/hash.c | 25 +++++++++++++++++++++++++ libavutil/hash.h | 2 +- libavutil/version.h | 4 ++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/libavutil/hash.c b/libavutil/hash.c index 03c7ca3f06..11d8d05b72 100644 --- a/libavutil/hash.c +++ b/libavutil/hash.c @@ -25,6 +25,7 @@ #include "md5.h" #include "murmur3.h" #include "sha.h" +#include "sha512.h" #include "avstring.h" #include "error.h" @@ -37,6 +38,10 @@ enum hashtype { SHA160, SHA224, SHA256, + SHA512_224, + SHA512_256, + SHA384, + SHA512, CRC32, ADLER32, NUM_HASHES @@ -58,6 +63,10 @@ struct { [SHA160] = {"SHA160", 20}, [SHA224] = {"SHA224", 28}, [SHA256] = {"SHA256", 32}, + [SHA512_224] = {"SHA512/224", 28}, + [SHA512_256] = {"SHA512/256", 32}, + [SHA384] = {"SHA384", 48}, + [SHA512] = {"SHA512", 64}, [CRC32] = {"CRC32", 4}, [ADLER32] = {"adler32", 4}, }; @@ -96,6 +105,10 @@ int av_hash_alloc(AVHashContext **ctx, const char *name) case SHA160: case SHA224: case SHA256: res->ctx = av_sha_alloc(); break; + case SHA512_224: + case SHA512_256: + case SHA384: + case SHA512: res->ctx = av_sha512_alloc(); break; case CRC32: res->crctab = av_crc_get_table(AV_CRC_32_IEEE_LE); break; case ADLER32: break; } @@ -115,6 +128,10 @@ void av_hash_init(AVHashContext *ctx) case SHA160: av_sha_init(ctx->ctx, 160); break; case SHA224: av_sha_init(ctx->ctx, 224); break; case SHA256: av_sha_init(ctx->ctx, 256); break; + case SHA512_224: av_sha512_init(ctx->ctx, 224); break; + case SHA512_256: av_sha512_init(ctx->ctx, 256); break; + case SHA384: av_sha512_init(ctx->ctx, 384); break; + case SHA512: av_sha512_init(ctx->ctx, 512); break; case CRC32: ctx->crc = UINT32_MAX; break; case ADLER32: ctx->crc = 1; break; } @@ -128,6 +145,10 @@ void av_hash_update(AVHashContext *ctx, const uint8_t *src, int len) case SHA160: case SHA224: case SHA256: av_sha_update(ctx->ctx, src, len); break; + case SHA512_224: + case SHA512_256: + case SHA384: + case SHA512: av_sha512_update(ctx->ctx, src, len); break; case CRC32: ctx->crc = av_crc(ctx->crctab, ctx->crc, src, len); break; case ADLER32: ctx->crc = av_adler32_update(ctx->crc, src, len); break; } @@ -141,6 +162,10 @@ void av_hash_final(AVHashContext *ctx, uint8_t *dst) case SHA160: case SHA224: case SHA256: av_sha_final(ctx->ctx, dst); break; + case SHA512_224: + case SHA512_256: + case SHA384: + case SHA512: av_sha512_final(ctx->ctx, dst); break; case CRC32: AV_WB32(dst, ctx->crc ^ UINT32_MAX); break; case ADLER32: AV_WB32(dst, ctx->crc); break; } diff --git a/libavutil/hash.h b/libavutil/hash.h index 5dd8712a3e..9bf715e1ac 100644 --- a/libavutil/hash.h +++ b/libavutil/hash.h @@ -58,7 +58,7 @@ const char *av_hash_get_name(const struct AVHashContext *ctx); * with larger sizes will not be considered an ABI change and should not cause * your code to overflow a buffer. */ -#define AV_HASH_MAX_SIZE 32 +#define AV_HASH_MAX_SIZE 64 /** * Get the size of the resulting hash value in bytes. diff --git a/libavutil/version.h b/libavutil/version.h index ba5f14e79a..ff98c6985c 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -75,8 +75,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 52 -#define LIBAVUTIL_VERSION_MINOR 35 -#define LIBAVUTIL_VERSION_MICRO 101 +#define LIBAVUTIL_VERSION_MINOR 36 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \