static void setneutral(ge25519 *r) { fe25519_setint(&r->x,0); fe25519_setint(&r->y,1); fe25519_setint(&r->z,1); fe25519_setint(&r->t,0); }
static void mladder(fe25519 *xr, fe25519 *zr, const uint8_t s[32]) { fe25519 work[5]; work[0] = *xr; fe25519_setint(work + 1, 1); fe25519_setint(work + 2, 0); work[3] = *xr; fe25519_setint(work + 4, 1); int i, j; uint8_t prevbit = 0; j = 6; for (i = 31; i >= 0; i--) { while (j >= 0) { const uint8_t bit = 1 & (s[i] >> j); const uint64_t swap = bit ^ prevbit; prevbit = bit; x25519_x86_64_work_cswap(work + 1, swap); x25519_x86_64_ladderstep(work); j -= 1; } j = 7; } *xr = work[1]; *zr = work[2]; }
void fe25519_neg(fe25519 *r, const fe25519 *x) { fe25519 t; fe25519_setint(&t,0); fe25519_sub(r,&t,x); }