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