Example #1
0
void blake224_hash( uint8_t *out, const uint8_t *in, uint64_t inlen )
{
  state224 S;
  blake224_init( &S );
  blake224_update( &S, in, inlen );
  blake224_final( &S, out );
}
Example #2
0
unsigned char *blake224_file(unsigned char *out, FILE *fp) {
	state224 context;
	size_t ret = 0;
	int errsv = 0;
	unsigned char buf[8192], *digest = NULL;

	blake224_init(&context);

	for (;;) {
		ret = fread(buf, 1, 8192, fp);
		errsv = errno;

		if ((ret != 8192) && ferror(fp)) {
			errno = errsv;
			return NULL;
		}

		blake224_update(&context, (const uint8_t *) buf, ret);

		if (feof(fp))
			break;
	}

	if (!out) {
		if (!(digest = malloc(28)))
			return NULL;
	} else {
		digest = out;
	}

	blake224_final(&context, (uint8_t *) digest);

	return digest;
}
Example #3
0
/* BLAKE-224 Generic Interface */
unsigned char *blake224_buffer(unsigned char *out, const unsigned char *in, size_t in_len) {
	state224 context;
	unsigned char *digest = NULL;

	blake224_init(&context);

	if (!out) {
		if (!(digest = malloc(28)))
			return NULL;
	} else {
		digest = out;
	}

	blake224_update(&context, (const uint8_t *) in, in_len);
	blake224_final(&context, (uint8_t *) digest);

	return digest;
}
Example #4
0
int main( int argc, char **argv )
{
#define BLOCK224 64
  FILE *fp;
  int i, j, bytesread;
  uint8_t in[BLOCK224], out[28];
  state224 S;
  blake224_test();

  for( i = 1; i < argc; ++i )
  {
    fp = fopen( *( argv + i ), "r" );

    if ( fp == NULL )
    {
      printf( "Error: unable to open %s\n", *( argv + i ) );
      return 1;
    }

    blake224_init( &S );

    while( 1 )
    {
      bytesread = fread( in, 1, BLOCK224, fp );

      if ( bytesread )
        blake224_update( &S, in, bytesread );
      else
        break;
    }

    blake224_final( &S, out );

    for( j = 0; j < 28; ++j )
      printf( "%02x", out[j] );

    printf( " %s\n", *( argv + i ) );
    fclose( fp );
  }

  return 0;
}
Example #5
0
void blake224_final( state224 *S, uint8_t *out )
{
  uint8_t msglen[8], zz = 0x00, oz = 0x80;
  uint32_t lo = S->t[0] + ( S->buflen << 3 ), hi = S->t[1];

  /* support for hashing more than 2^32 bits */
  if ( lo < ( S->buflen << 3 ) ) hi++;

  U32TO8_BIG(  msglen + 0, hi );
  U32TO8_BIG(  msglen + 4, lo );

  if ( S->buflen == 55 )   /* one padding byte */
  {
    S->t[0] -= 8;
    blake224_update( S, &oz, 1 );
  }
  else
  {
    if ( S->buflen < 55 )   /* enough space to fill the block  */
    {
      if ( !S->buflen ) S->nullt = 1;

      S->t[0] -= 440 - ( S->buflen << 3 );
      blake224_update( S, padding, 55 - S->buflen );
    }
    else   /* need 2 compressions */
    {
      S->t[0] -= 512 - ( S->buflen << 3 );
      blake224_update( S, padding, 64 - S->buflen );
      S->t[0] -= 440;
      blake224_update( S, padding + 1, 55 );
      S->nullt = 1;
    }

    blake224_update( S, &zz, 1 );
    S->t[0] -= 8;
  }

  S->t[0] -= 64;
  blake224_update( S, msglen, 8 );
  U32TO8_BIG( out + 0, S->h[0] );
  U32TO8_BIG( out + 4, S->h[1] );
  U32TO8_BIG( out + 8, S->h[2] );
  U32TO8_BIG( out + 12, S->h[3] );
  U32TO8_BIG( out + 16, S->h[4] );
  U32TO8_BIG( out + 20, S->h[5] );
  U32TO8_BIG( out + 24, S->h[6] );
}