engines/ccgost/gosthash.c: simplify and avoid SEGV.
PR: 3275
(cherry picked from commit ea38f02049
)
This commit is contained in:
parent
cc6dc9b229
commit
59314f304e
@ -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 New Issue
Block a user