isOnCurve function
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;
}