Beispiel #1
0
        public static EllipticCurvePoint Double(EllipticCurvePoint point)
        {
            var result = new EllipticCurvePoint(point.curve);
            var P      = point.P;
            var A      = point.curve.A;
            var lambda = (3 * point.X * point.X + A) * ((2 * point.Y).ModInverse(P)) % P;

            result.X = (lambda * lambda - 2 * point.X) % P;
            result.Y = (lambda * (point.X - result.X) - point.Y) % P;

            result.X += result.X < 0 ? P : 0;
            result.Y += result.Y < 0 ? P : 0;

            return(result);
        }
Beispiel #2
0
        public static EllipticCurvePoint operator *(EllipticCurvePoint point, int d)
        {
            if (d < 0)
            {
                Console.WriteLine("Error: In multiply on N, N is less 0");
                return(point);
            }

            var binaryString = Convert.ToString(d, 2);

            var result = new EllipticCurvePoint(point);

            for (var i = 1; i < binaryString.Length; i++)
            {
                result = Double(result);
                if (binaryString[i] == '1')
                {
                    result = result + point;
                }
            }
            return(result);
        }
Beispiel #3
0
        public EllipticCurvePoint Multiply(BigInteger N)
        {
            var curvePoint = this;

            if (N < 0)
            {
                Console.WriteLine("Error: In multiply on N, N is less 0");
                return(curvePoint);
            }

            var binaryString = N.ToBinaryString();

            var result = new EllipticCurvePoint(curvePoint);

            for (var i = 1; i < binaryString.Length; i++)
            {
                result = Double(result);
                if (binaryString[i] == '1')
                {
                    result = result + curvePoint;
                }
            }
            return(result);
        }
Beispiel #4
0
 public EllipticCurvePoint(EllipticCurvePoint point)
 {
     curve      = point.curve;
     this.point = point.point;
 }