engines/ccgost/gosthash.c: simplify and avoid SEGV.
PR: 3275
This commit is contained in:
parent
5e44c144e6
commit
ea38f02049
1 changed files with 9 additions and 10 deletions
|
@ -180,8 +180,6 @@ int start_hash(gost_hash_ctx *ctx)
|
|||
*/
|
||||
int hash_block(gost_hash_ctx *ctx,const byte *block, size_t length)
|
||||
{
|
||||
const byte *curptr=block;
|
||||
const byte *barrier=block+(length-32);/* Last byte we can safely hash*/
|
||||
if (ctx->left)
|
||||
{
|
||||
/*There are some bytes from previous step*/
|
||||
|
@ -196,24 +194,25 @@ int hash_block(gost_hash_ctx *ctx,const byte *block, size_t length)
|
|||
{
|
||||
return 1;
|
||||
}
|
||||
curptr=block+add_bytes;
|
||||
block+=add_bytes;
|
||||
length-=add_bytes;
|
||||
hash_step(ctx->cipher_ctx,ctx->H,ctx->remainder);
|
||||
add_blocks(32,ctx->S,ctx->remainder);
|
||||
ctx->len+=32;
|
||||
ctx->left=0;
|
||||
}
|
||||
while (curptr<=barrier)
|
||||
while (length>=32)
|
||||
{
|
||||
hash_step(ctx->cipher_ctx,ctx->H,curptr);
|
||||
hash_step(ctx->cipher_ctx,ctx->H,block);
|
||||
|
||||
add_blocks(32,ctx->S,curptr);
|
||||
add_blocks(32,ctx->S,block);
|
||||
ctx->len+=32;
|
||||
curptr+=32;
|
||||
block+=32;
|
||||
length-=32;
|
||||
}
|
||||
if (curptr!=block+length)
|
||||
if (length)
|
||||
{
|
||||
ctx->left=block+length-curptr;
|
||||
memcpy(ctx->remainder,curptr,ctx->left);
|
||||
memcpy(ctx->remainder,block,ctx->left=length);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue