typedef unsigned char byte; typedef unsigned short u16; typedef unsigned int u32; typedef unsigned long long u64; typedef struct { u32 A,B,C,D; u32 nblocks; byte buf[64]; int count; } MD5_CONTEXT; static void transform( MD5_CONTEXT *ctx, byte *data ) { u32 correct_words[16]; u32 A = ctx->A; u32 B = ctx->B; u32 C = ctx->C; u32 D = ctx->D; u32 *cwp = correct_words; { int i; byte *p2, *p1; for(i=0, p1=data, p2=(byte*)correct_words; i < 16; i++, p2 += 4 ) { p2[3] = *p1++; p2[2] = *p1++; p2[1] = *p1++; p2[0] = *p1++; } } do { A += (D ^ (B & (C ^ D))) + (*cwp++) + 0xd76aa478; A = ( ((A) << (7)) | ((A) >> (32-(7))) ); A += B; } while (0); do { D += (C ^ (A & (B ^ C))) + (*cwp++) + 0xe8c7b756; D = ( ((D) << (12)) | ((D) >> (32-(12))) ); D += A; } while (0); do { C += (B ^ (D & (A ^ B))) + (*cwp++) + 0x242070db; C = ( ((C) << (17)) | ((C) >> (32-(17))) ); C += D; } while (0); do { B += (A ^ (C & (D ^ A))) + (*cwp++) + 0xc1bdceee; B = ( ((B) << (22)) | ((B) >> (32-(22))) ); B += C; } while (0); do { A += (D ^ (B & (C ^ D))) + (*cwp++) + 0xf57c0faf; A = ( ((A) << (7)) | ((A) >> (32-(7))) ); A += B; } while (0); do { D += (C ^ (A & (B ^ C))) + (*cwp++) + 0x4787c62a; D = ( ((D) << (12)) | ((D) >> (32-(12))) ); D += A; } while (0); do { C += (B ^ (D & (A ^ B))) + (*cwp++) + 0xa8304613; C = ( ((C) << (17)) | ((C) >> (32-(17))) ); C += D; } while (0); do { B += (A ^ (C & (D ^ A))) + (*cwp++) + 0xfd469501; B = ( ((B) << (22)) | ((B) >> (32-(22))) ); B += C; } while (0); do { A += (D ^ (B & (C ^ D))) + (*cwp++) + 0x698098d8; A = ( ((A) << (7)) | ((A) >> (32-(7))) ); A += B; } while (0); do { D += (C ^ (A & (B ^ C))) + (*cwp++) + 0x8b44f7af; D = ( ((D) << (12)) | ((D) >> (32-(12))) ); D += A; } while (0); do { C += (B ^ (D & (A ^ B))) + (*cwp++) + 0xffff5bb1; C = ( ((C) << (17)) | ((C) >> (32-(17))) ); C += D; } while (0); do { B += (A ^ (C & (D ^ A))) + (*cwp++) + 0x895cd7be; B = ( ((B) << (22)) | ((B) >> (32-(22))) ); B += C; } while (0); do { A += (D ^ (B & (C ^ D))) + (*cwp++) + 0x6b901122; A = ( ((A) << (7)) | ((A) >> (32-(7))) ); A += B; } while (0); do { D += (C ^ (A & (B ^ C))) + (*cwp++) + 0xfd987193; D = ( ((D) << (12)) | ((D) >> (32-(12))) ); D += A; } while (0); do { C += (B ^ (D & (A ^ B))) + (*cwp++) + 0xa679438e; C = ( ((C) << (17)) | ((C) >> (32-(17))) ); C += D; } while (0); do { B += (A ^ (C & (D ^ A))) + (*cwp++) + 0x49b40821; B = ( ((B) << (22)) | ((B) >> (32-(22))) ); B += C; } while (0); ctx->A += A; ctx->B += B; ctx->C += C; ctx->D += D; }