@@ -171,7 +171,7 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat |
171 | 171 | i = 0; |
172 | 172 | curData = data; |
173 | 173 | while(i < dataByteLen) { |
174 | | - if ((instance->byteIOIndex == 0) && (dataByteLen >= (i + rateInBytes))) { |
| 174 | + if ((instance->byteIOIndex == 0) && (dataByteLen-i >= rateInBytes)) { |
175 | 175 | #ifdef SnP_FastLoop_Absorb |
176 | 176 | /* processing full blocks first */ |
177 | 177 |
|
@@ -199,10 +199,10 @@ int SpongeAbsorb(SpongeInstance *instance, const unsigned char *data, size_t dat |
199 | 199 | } |
200 | 200 | else { |
201 | 201 | /* normal lane: using the message queue */ |
202 | | - |
203 | | - partialBlock = (unsigned int)(dataByteLen - i); |
204 | | - if (partialBlock+instance->byteIOIndex > rateInBytes) |
| 202 | + if (dataByteLen-i > rateInBytes-instance->byteIOIndex) |
205 | 203 | partialBlock = rateInBytes-instance->byteIOIndex; |
| 204 | + else |
| 205 | + partialBlock = (unsigned int)(dataByteLen - i); |
206 | 206 | #ifdef KeccakReference |
207 | 207 | displayBytes(1, "Block to be absorbed (part)", curData, partialBlock); |
208 | 208 | #endif |
@@ -281,7 +281,7 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte |
281 | 281 | i = 0; |
282 | 282 | curData = data; |
283 | 283 | while(i < dataByteLen) { |
284 | | - if ((instance->byteIOIndex == rateInBytes) && (dataByteLen >= (i + rateInBytes))) { |
| 284 | + if ((instance->byteIOIndex == rateInBytes) && (dataByteLen-i >= rateInBytes)) { |
285 | 285 | for(j=dataByteLen-i; j>=rateInBytes; j-=rateInBytes) { |
286 | 286 | SnP_Permute(instance->state); |
287 | 287 | SnP_ExtractBytes(instance->state, curData, 0, rateInBytes); |
@@ -299,9 +299,10 @@ int SpongeSqueeze(SpongeInstance *instance, unsigned char *data, size_t dataByte |
299 | 299 | SnP_Permute(instance->state); |
300 | 300 | instance->byteIOIndex = 0; |
301 | 301 | } |
302 | | - partialBlock = (unsigned int)(dataByteLen - i); |
303 | | - if (partialBlock+instance->byteIOIndex > rateInBytes) |
| 302 | + if (dataByteLen-i > rateInBytes-instance->byteIOIndex) |
304 | 303 | partialBlock = rateInBytes-instance->byteIOIndex; |
| 304 | + else |
| 305 | + partialBlock = (unsigned int)(dataByteLen - i); |
305 | 306 | i += partialBlock; |
306 | 307 |
|
307 | 308 | SnP_ExtractBytes(instance->state, curData, instance->byteIOIndex, partialBlock); |
|