@@ -160,7 +160,7 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat
160160 i = 0 ;
161161 curData = data;
162162 while (i < dataByteLen) {
163- if ((instance->byteIOIndex == 0 ) && (dataByteLen >= (i + rateInBytes) )) {
163+ if ((instance->byteIOIndex == 0 ) && (dataByteLen-i >= rateInBytes)) {
164164#ifdef SnP_FastLoop_Absorb
165165 /* processing full blocks first */
166166 if ((rateInBytes % (SnP_width/200 )) == 0 ) {
@@ -186,9 +186,10 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat
186186 }
187187 else {
188188 /* normal lane: using the message queue */
189- partialBlock = (unsigned int )(dataByteLen - i);
190- if (partialBlock+instance->byteIOIndex > rateInBytes)
189+ if (dataByteLen-i > rateInBytes-instance->byteIOIndex )
191190 partialBlock = rateInBytes-instance->byteIOIndex ;
191+ else
192+ partialBlock = (unsigned int )(dataByteLen - i);
192193 #ifdef KeccakReference
193194 displayBytes (1 , " Block to be absorbed (part)" , curData, partialBlock);
194195 #endif
@@ -263,7 +264,7 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte
263264 i = 0 ;
264265 curData = data;
265266 while (i < dataByteLen) {
266- if ((instance->byteIOIndex == rateInBytes) && (dataByteLen >= (i + rateInBytes) )) {
267+ if ((instance->byteIOIndex == rateInBytes) && (dataByteLen-i >= rateInBytes)) {
267268 for (j=dataByteLen-i; j>=rateInBytes; j-=rateInBytes) {
268269 SnP_Permute (instance->state );
269270 SnP_ExtractBytes (instance->state , curData, 0 , rateInBytes);
@@ -280,9 +281,10 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte
280281 SnP_Permute (instance->state );
281282 instance->byteIOIndex = 0 ;
282283 }
283- partialBlock = (unsigned int )(dataByteLen - i);
284- if (partialBlock+instance->byteIOIndex > rateInBytes)
284+ if (dataByteLen-i > rateInBytes-instance->byteIOIndex )
285285 partialBlock = rateInBytes-instance->byteIOIndex ;
286+ else
287+ partialBlock = (unsigned int )(dataByteLen - i);
286288 i += partialBlock;
287289
288290 SnP_ExtractBytes (instance->state , curData, instance->byteIOIndex , partialBlock);
0 commit comments