public bool IsOnCurve(AffinePoint P) { var x = P.X; var t = (x * (x * x + A) + B).ModPositive(this.P); if (BigIntegerExtension.JacobiSymbol(t, this.P) == -1) { return(false); } return(true); }
public AffinePoint GetRandomAffinePoint() { BigIntegerRandom rand = new BigIntegerRandom(); var start = rand.Next(0, P); var x = start; BigInteger t; do { t = (x * (x * x + A) + B).ModPositive(P); if (BigIntegerExtension.JacobiSymbol(t, P) != -1) { return(new AffinePoint(x, BigIntegerExtension.Sqrt(t).ModPositive(P), this)); } if (x > P - 1) { x = -1; } x++; }while (x != start); return(GetInfiniteAffinePoint()); }