Beispiel #1
0
        private static GroupElementP1 P2ToP1(ref GroupElementP2 p)
        {
            var r = new GroupElementP1();

            /* XX=X1^2 */
            r.X = FieldElementOperations.Squared(ref p.X);

            /* YY=Y1^2 */
            r.Z = FieldElementOperations.Squared(ref p.Y);

            /* B=2*Z1^2 */
            r.T = FieldElementOperations.DoubleSquare(ref p.Z);

            /* A=X1+Y1 */
            r.Y = FieldElementOperations.Add(ref p.X, ref p.Y);

            /* AA=A^2 */
            var t0 = FieldElementOperations.Squared(ref r.Y);

            /* Y3=YY+XX */
            r.Y = FieldElementOperations.Add(ref r.Z, ref r.X);

            /* Z3=YY-XX */
            r.Z = FieldElementOperations.Sub(ref r.Z, ref r.X);

            /* X3=AA-Y3 */
            r.X = FieldElementOperations.Sub(ref t0, ref r.Y);

            /* T3=B-Z3 */
            r.T = FieldElementOperations.Sub(ref r.T, ref r.Z);

            return(r);
        }