isOnCurve function

int isOnCurve(
  1. Uint8List publicKey
)

Returns a non-zero value if publicKey falls on the ed25519 curve.

Implementation

int isOnCurve(final Uint8List publicKey) {
  final List<List<int>> r = [
    gf(),
    gf(),
    gf(),
    gf(),
  ];

  final List<int> t = gf(),
      chk = gf(),
      num = gf(),
      den = gf(),
      den2 = gf(),
      den4 = gf(),
      den6 = gf();

  set25519(r[2], gf1);
  unpack25519(r[1], publicKey);
  S(num, r[1]);
  M(den, num, D);
  Z(num, num, r[2]);
  A(den, r[2], den);

  S(den2, den);
  S(den4, den2);
  M(den6, den4, den2);
  M(t, den6, num);
  M(t, t, den);

  pow2523(t, t);
  M(t, t, num);
  M(t, t, den);
  M(t, t, den);
  M(r[0], t, den);

  S(chk, r[0]);
  M(chk, chk, den);
  if (neq25519(chk, num) != 0) {
    M(r[0], r[0], I);
  }

  S(chk, r[0]);
  M(chk, chk, den);
  if (neq25519(chk, num) != 0) {
    return 0;
  }

  return 1;
}