in src/ristretto255.js [615:670]
function elligator(p, t) {
const c = lowlevel.gf();
const n = lowlevel.gf();
const one = lowlevel.gf();
const r = lowlevel.gf();
const rpd = lowlevel.gf();
const s = lowlevel.gf();
const sPrime = lowlevel.gf();
const ss = lowlevel.gf();
const u = lowlevel.gf();
const v = lowlevel.gf();
const w0 = lowlevel.gf();
const w1 = lowlevel.gf();
const w2 = lowlevel.gf();
const w3 = lowlevel.gf();
lowlevel.set25519(one, gf1); /* one = 1 */
lowlevel.S(r, t); /* r = t^2 */
lowlevel.M(r, sqrtm1, r); /* r = sqrt(-1)*t^2 */
lowlevel.A(u, r, one); /* u = r+1 = sqrt(-1)*t^2 + 1 */
lowlevel.M(
u,
u,
onemsqd
); /* u = (r+1)*(1-d^2) = (sqrt(-1)*t^2 + 1) * (1-d^2) */
lowlevel.set25519(c, gf1); /* c = 1 */
neg25519(c, c); /* c = -1 */
lowlevel.A(rpd, r, lowlevel.D); /* rpd = r*d */
lowlevel.M(v, r, lowlevel.D); /* v = r*d */
lowlevel.Z(v, c, v); /* v = c-r*d */
lowlevel.M(v, v, rpd); /* v = (c-r*d)*(r+d) */
const wasntSquare = 1 - sqrtRatioM1(s, u, v);
lowlevel.M(sPrime, s, t);
abs25519(sPrime, sPrime);
neg25519(sPrime, sPrime); /* s_prime = -|s*t| */
cmov25519(s, sPrime, wasntSquare);
cmov25519(c, r, wasntSquare);
lowlevel.Z(n, r, one); /* n = r-1 */
lowlevel.M(n, n, c); /* n = c*(r-1) */
lowlevel.M(n, n, sqdmone); /* n = c*(r-1)*(d-1)^2 */
lowlevel.Z(n, n, v); /* n = c*(r-1)*(d-1)^2-v */
lowlevel.A(w0, s, s); /* w0 = 2s */
lowlevel.M(w0, w0, v); /* w0 = 2s*v */
lowlevel.M(w1, n, sqrtadm1); /* w1 = n*sqrt(ad-1) */
lowlevel.S(ss, s); /* ss = s^2 */
lowlevel.Z(w2, one, ss); /* w2 = 1-s^2 */
lowlevel.A(w3, one, ss); /* w3 = 1+s^2 */
lowlevel.M(p[0], w0, w3);
lowlevel.M(p[1], w2, w1);
lowlevel.M(p[2], w1, w3);
lowlevel.M(p[3], w0, w2);
}