00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <string.h>
00023 #include "md5.h"
00024
00025 void HMAC_MD5 (unsigned char *output, const unsigned char *input,
00026 unsigned char *key, unsigned int inputLen, unsigned int keyLen)
00027 {
00028 unsigned int i;
00029 MD5_CTX context;
00030 unsigned char key_tmp[64];
00031
00032 for (i=0;i<64;i++)
00033 key_tmp[i] = (i<keyLen)?key[i]^0x36:0x36;
00034
00035 MD5Init(&context);
00036 MD5Update(&context, key_tmp, 64);
00037 MD5Update(&context, input, inputLen);
00038 MD5Final(output, &context);
00039
00040 for (i=0;i<64;i++)
00041 key_tmp[i] = (i<keyLen)?key[i]^0x5c:0x5c;
00042
00043
00044 MD5Init(&context);
00045 MD5Update(&context, key_tmp, 64);
00046 MD5Update(&context, output, 16);
00047 MD5Final(output, &context);
00048 }
00049