X-Git-Url: https://git.cryptolib.org/?p=avr-crypto-lib.git;a=blobdiff_plain;f=md5%2Fmd5.c;h=f84edf8138c3613ee89728130ed09841d13f6bba;hp=003699e5ef4ae65486bece16d9cdfbe21a4cca2b;hb=eb0cafe05ab4cdf60878dbd81e4ff3712d5150f2;hpb=d32eba56ce10ea6b9eff123b50d9842673b38f2b diff --git a/md5/md5.c b/md5/md5.c index 003699e..f84edf8 100644 --- a/md5/md5.c +++ b/md5/md5.c @@ -66,9 +66,9 @@ typedef uint32_t md5_func_t(uint32_t, uint32_t, uint32_t); #define ROTL32(x,n) (((x)<<(n)) | ((x)>>(32-(n)))) static -void md5_core(uint32_t* a, void* block, uint8_t as, uint8_t s, uint8_t i, uint8_t fi){ +void md5_core(uint32_t *a, void *block, uint8_t as, uint8_t s, uint8_t i, uint8_t fi){ uint32_t t; - md5_func_t* funcs[]={md5_F, md5_G, md5_H, md5_I}; + md5_func_t *funcs[]={md5_F, md5_G, md5_H, md5_I}; as &= 0x3; /* a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ #ifdef DEBUG @@ -85,7 +85,7 @@ void md5_core(uint32_t* a, void* block, uint8_t as, uint8_t s, uint8_t i, uint8_ a[as]=a[(as+1)&3] + ROTL32(t, s); } -void md5_nextBlock(md5_ctx_t *state, const void* block){ +void md5_nextBlock(md5_ctx_t *state, const void *block){ uint32_t a[4]; uint8_t m,n,i=0; /* this requires other mixed sboxes */ @@ -137,41 +137,44 @@ void md5_nextBlock(md5_ctx_t *state, const void* block){ state->counter++; } -void md5_lastBlock(md5_ctx_t *state, const void* block, uint16_t length_b){ +void md5_lastBlock(md5_ctx_t *state, const void *block, uint16_t length_b){ uint16_t l; - uint8_t b[64]; + union { + uint8_t v8[64]; + uint64_t v64[ 8]; + } buffer; while (length_b >= 512){ md5_nextBlock(state, block); length_b -= 512; block = ((uint8_t*)block) + 512/8; } - memset(b, 0, 64); - memcpy(b, block, length_b/8); + memset(buffer.v8, 0, 64); + memcpy(buffer.v8, block, length_b/8); /* insert padding one */ l=length_b/8; if(length_b%8){ uint8_t t; t = ((uint8_t*)block)[l]; t |= (0x80>>(length_b%8)); - b[l]=t; + buffer.v8[l]=t; }else{ - b[l]=0x80; + buffer.v8[l]=0x80; } /* insert length value */ if(l+sizeof(uint64_t) >= 512/8){ - md5_nextBlock(state, b); + md5_nextBlock(state, buffer.v8); state->counter--; - memset(b, 0, 64-8); + memset(buffer.v8, 0, 64-8); } - *((uint64_t*)&b[64-sizeof(uint64_t)]) = (state->counter * 512) + length_b; - md5_nextBlock(state, b); + buffer.v64[7] = (state->counter * 512) + length_b; + md5_nextBlock(state, buffer.v8); } -void md5_ctx2hash(md5_hash_t* dest, const md5_ctx_t* state){ +void md5_ctx2hash(md5_hash_t *dest, const md5_ctx_t *state){ memcpy(dest, state->a, MD5_HASH_BYTES); } -void md5(md5_hash_t* dest, const void* msg, uint32_t length_b){ +void md5(md5_hash_t *dest, const void *msg, uint32_t length_b){ md5_ctx_t ctx; md5_init(&ctx); while(length_b>=MD5_BLOCK_BITS){