@@ -160,7 +160,7 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat
160
160
i = 0 ;
161
161
curData = data;
162
162
while (i < dataByteLen) {
163
- if ((instance->byteIOIndex == 0 ) && (dataByteLen >= (i + rateInBytes) )) {
163
+ if ((instance->byteIOIndex == 0 ) && (dataByteLen-i >= rateInBytes)) {
164
164
#ifdef SnP_FastLoop_Absorb
165
165
/* processing full blocks first */
166
166
if ((rateInBytes % (SnP_width/200 )) == 0 ) {
@@ -186,9 +186,10 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat
186
186
}
187
187
else {
188
188
/* 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 )
191
190
partialBlock = rateInBytes-instance->byteIOIndex ;
191
+ else
192
+ partialBlock = (unsigned int )(dataByteLen - i);
192
193
#ifdef KeccakReference
193
194
displayBytes (1 , " Block to be absorbed (part)" , curData, partialBlock);
194
195
#endif
@@ -263,7 +264,7 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte
263
264
i = 0 ;
264
265
curData = data;
265
266
while (i < dataByteLen) {
266
- if ((instance->byteIOIndex == rateInBytes) && (dataByteLen >= (i + rateInBytes) )) {
267
+ if ((instance->byteIOIndex == rateInBytes) && (dataByteLen-i >= rateInBytes)) {
267
268
for (j=dataByteLen-i; j>=rateInBytes; j-=rateInBytes) {
268
269
SnP_Permute (instance->state );
269
270
SnP_ExtractBytes (instance->state , curData, 0 , rateInBytes);
@@ -280,9 +281,10 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte
280
281
SnP_Permute (instance->state );
281
282
instance->byteIOIndex = 0 ;
282
283
}
283
- partialBlock = (unsigned int )(dataByteLen - i);
284
- if (partialBlock+instance->byteIOIndex > rateInBytes)
284
+ if (dataByteLen-i > rateInBytes-instance->byteIOIndex )
285
285
partialBlock = rateInBytes-instance->byteIOIndex ;
286
+ else
287
+ partialBlock = (unsigned int )(dataByteLen - i);
286
288
i += partialBlock;
287
289
288
290
SnP_ExtractBytes (instance->state , curData, instance->byteIOIndex , partialBlock);
0 commit comments