@@ -405,14 +405,14 @@ public boolean equals(Object obj) {
405405 * Method is package private only so that tests run.
406406 *
407407 * @param a = a[0]+256*a[1]+...+256^31 a[31]
408- * @return
408+ * @return 64 bytes, each between -8 and 7
409409 */
410410 static byte [] toRadix16 (byte [] a ) {
411411 byte [] e = new byte [64 ];
412412 int i ;
413413 // Radix 16 notation
414414 for (i = 0 ; i < 32 ; i ++) {
415- e [2 *i +0 ] = (byte ) (( a [i ] >> 0 ) & 15 );
415+ e [2 *i +0 ] = (byte ) (a [i ] & 15 );
416416 e [2 *i +1 ] = (byte ) ((a [i ] >> 4 ) & 15 );
417417 }
418418 /* each e[i] is between 0 and 15 */
@@ -422,10 +422,10 @@ static byte[] toRadix16(byte[] a) {
422422 e [i ] += carry ;
423423 carry = e [i ] + 8 ;
424424 carry >>= 4 ;
425- e [i ] -= carry << 4 ;
425+ e [i ] -= carry << 4 ;
426426 }
427427 e [63 ] += carry ;
428- /* each e[i] is between -8 and 8 */
428+ /* each e[i] is between -8 and 7 */
429429 return e ;
430430 }
431431
@@ -442,12 +442,11 @@ static byte[] toRadix16(byte[] a) {
442442 */
443443 GroupElement cmov (GroupElement u , int b ) {
444444 GroupElement ret = null ;
445- int i ;
446- for (i = 0 ; i < b ; i ++) {
445+ for (int i = 0 ; i < b ; i ++) {
447446 // Only for b == 1
448447 ret = u ;
449448 }
450- for (i = 0 ; i < 1 -b ; i ++) {
449+ for (int i = 0 ; i < 1 -b ; i ++) {
451450 // Only for b == 0
452451 ret = this ;
453452 }
@@ -457,6 +456,7 @@ GroupElement cmov(GroupElement u, int b) {
457456 /**
458457 * Look up 16^i r_i B in the precomputed table.
459458 * No secret array indices, no secret branching.
459+ * Constant time.
460460 *
461461 * Must have previously precomputed.
462462 *
@@ -492,6 +492,7 @@ GroupElement select(int pos, int b) {
492492 * h = a * Bb where a = a[0]+256*a[1]+...+256^31 a[31] and
493493 * B is this point. If its lookup table has not been precomputed, it
494494 * will be at the start of the method (and cached for later calls).
495+ * Constant time.
495496 *
496497 * Preconditions: (TODO: Check this applies here)
497498 * a[31] <= 127
@@ -531,28 +532,27 @@ public GroupElement scalarMultiply(byte[] a) {
531532 *
532533 * Method is package private only so that tests run.
533534 *
534- * @param a
535- * @return
535+ * @param a 32 bytes
536+ * @return 256 bytes
536537 */
537538 static byte [] slide (byte [] a ) {
538539 byte [] r = new byte [256 ];
539- int i ;
540- int b ;
541- int k ;
542540
543- for (i = 0 ;i < 256 ;++i ) {
541+ // put each bit of 'a' into a separate byte, 0 or 1
542+ for (int i = 0 ; i < 256 ; ++i ) {
544543 r [i ] = (byte ) (1 & (a [i >> 3 ] >> (i & 7 )));
545544 }
546545
547- for (i = 0 ;i < 256 ;++i ) {
546+ for (int i = 0 ; i < 256 ; ++i ) {
548547 if (r [i ] != 0 ) {
549- for (b = 1 ; b <= 6 && i + b < 256 ; ++b ) {
548+ for (int b = 1 ; b <= 6 && i + b < 256 ; ++b ) {
550549 if (r [i + b ] != 0 ) {
551550 if (r [i ] + (r [i + b ] << b ) <= 15 ) {
552- r [i ] += r [i + b ] << b ; r [i + b ] = 0 ;
551+ r [i ] += r [i + b ] << b ;
552+ r [i + b ] = 0 ;
553553 } else if (r [i ] - (r [i + b ] << b ) >= -15 ) {
554554 r [i ] -= r [i + b ] << b ;
555- for (k = i + b ; k < 256 ; ++k ) {
555+ for (int k = i + b ; k < 256 ; ++k ) {
556556 if (r [k ] == 0 ) {
557557 r [k ] = 1 ;
558558 break ;
0 commit comments