Esempio n. 1
0
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);
}