Ejemplo n.º 1
0
        public static PointEdwardsProjective operator +(PointEdwardsProjective P, PointEdwardsProjective Q)//10M + 1S + 1*a + 1*d + 7add
        {
            BigInteger A, B, C, D, E, F, G, x, y, z;

            if (Q.z == 1)
            {
                B = P.z * P.z;
                C = P.x * Q.x;
                D = P.y * Q.y;
                E = P.E.b * C * D;
                F = B - E;
                G = B + E;
                x = (P.z * F * ((P.x + P.y) * (Q.x + Q.y) - C - D)) % P.E.n;
                y = (P.z * G * (D - P.E.a * C)) % P.E.n;
                z = (F * G) % P.E.n;
                return(new PointEdwardsProjective(x, y, z, P.E));
            }
            A = P.z * Q.z;
            B = A * A;
            C = P.x * Q.x;
            D = P.y * Q.y;
            E = P.E.b * C * D;
            F = B - E;
            G = B + E;
            x = (A * F * ((P.x + P.y) * (Q.x + Q.y) - C - D)) % P.E.n;
            y = (A * G * (D - P.E.a * C)) % P.E.n;
            z = (F * G) % P.E.n;
            return(new PointEdwardsProjective(x, y, z, P.E));
        }
Ejemplo n.º 2
0
        public static PointEdwardsInverted operator +(PointEdwardsInverted P, PointEdwardsInverted Q)//9M + 1S + 1*a + 1*d + 7add
        {
            BigInteger A, B, C, D, E, F, G, H, I, x, y, z;

            if (Q.z == 1)
            {
                B = P.E.b * P.z * P.z;
                C = P.x * Q.x;
                D = P.y * Q.y;
                E = C * D;
                H = C - P.E.a * D;
                I = (P.x + P.y) * (Q.x + Q.y) - C - D;
                x = ((E + B) * H) % P.E.n;
                y = ((E - B) * I) % P.E.n;
                z = (P.z * H * I) % P.E.n;
                return(new PointEdwardsInverted(x, y, z, P.E));
            }
            A = P.z * Q.z;
            B = P.E.b * A * A;
            C = P.x * Q.x;
            D = P.y * Q.y;
            E = C * D;
            H = C - P.E.a * D;
            I = (P.x + P.y) * (Q.x + Q.y) - C - D;
            x = ((E + B) * H) % P.E.n;
            y = ((E - B) * I) % P.E.n;
            z = (A * H * I) % P.E.n;
            return(new PointEdwardsInverted(x, y, z, P.E));
        }
Ejemplo n.º 3
0
 public PointEdwardsProjective(BigInteger x, BigInteger y, EllipticCurveEdwards E)
 {
     this.x = x;
     this.y = y;
     this.z = 1;
     this.E = E;
 }
Ejemplo n.º 4
0
 public PointEdwardsInverted(BigInteger x, BigInteger y, BigInteger z, EllipticCurveEdwards E)
 {
     this.x = x;
     this.y = y;
     this.z = z;
     this.E = E;
 }
Ejemplo n.º 5
0
 public PointEdwardsInverted(BigInteger x, BigInteger y, EllipticCurveEdwards E)
 {
     this.x = Algorithms.Invert(x, E.n);
     this.y = Algorithms.Invert(y, E.n);
     this.z = 1;
     this.E = E;
 }
Ejemplo n.º 6
0
        public static PointEdwardsExtended operator +(PointEdwardsExtended P, PointEdwardsExtended Q)//9M + 1*a + 7add
        {
            BigInteger A, B, C, D, E, F, G, H, I, x, y, z, t;

            if (Q.z == 1)
            {
                A = P.x * Q.x;
                B = P.y * Q.y;
                C = P.z * Q.t;
                D = P.t;
                E = D + C;
                F = (P.x - P.y) * (Q.x + Q.y) + B - A;
                G = B + P.E.a * A;
                H = D - C;
                x = (E * F) % P.E.n;
                y = (G * H) % P.E.n;
                t = (E * H) % P.E.n;
                z = (F * G) % P.E.n;
                return(new PointEdwardsExtended(x, y, z, t, P.E));
            }
            A = P.x * Q.x;
            B = P.y * Q.y;
            C = P.z * Q.t;
            D = P.t * Q.z;
            E = D + C;
            F = (P.x - P.y) * (Q.x + Q.y) + B - A;
            G = B + P.E.a * A;
            H = D - C;
            x = (E * F) % P.E.n;
            y = (G * H) % P.E.n;
            t = (E * H) % P.E.n;
            z = (F * G) % P.E.n;
            return(new PointEdwardsExtended(x, y, z, t, P.E));
        }
Ejemplo n.º 7
0
 public PointEdwardsExtended(BigInteger x, BigInteger y, EllipticCurveEdwards E)
 {
     this.x = x;
     this.y = y;
     this.z = 1;
     this.t = (x * y) % E.n;
     this.E = E;
 }
Ejemplo n.º 8
0
 public PointEdwardsExtended(BigInteger x, BigInteger y, BigInteger z, BigInteger t, EllipticCurveEdwards E)
 {
     this.x = x;
     this.y = y;
     this.z = z;
     this.t = t;
     this.E = E;
 }
Ejemplo n.º 9
0
        public override bool Equals(Object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            EllipticCurveEdwards E = obj as EllipticCurveEdwards;

            return(new EllipticCurveEdwards(this.a, this.b, this.n) == E);
        }
Ejemplo n.º 10
0
        }//extended

        private static EllipticCurveEdwards GenerateCurve(BigInteger n, out BigInteger x, out BigInteger y, TorsionType type)
        {
            switch (type)
            {
            case TorsionType.RandomCurve:
                return(EllipticCurveEdwards.GenerateCurveRandom(n, out x, out y));

            case TorsionType.Curve12:
                return(EllipticCurveEdwards.GenerateCurve12(n, out x, out y));

            case TorsionType.Curve2x8:
                return(EllipticCurveEdwards.GenerateCurve2x8(n, out x, out y));

            case TorsionType.Curve12FromFile:
                return(EllipticCurveEdwards.GetCurve(n, out x, out y, "curve12.txt"));

            case TorsionType.Curve2x8FromFile:
                return(EllipticCurveEdwards.GetCurve(n, out x, out y, "curve2x8.txt"));

            default:
                return(EllipticCurveEdwards.GenerateCurveRandom(n, out x, out y));
            }
        }