* Joel Rees <[email protected]> [2014-10-30 08:38 +0900]:
> -----------------------------
> // The core function: test two regions of memory for bytewise equality
> with constant time.
> // If cmplength is less than min( xlen, ylen ), comparison is incomplete.
> static int equals_internal_constime(
> const char *x, unsigned int xlen,
> const char *y, unsigned int ylen,
> int cmplength) {
> 
>   int result = 0;
> 
>   while ( --cmplength >= 0 ) {
>     char xtemp = 0;
>     char ytemp = 0;
> 
>     if ( --xlen >= 0 ) xtemp = *x++;
>     if ( --ylen >= 0 ) ytemp = *y++;
> 
>     result |= xtemp ^ ytemp;
>   }
> 
>   return (xlen == ylen) && (result == 0);
> }
> -----------------------------

Perhaps I am missing the obvious, but 0-1 ist UINT_MAX, which is
bigger than zero.

And if this would work, the runtime of the loop's body would depend on
whether the assignments are executed or not.

Nicolas


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: https://lists.debian.org/[email protected]

Reply via email to