Commit 59314f30 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

engines/ccgost/gosthash.c: simplify and avoid SEGV.

PR: 3275
(cherry picked from commit ea38f020)
parent cc6dc9b2
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -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;	
	}