Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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());
        }