00001
00008 #include "dkcSHA384.h"
00009 #include "dkcStdio.h"
00010
00011
00012
00013 DKC_SHA384 *WINAPI dkcAllocSHA384(){
00014 DKC_SHA384 *p = dkcAllocate(sizeof(DKC_SHA384));
00015 if(NULL==p){
00016 return NULL;
00017 }
00018 dkcSHA384Init(p);
00019 return p;
00020 }
00021
00022 void WINAPI dkcSHA384Init(DKC_SHA384 *p){
00023
00024 p->m_qwH[0] = 0xcbbb9d5dc1059ed8;
00025 p->m_qwH[1] = 0x629a292a367cd507;
00026 p->m_qwH[2] = 0x9159015a3070dd17;
00027 p->m_qwH[3] = 0x152fecd8f70e5939;
00028 p->m_qwH[4] = 0x67332667ffc00b31;
00029 p->m_qwH[5] = 0x8eb44a8768581511;
00030 p->m_qwH[6] = 0xdb0c2e0d64f98fa7;
00031 p->m_qwH[7] = 0x47b5481dbefa4fa4;
00032 p->m_qwLNumBits = 0;
00033 p->m_qwHNumBits = 0;
00034 p->m_nNumChr = 0;
00035
00036 p->mFinalized = FALSE;
00037 }
00038
00039 void WINAPI dkcSHA384Load(DKC_SHA384 *p,const BYTE *pBuffer,DWORD dwSize){
00040 dkcSHA512Load(p,pBuffer,dwSize);
00041 }
00042
00043 void WINAPI dkcSHA384Final(DKC_SHA384 *p){
00044 dkcSHA512Final(p);
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 }
00067
00068 int WINAPI dkcSHA384DigestStr(DKC_SHA384 *p,char *buff,size_t size){
00069
00070
00071 char s[SHA384_STR_BUFFER_SIZE];
00072
00073 int i;
00074
00075 s[SHA384_STR_BUFFER_SIZE]='\0';
00076
00077 if(SHA384_STR_BUFFER_SIZE > size){
00078 return edk_BufferOverFlow;
00079 }
00080 if(FALSE==p->mFinalized){
00081
00082 return edk_LogicError;
00083 }
00084
00085
00086
00087
00088
00089
00090 for( i=0;i<SHA384_BIN_BUFFER_SIZE;i++){
00091
00092
00093
00094
00095 sprintf(s + i * 2, "%02x", (BYTE)(p->m_qwH[i >> 3] >> (8 * (~i & 7))));
00096
00097 }
00098
00099
00100
00101 return dkc_strcpy(buff,size,s,strlen(s));
00102 }
00103
00104
00105 int WINAPI dkcSHA384FinalDigestStr(DKC_SHA384 *p,char *buff,size_t size){
00106 dkcSHA384Final(p);
00107 return dkcSHA384DigestStr(p,buff,size);
00108 }
00109
00110 int WINAPI dkcSHA384Digest(DKC_SHA384 *p,BYTE *buff,size_t size){
00111 ULONG i = 0;
00112
00113
00114
00115
00116 if(SHA384_BIN_BUFFER_SIZE > size){
00117 return edk_BufferOverFlow;
00118 }
00119 if(FALSE==p->mFinalized){
00120
00121 return edk_LogicError;
00122 }
00123
00124
00125
00126
00127
00128 for(i = 0; i < SHA384_BIN_BUFFER_SIZE; ++i){
00129
00130 buff[i] = (BYTE)(p->m_qwH[i >> 3] >> (8 * (~i & 7)));
00131 }
00132 return edk_SUCCEEDED;
00133
00134
00135 }
00136
00137
00138 int WINAPI dkcSHA384FinalDigest(DKC_SHA384 *p,BYTE *buff,size_t size){
00139 dkcSHA384Final(p);
00140 return dkcSHA384Digest(p,buff,size);
00141 }
00142
00143 int WINAPI dkcFreeSHA384(DKC_SHA384 **p){
00144 if(NULL==p){
00145 return edk_FAILED;
00146 }
00147 return dkcFree(p);
00148 }