Пример #1
0
        internal FPoint AddS(FPoint b)
        {
            if (this.IsInfinity)
            {
                return(b);
            }

            if (b.IsInfinity)
            {
                return(this);
            }

            FieldElement x2 = (FieldElement)b.X;
            FieldElement y2 = (FieldElement)b.Y;

            if (this.x.Equals(x2))
            {
                if (this.y.Equals(y2))
                {
                    return((FPoint)this.Twice());
                }

                return((FPoint)this.curve.Infinity);
            }

            ECFieldElement xSum   = this.x.Add(x2);
            FieldElement   lambda = (FieldElement)(this.y.Add(y2)).Divide(xSum);
            FieldElement   x3     = (FieldElement)lambda.Square().Add(lambda).Add(xSum).Add(this.curve.A);
            FieldElement   y3     = (FieldElement)lambda.Multiply(this.x.Add(x3)).Add(x3).Add(this.y);

            return(new FPoint(curve, x3, y3));
        }
Пример #2
0
        static FieldElement halfTrace(FieldElement x)
        {
            int          m = 163;
            FieldElement t = x;

            for (int i = 1; i <= ((m - 1) / 2); i++)
            {
                t = (FieldElement)t.Square().Square().Add(x);
            }
            return(t);
        }
Пример #3
0
        static FieldElement trace(FieldElement x)
        {
            int          m = 163;
            FieldElement t = x;

            for (int i = 1; i < m; i++)
            {
                t = (FieldElement)t.Square().Add(x);
            }
            return(t);
        }