Ejemplo n.º 1
0
void ge25519_scalarmult_base(ge25519_p3 *r, const sc25519 *s)
{
  signed char b[64];
  signed char i;       //1 byte
  ge25519_aff t;	   //64 bytes
  ge25519_p1p1 tp1p1;  //128 bytes
  sc25519_window4(b,s);
  
  choose_t((ge25519_aff *)r, b[63]);
  fe25519_setone(&r->z);
  fe25519_mul(&r->t, &r->x, &r->y);

  for(i=62;i>=0;i--)
  {
    dbl_p1p1(&tp1p1, (ge25519_p2 *)r);
    p1p1_to_p2((ge25519_p2 *)r, &tp1p1);
    dbl_p1p1(&tp1p1, (ge25519_p2 *)r);
    p1p1_to_p2((ge25519_p2 *)r, &tp1p1);
    dbl_p1p1(&tp1p1, (ge25519_p2 *)r);
    p1p1_to_p2((ge25519_p2 *)r, &tp1p1);
    dbl_p1p1(&tp1p1, (ge25519_p2 *)r);
    p1p1_to_p3(r, &tp1p1);

    choose_t(&t, b[i]);
    ge25519_mixadd2(r, &t);
  }
}
Ejemplo n.º 2
0
void ge25519_scalarmult_base(ge25519_p3 *r, const sc25519 *s)
{
  signed char b[85];
  int i;
  ge25519_aff t;
  sc25519_window3(b,s);

  choose_t((ge25519_aff *)r, 0, b[0]);
  fe25519_setone(&r->z);
  fe25519_mul(&r->t, &r->x, &r->y);
  for(i=1;i<85;i++)
  {
    choose_t(&t, (unsigned long long) i, b[i]);
    ge25519_mixadd2(r, &t);
  }
}