aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2009-07-09 07:23:43 +0000
committerKostya Shishkov <kostya.shishkov@gmail.com>2009-07-09 07:23:43 +0000
commit2c6361e00986f9e34ce96e1f8c82f46455d3b84f (patch)
tree96ec7c92f4fc43be8812878dcffc2f7813321a2f
parent3a7c65077d26fb4a9e4a5556ab24801b536f57e6 (diff)
downloadffmpeg-2c6361e00986f9e34ce96e1f8c82f46455d3b84f.tar.gz
Use pointer to hash transform function to make adding SHA-2 support easier.
Originally committed as revision 19388 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavutil/sha1.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libavutil/sha1.c b/libavutil/sha1.c
index 80dbc312b9..081721222b 100644
--- a/libavutil/sha1.c
+++ b/libavutil/sha1.c
@@ -29,6 +29,8 @@ typedef struct AVSHA1 {
uint64_t count; ///< number of bytes in buffer
uint8_t buffer[64]; ///< 512-bit buffer of input values used in hash updating
uint32_t state[8]; ///< current hash value
+ /** function used to update hash for 512-bit input block */
+ void (*transform)(uint32_t *state, const uint8_t buffer[64]);
} AVSHA1;
const int av_sha1_size = sizeof(AVSHA1);
@@ -132,6 +134,7 @@ void av_sha1_init(AVSHA1* ctx)
ctx->state[2] = 0x98BADCFE;
ctx->state[3] = 0x10325476;
ctx->state[4] = 0xC3D2E1F0;
+ ctx->transform = transform;
ctx->count = 0;
}
@@ -145,16 +148,16 @@ void av_sha1_update(AVSHA1* ctx, const uint8_t* data, unsigned int len)
for (i = 0; i < len; i++) {
ctx->buffer[j++] = data[i];
if (64 == j) {
- transform(ctx->state, ctx->buffer);
+ ctx->transform(ctx->state, ctx->buffer);
j = 0;
}
}
#else
if ((j + len) > 63) {
memcpy(&ctx->buffer[j], data, (i = 64 - j));
- transform(ctx->state, ctx->buffer);
+ ctx->transform(ctx->state, ctx->buffer);
for (; i + 63 < len; i += 64)
- transform(ctx->state, &data[i]);
+ ctx->transform(ctx->state, &data[i]);
j = 0;
} else
i = 0;