int HashFile(char **Return, char *Type, char *Path, int Encoding) { THash *Hash; STREAM *S; char *Tempstr=NULL; int result; S=STREAMOpenFile(Path,O_RDONLY); if (! S) return(FALSE); Hash=HashInit(Type); if (! Hash) { STREAMClose(S); return(FALSE); } Tempstr=SetStrLen(Tempstr,4096); result=STREAMReadBytes(S,Tempstr,4096); while (result !=EOF) { Hash->Update(Hash, Tempstr, result); result=STREAMReadBytes(S,Tempstr,4096); } DestroyString(Tempstr); STREAMClose(S); result=Hash->Finish(Hash, Encoding, Return); HashDestroy(Hash); return(result); }
int HashBytes(char **Return, char *Type, char *text, int len, int Encoding) { THash *Hash; Hash=HashInit(Type); Hash->Update(Hash, text, len); return(Hash->Finish(Hash, Encoding, Return)); }
int HashBytes(char **Return, char *Type, char *text, int len, int Encoding) { THash *Hash; int result; Hash=HashInit(Type); if (! Hash) return(0); Hash->Update(Hash, text, len); result=Hash->Finish(Hash, Encoding, Return); HashDestroy(Hash); return(result); }
int HMACFinish(THash *HMAC, int Encoding, char **HashStr) { THash *Hash; int len, result; Hash=(THash *) HMAC->Ctx; //We've done with this now, blank it and reuse for the inner result HMAC->Key1=CopyStr(HMAC->Key1,""); len=Hash->Finish(Hash,0,&HMAC->Key1); HMAC->Key2=SetStrLen(HMAC->Key2,HMAC_BLOCKSIZE+len); memcpy(HMAC->Key2+HMAC_BLOCKSIZE,HMAC->Key1,len); //Hash->Type result=HashBytes(HashStr,Hash->Type,HMAC->Key2,HMAC_BLOCKSIZE+len,Encoding); return(result); }