Back to index

lightning-sunbird  0.9+nobinonly
Functions
ec_naf.c File Reference
#include "ecl-priv.h"

Go to the source code of this file.

Functions

int ec_twoTo (int e)
mp_err ec_compute_wNAF (signed char *out, int bitsize, const mp_int *in, int w)

Function Documentation

mp_err ec_compute_wNAF ( signed char *  out,
int  bitsize,
const mp_int in,
int  w 
)

Definition at line 62 of file ec_naf.c.

{
       mp_int k;
       mp_err res = MP_OKAY;
       int i, twowm1, mask;

       twowm1 = ec_twoTo(w - 1);
       mask = 2 * twowm1 - 1;

       MP_DIGITS(&k) = 0;
       MP_CHECKOK(mp_init_copy(&k, in));

       i = 0;
       /* Compute wNAF form */
       while (mp_cmp_z(&k) > 0) {
              if (mp_isodd(&k)) {
                     out[i] = MP_DIGIT(&k, 0) & mask;
                     if (out[i] >= twowm1)
                            out[i] -= 2 * twowm1;

                     /* Subtract off out[i].  Note mp_sub_d only works with
                      * unsigned digits */
                     if (out[i] >= 0) {
                            mp_sub_d(&k, out[i], &k);
                     } else {
                            mp_add_d(&k, -(out[i]), &k);
                     }
              } else {
                     out[i] = 0;
              }
              mp_div_2(&k, &k);
              i++;
       }
       /* Zero out the remaining elements of the out array. */
       for (; i < bitsize + 1; i++) {
              out[i] = 0;
       }
  CLEANUP:
       mp_clear(&k);
       return res;

}

Here is the caller graph for this function:

int ec_twoTo ( int  e)

Definition at line 44 of file ec_naf.c.

{
       int a = 1;
       int i;

       for (i = 0; i < e; i++) {
              a *= 2;
       }
       return a;
}

Here is the caller graph for this function: