engines/ccgost/gosthash.c: simplify and avoid SEGV.
PR: 3275 (cherry picked from commit ea38f020492042bc1d1adc26ef197b0b9cadf968)
This commit is contained in:
parent
e67c71c8fd
commit
ce2c6d8452
@ -180,8 +180,6 @@ int start_hash(gost_hash_ctx *ctx)
|
|||||||
*/
|
*/
|
||||||
int hash_block(gost_hash_ctx *ctx,const byte *block, size_t length)
|
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)
|
if (ctx->left)
|
||||||
{
|
{
|
||||||
/*There are some bytes from previous step*/
|
/*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;
|
return 1;
|
||||||
}
|
}
|
||||||
curptr=block+add_bytes;
|
block+=add_bytes;
|
||||||
|
length-=add_bytes;
|
||||||
hash_step(ctx->cipher_ctx,ctx->H,ctx->remainder);
|
hash_step(ctx->cipher_ctx,ctx->H,ctx->remainder);
|
||||||
add_blocks(32,ctx->S,ctx->remainder);
|
add_blocks(32,ctx->S,ctx->remainder);
|
||||||
ctx->len+=32;
|
ctx->len+=32;
|
||||||
ctx->left=0;
|
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;
|
ctx->len+=32;
|
||||||
curptr+=32;
|
block+=32;
|
||||||
|
length-=32;
|
||||||
}
|
}
|
||||||
if (curptr!=block+length)
|
if (length)
|
||||||
{
|
{
|
||||||
ctx->left=block+length-curptr;
|
memcpy(ctx->remainder,block,ctx->left=length);
|
||||||
memcpy(ctx->remainder,curptr,ctx->left);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user