00001
00010 #define DKUTIL_C_MD5_C
00011
00012 #include "dkcMD5.h"
00013 #include "dkcStdio.h"
00014
00015
00016 DKC_MD5 *WINAPI dkcAllocMD5(){
00017 DKC_MD5 *p = (DKC_MD5 *)dkcAllocate(sizeof(DKC_MD5));
00018 if(NULL==p){
00019 return NULL;
00020 }
00021 dkcMD5Init(p);
00022 return p;
00023 }
00024
00025 void WINAPI dkcMD5Init(DKC_MD5 *p){
00026 md5_init(&(p->d));
00027 p->mFinalized = FALSE;
00028 }
00029
00030 int WINAPI dkcMD5Load(DKC_MD5 *p,const BYTE *pBuffer,DWORD dwSize){
00031 if(dwSize > INT_MAX){
00032 return edk_FAILED;
00033 }
00034
00035 dkcMD5LoadStandard(p,pBuffer,dwSize);
00036 return edk_SUCCEEDED;
00037 }
00038
00039 void WINAPI dkcMD5LoadStandard(DKC_MD5 *p,const BYTE *pBuffer,DWORD dwSize){
00040 if(p->mFinalized){
00041 return;
00042 }
00043 md5_append(&(p->d),pBuffer,(int)dwSize);
00044 }
00045
00046
00047
00048 void WINAPI dkcMD5Final(DKC_MD5 *p){
00049 if(p->mFinalized){
00050 return;
00051 }
00052 md5_finalize(&(p->d));
00053
00054 p->mFinalized = TRUE;
00055 }
00056
00057 int WINAPI dkcMD5Digest(DKC_MD5 *p,BYTE *buff,size_t size){
00058
00059 if(size < MD5_BIN_BUFFER_SIZE){
00060 return edk_BufferOverFlow;
00061 }
00062
00063 md5_get_digest(&(p->d),(BYTE *)buff);
00064 return edk_SUCCEEDED;
00065 }
00066
00067 int WINAPI dkcMD5DigestStr(DKC_MD5 *p,char *buff,size_t size){
00068
00069 if(size < MD5_STR_BUFFER_SIZE){
00070 return edk_BufferOverFlow;
00071 }
00072 md5_get_str_digest(&(p->d),(char *)buff);
00073 return edk_SUCCEEDED;
00074 }
00075
00076 int WINAPI dkcMD5FinalDigestStr(DKC_MD5 *p,char *buff,size_t size){
00077 dkcMD5Final(p);
00078 return dkcMD5DigestStr(p,buff,size);
00079 }
00080
00081 int WINAPI dkcMD5FinalDigest(DKC_MD5 *p,BYTE *buff,size_t size){
00082 dkcMD5Final(p);
00083 return dkcMD5Digest(p,buff,size);
00084
00085 }
00086
00087
00088 int WINAPI dkcFreeMD5(DKC_MD5 **p){
00089 if(NULL==p){
00090 return edk_FAILED;
00091 }
00092 return dkcFree((void **)p);
00093 }