Ejemplo n.º 1
0
Archivo: sha2.c Proyecto: xharbour/core
void hb_sha384_update( sha384_ctx * ctx, const void * messagev,
                       unsigned int len )
{
   const unsigned char *   message = ( const unsigned char * ) messagev;
   unsigned int            block_nb;
   unsigned int            new_len, rem_len, tmp_len;
   const unsigned char *   shifted_message;

   tmp_len  = SHA384_BLOCK_SIZE - ctx->len;
   rem_len  = len < tmp_len ? len : tmp_len;

   HB_MEMCPY( &ctx->block[ ctx->len ], message, rem_len );

   if( ctx->len + len < SHA384_BLOCK_SIZE )
   {
      ctx->len += len;
      return;
   }

   new_len           = len - rem_len;
   block_nb          = new_len / SHA384_BLOCK_SIZE;

   shifted_message   = message + rem_len;

   sha512_transf( ctx, ctx->block, 1 );
   sha512_transf( ctx, shifted_message, block_nb );

   rem_len = new_len % SHA384_BLOCK_SIZE;

   HB_MEMCPY( ctx->block, &shifted_message[ block_nb << 7 ],
              rem_len );

   ctx->len       = rem_len;
   ctx->tot_len   += ( block_nb + 1 ) << 7;
}
Ejemplo n.º 2
0
void sha512_update(sha512_ctx *ctx, const unsigned char *message,
                   unsigned int len)
{
    unsigned int block_nb;
    unsigned int new_len, rem_len, tmp_len;
    const unsigned char *shifted_message;

    tmp_len = SHA512_BLOCK_SIZE - ctx->len;
    rem_len = len < tmp_len ? len : tmp_len;

    memcpy(&ctx->block[ctx->len], message, rem_len);

    if (ctx->len + len < SHA512_BLOCK_SIZE) {
        ctx->len += len;
        return;
    }

    new_len = len - rem_len;
    block_nb = new_len / SHA512_BLOCK_SIZE;

    shifted_message = message + rem_len;

    sha512_transf(ctx, ctx->block, 1);
    sha512_transf(ctx, shifted_message, block_nb);

    rem_len = new_len % SHA512_BLOCK_SIZE;

    memcpy(ctx->block, &shifted_message[block_nb << 7],
           rem_len);

    ctx->len = rem_len;
    ctx->tot_len += (block_nb + 1) << 7;
}
Ejemplo n.º 3
0
Archivo: sha2.c Proyecto: emazv72/core
void hb_sha384_update(hb_sha384_ctx *ctx, const void *messagev,
                      HB_SIZE len)
{
    const unsigned char * message = ( const unsigned char * ) messagev;
    HB_SIZE block_nb;
    HB_SIZE new_len, rem_len, tmp_len;
    const unsigned char *shifted_message;

    tmp_len = HB_SHA384_BLOCK_SIZE - ctx->len;
    rem_len = len < tmp_len ? len : tmp_len;

    memcpy(&ctx->block[ctx->len], message, rem_len);

    if (ctx->len + len < HB_SHA384_BLOCK_SIZE) {
        ctx->len += len;
        return;
    }

    new_len = len - rem_len;
    block_nb = new_len / HB_SHA384_BLOCK_SIZE;

    shifted_message = message + rem_len;

    sha512_transf(ctx, ctx->block, 1);
    sha512_transf(ctx, shifted_message, block_nb);

    rem_len = new_len % HB_SHA384_BLOCK_SIZE;

    memcpy(ctx->block, &shifted_message[block_nb << 7],
           rem_len);

    ctx->len = rem_len;
    ctx->tot_len += (block_nb + 1) << 7;
}
Ejemplo n.º 4
0
void sha384_final(sha384_ctx *ctx, unsigned char *digest)
{
    unsigned int block_nb;
    unsigned int pm_len;
    unsigned int len_b;

#ifndef UNROLL_LOOPS
    int i;
#endif

    block_nb = (1 + ((SHA384_BLOCK_SIZE - 17)
                     < (ctx->len % SHA384_BLOCK_SIZE)));

    len_b = (ctx->tot_len + ctx->len) << 3;
    pm_len = block_nb << 7;

    memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
    ctx->block[ctx->len] = 0x80;
    UNPACK32(len_b, ctx->block + pm_len - 4);

    sha512_transf(ctx, ctx->block, block_nb);

#ifndef UNROLL_LOOPS
    for (i = 0 ; i < 6; i++) {
        UNPACK64(ctx->h[i], &digest[i << 3]);
    }
#else
    UNPACK64(ctx->h[0], &digest[ 0]);
    UNPACK64(ctx->h[1], &digest[ 8]);
    UNPACK64(ctx->h[2], &digest[16]);
    UNPACK64(ctx->h[3], &digest[24]);
    UNPACK64(ctx->h[4], &digest[32]);
    UNPACK64(ctx->h[5], &digest[40]);
#endif /* !UNROLL_LOOPS */
}
Ejemplo n.º 5
0
void sha512_update_final(sha512_ctx *ctx, const unsigned char *message,
						 unsigned int len, unsigned char *digest)
{
	unsigned int block_nb;
	unsigned int pm_len;
	unsigned int len_b;

#ifndef UNROLL_LOOPS
	int i;
#endif


	memcpy(&ctx->block[ctx->len], message, len);
	ctx->len += len;

	/*new_len = len - rem_len;
	block_nb = new_len / SHA512_BLOCK_SIZE;

	shifted_message = message + rem_len;

	sha512_transf(ctx, ctx->block, 1);
	sha512_transf(ctx, shifted_message, block_nb);

	rem_len = new_len % SHA512_BLOCK_SIZE;

	memcpy(ctx->block, &shifted_message[block_nb << 7],
		rem_len);

	ctx->len = rem_len;
	ctx->tot_len += (block_nb + 1) << 7;
*/

	block_nb = 1 + ((SHA512_BLOCK_SIZE - 17)
		< (ctx->len % SHA512_BLOCK_SIZE));

	len_b = (ctx->tot_len + ctx->len) << 3;
	pm_len = block_nb << 7;

	memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
	ctx->block[ctx->len] = 0x80;
	UNPACK32(len_b, ctx->block + pm_len - 4);


	sha512_transf(ctx, ctx->block, block_nb);

#ifndef UNROLL_LOOPS
	for (i = 0 ; i < 8; i++) {
		UNPACK64(ctx->h[i], &digest[i << 3]);
	}
#else
	UNPACK64(ctx->h[0], &digest[ 0]);
	UNPACK64(ctx->h[1], &digest[ 8]);
	UNPACK64(ctx->h[2], &digest[16]);
	UNPACK64(ctx->h[3], &digest[24]);
	UNPACK64(ctx->h[4], &digest[32]);
	UNPACK64(ctx->h[5], &digest[40]);
	UNPACK64(ctx->h[6], &digest[48]);
	UNPACK64(ctx->h[7], &digest[56]);
#endif /* !UNROLL_LOOPS */
}
Ejemplo n.º 6
0
Archivo: sha2.c Proyecto: emazv72/core
void hb_sha512_final(hb_sha512_ctx *ctx, unsigned char *digest)
{
    HB_SIZE block_nb;
    HB_SIZE pm_len;
    HB_SIZE len_b;

#ifndef UNROLL_LOOPS
    int i;
#endif

    block_nb = 1 + ((HB_SHA512_BLOCK_SIZE - 17)
                     < (ctx->len % HB_SHA512_BLOCK_SIZE));

    len_b = (ctx->tot_len + ctx->len) << 3;
    pm_len = block_nb << 7;

    memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
    ctx->block[ctx->len] = 0x80;
    UNPACK32(len_b, ctx->block + pm_len - 4);

    sha512_transf(ctx, ctx->block, block_nb);

#ifndef UNROLL_LOOPS
    for (i = 0 ; i < 8; i++) {
        UNPACK64(ctx->h[i], &digest[i << 3]);
    }
#else
    UNPACK64(ctx->h[0], &digest[ 0]);
    UNPACK64(ctx->h[1], &digest[ 8]);
    UNPACK64(ctx->h[2], &digest[16]);
    UNPACK64(ctx->h[3], &digest[24]);
    UNPACK64(ctx->h[4], &digest[32]);
    UNPACK64(ctx->h[5], &digest[40]);
    UNPACK64(ctx->h[6], &digest[48]);
    UNPACK64(ctx->h[7], &digest[56]);
#endif /* !UNROLL_LOOPS */
}