int main(int argc, char **argv) { Prog_Init(argc,argv,"?|h,l",PROG_EXIT_ON_ERROR); if ( Prog_Arguments_Count() ) { YOYO_BUFFER *bf; byte_t sign[20] = {0}; bf = Oj_Read_All(Cfile_Open(Prog_Argument(0),"r")); Sha1_Digest(bf->at,bf->count,sign); puts(Str_Hex_Encode(sign,20)); } else { int i, j, buflen; byte_t buf[1000]; int verbose = Prog_Has_Opt("l"); YOYO_SHA1 ctx; for ( i = 0; i < 3; i++ ) { if ( verbose ) printf( " SHA-1 test #%d: ", i + 1 ); Sha1_Start( &ctx ); if ( i == 2 ) { memset( buf, 'a', buflen = 1000 ); for ( j = 0; j < 1000; j++ ) Sha1_Update( &ctx, buf, buflen ); } else Sha1_Update( &ctx,Data_Buf[i], Data_Buflen[i] ); Sha1_Finish( &ctx, buf ); if ( memcmp( buf,Data_Sum[i], 20 ) != 0 ) { if ( verbose ) puts("failed"); return 1; } else { if( verbose ) puts("passed"); } } } return 0; }
STDMETHODIMP COutStreamWithSha1::Write(const void *data, UInt32 size, UInt32 *processedSize) { HRESULT result = S_OK; if (_stream) result = _stream->Write(data, size, &size); if (_calculate) Sha1_Update(&_sha, (const Byte *)data, size); _size += size; if (processedSize) *processedSize = size; return result; }
STDMETHODIMP_(void) CSha1Hasher::Update(const void *data, UInt32 size) throw() { Sha1_Update(&_sha, (const Byte *)data, size); }