Пример #1
0
        /* (non-Javadoc)
         * @see Org.BouncyCastle.Math.EC.ECPoint#twice()
         */
        public override ECPoint Twice()
        {
            // Twice identity element (point at infinity) is identity
            if (this.IsInfinity)
            {
                return(this);
            }

            // if x1 == 0, then (x1, y1) == (x1, x1 + y1)
            // and hence this = -this and thus 2(x1, y1) == infinity
            if (this.x.ToBigInteger().Sign == 0)
            {
                return(this.curve.Infinity);
            }

            F2mFieldElement lambda = (F2mFieldElement)this.x.Add(this.y.Divide(this.x));
            F2mFieldElement x2     = (F2mFieldElement)lambda.Square().Add(lambda).Add(this.curve.A);
            ECFieldElement  ONE    = this.curve.FromBigInteger(BigInteger.One);
            F2mFieldElement y2     = (F2mFieldElement)this.x.Square().Add(
                x2.Multiply(lambda.Add(ONE)));

            return(new F2mPoint(this.curve, x2, y2, withCompression));
        }