Skip to content
Snippets Groups Projects
Commit 1f314271 authored by Richard van der Hoff's avatar Richard van der Hoff
Browse files

megolm_advance_to: Remove excessive optimisation

There was some slightly overcomplex logic designed to save a couple of hash
operations when R(0) and R(1) were advanced, but the extra code was hard to
understand and didn't save much.
parent ef8d24f4
No related branches found
No related tags found
No related merge requests found
......@@ -106,6 +106,7 @@ void megolm_advance_to(Megolm *megolm, uint32_t advance_to) {
for (j = 0; j < (int)MEGOLM_RATCHET_PARTS; j++) {
int shift = (MEGOLM_RATCHET_PARTS-j-1) * 8;
uint32_t mask = (~(uint32_t)0) << shift;
int k;
/* how many times to we need to rehash this part? */
int steps = (advance_to >> shift) - (megolm->counter >> shift);
......@@ -122,30 +123,14 @@ void megolm_advance_to(Megolm *megolm, uint32_t advance_to) {
steps --;
}
/* on the last step (except for j=3), we need to bump at least R(j+1);
* depending on the target count, we may also need to bump R(j+2) and
* R(j+3).
/* on the last step we also need to bump R(j+1)...R(3).
*
* (Theoretically, we could skip bumping R(j+2) if we're going to bump
* R(j+1) again, but the code to figure that out is a bit baroque and
* doesn't save us much).
*/
int k;
switch(j) {
case 0:
if (!(advance_to & 0xFFFF00)) { k = 3; }
else if (!(advance_to & 0xFF00)) { k = 2; }
else { k = 1; }
break;
case 1:
if (!(advance_to & 0xFF00)) { k = 3; }
else { k = 2; }
break;
case 2:
case 3:
k = 3;
break;
}
while (k >= j) {
for (k = 3; k >= j; k--) {
rehash_part(megolm->data, j, k);
k--;
}
megolm->counter = advance_to & mask;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment