summaryrefslogtreecommitdiff
path: root/contrib/ffmpeg/libavutil/md5.c
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-04-03 01:18:24 +0200
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2007-04-03 01:18:24 +0200
commitfb09531720a4aa2dfa97e5a9a246a453b6278fd2 (patch)
tree61525c3a8ddb419d3838a26e488fc3659079bbcd /contrib/ffmpeg/libavutil/md5.c
parent294d01046724e28b7193bcb65bf2a0391b0135b6 (diff)
downloadxine-lib-fb09531720a4aa2dfa97e5a9a246a453b6278fd2.tar.gz
xine-lib-fb09531720a4aa2dfa97e5a9a246a453b6278fd2.tar.bz2
Sync with a more recent version of FFmpeg.
Diffstat (limited to 'contrib/ffmpeg/libavutil/md5.c')
-rw-r--r--contrib/ffmpeg/libavutil/md5.c44
1 files changed, 19 insertions, 25 deletions
diff --git a/contrib/ffmpeg/libavutil/md5.c b/contrib/ffmpeg/libavutil/md5.c
index d33ad1483..f71703124 100644
--- a/contrib/ffmpeg/libavutil/md5.c
+++ b/contrib/ffmpeg/libavutil/md5.c
@@ -35,10 +35,9 @@
#include "md5.h"
typedef struct AVMD5{
+ uint64_t len;
uint8_t block[64];
uint32_t ABCD[4];
- uint64_t len;
- int b_used;
} AVMD5;
const int av_md5_size= sizeof(AVMD5);
@@ -50,7 +49,7 @@ static const uint8_t S[4][4] = {
{ 6, 10, 15, 21 } /* Round 4 */
};
-static const uint32_t T[64] = {
+static const uint32_t T[64] = { // T[i]= fabs(sin(i+1)<<32)
0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, /* Round 1 */
0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
@@ -76,11 +75,12 @@ static const uint32_t T[64] = {
t = S[i>>4][i&3];\
a += T[i];\
\
- switch(i>>4){\
- case 0: a += (d ^ (b&(c^d))) + X[ i &15 ]; break;\
- case 1: a += (c ^ (d&(c^b))) + X[ (1+5*i)&15 ]; break;\
- case 2: a += (b^c^d) + X[ (5+3*i)&15 ]; break;\
- case 3: a += (c^(b|~d)) + X[ ( 7*i)&15 ]; break;\
+ if(i<32){\
+ if(i<16) a += (d ^ (b&(c^d))) + X[ i &15 ];\
+ else a += (c ^ (d&(c^b))) + X[ (1+5*i)&15 ];\
+ }else{\
+ if(i<48) a += (b^c^d) + X[ (5+3*i)&15 ];\
+ else a += (c^(b|~d)) + X[ ( 7*i)&15 ];\
}\
a = b + (( a << t ) | ( a >> (32 - t) ));
@@ -117,7 +117,6 @@ CORE4(0) CORE4(16) CORE4(32) CORE4(48)
void av_md5_init(AVMD5 *ctx){
ctx->len = 0;
- ctx->b_used = 0;
ctx->ABCD[0] = 0x10325476;
ctx->ABCD[1] = 0x98badcfe;
@@ -126,35 +125,29 @@ void av_md5_init(AVMD5 *ctx){
}
void av_md5_update(AVMD5 *ctx, const uint8_t *src, const int len){
- int i;
+ int i, j;
+ j= ctx->len & 63;
ctx->len += len;
for( i = 0; i < len; i++ ){
- ctx->block[ ctx->b_used++ ] = src[i];
- if( 64 == ctx->b_used ){
+ ctx->block[j++] = src[i];
+ if( 64 == j ){
body(ctx->ABCD, (uint32_t*) ctx->block);
- ctx->b_used = 0;
+ j = 0;
}
}
}
void av_md5_final(AVMD5 *ctx, uint8_t *dst){
int i;
+ uint64_t finalcount= le2me_64(ctx->len<<3);
- ctx->block[ctx->b_used++] = 0x80;
-
- memset(&ctx->block[ctx->b_used], 0, 64 - ctx->b_used);
-
- if( 56 < ctx->b_used ){
- body( ctx->ABCD, (uint32_t*) ctx->block );
- memset(ctx->block, 0, 64);
- }
-
- for(i=0; i<8; i++)
- ctx->block[56+i] = (ctx->len << 3) >> (i<<3);
+ av_md5_update(ctx, "\200", 1);
+ while((ctx->len & 63)<56)
+ av_md5_update(ctx, "", 1);
- body(ctx->ABCD, (uint32_t*) ctx->block);
+ av_md5_update(ctx, &finalcount, 8);
for(i=0; i<4; i++)
((uint32_t*)dst)[i]= le2me_32(ctx->ABCD[3-i]);
@@ -170,6 +163,7 @@ void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len){
#ifdef TEST
#include <stdio.h>
+#undef printf
main(){
uint64_t md5val;
int i;