Exemplo n.º 1
0
    protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
    {
        ECCurve curve    = p.Curve;
        ECCurve eCCurve  = ConfigureCurve(curve, additionCoord);
        ECCurve eCCurve2 = ConfigureCurve(curve, doublingCoord);

        int[]   array    = WNafUtilities.GenerateCompactNaf(k);
        ECPoint eCPoint  = eCCurve.Infinity;
        ECPoint eCPoint2 = eCCurve2.ImportPoint(p);
        int     num      = 0;

        foreach (int num2 in array)
        {
            int num3 = num2 >> 16;
            num     += (num2 & 0xFFFF);
            eCPoint2 = eCPoint2.TimesPow2(num);
            ECPoint eCPoint3 = eCCurve.ImportPoint(eCPoint2);
            if (num3 < 0)
            {
                eCPoint3 = eCPoint3.Negate();
            }
            eCPoint = eCPoint.Add(eCPoint3);
            num     = 1;
        }
        return(curve.ImportPoint(eCPoint));
    }
Exemplo n.º 2
0
    protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
    {
        int[]   array    = WNafUtilities.GenerateCompactNaf(k);
        ECPoint eCPoint  = p.Curve.Infinity;
        ECPoint eCPoint2 = p;
        int     num      = 0;

        foreach (int num2 in array)
        {
            int num3 = num2 >> 16;
            num     += (num2 & 0xFFFF);
            eCPoint2 = eCPoint2.TimesPow2(num);
            eCPoint  = eCPoint.Add((num3 < 0) ? eCPoint2.Negate() : eCPoint2);
            num      = 1;
        }
        return(eCPoint);
    }
Exemplo n.º 3
0
        protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
        {
            int[]   array    = WNafUtilities.GenerateCompactNaf(k);
            ECPoint eCPoint  = p.Normalize();
            ECPoint eCPoint2 = eCPoint.Negate();
            ECPoint eCPoint3 = p.Curve.Infinity;
            int     num      = array.Length;

            while (--num >= 0)
            {
                int num2 = array[num];
                int num3 = num2 >> 16;
                int e    = num2 & 0xFFFF;
                eCPoint3 = eCPoint3.TwicePlus((num3 < 0) ? eCPoint2 : eCPoint);
                eCPoint3 = eCPoint3.TimesPow2(e);
            }
            return(eCPoint3);
        }
Exemplo n.º 4
0
        protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
        {
            int[] naf = WNafUtilities.GenerateCompactNaf(k);

            ECPoint addP = p.Normalize(), subP = addP.Negate();

            ECPoint R = p.Curve.Infinity;

            int i = naf.Length;

            while (--i >= 0)
            {
                int ni = naf[i];
                int digit = ni >> 16, zeroes = ni & 0xFFFF;

                R = R.TwicePlus(digit < 0 ? subP : addP);
                R = R.TimesPow2(zeroes);
            }

            return(R);
        }
Exemplo n.º 5
0
        protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k)
        {
            int[] naf = WNafUtilities.GenerateCompactNaf(k);

            ECPoint R0 = p.Curve.Infinity, R1 = p;

            int zeroes = 0;

            for (int i = 0; i < naf.Length; ++i)
            {
                int ni    = naf[i];
                int digit = ni >> 16;
                zeroes += ni & 0xFFFF;

                R1 = R1.TimesPow2(zeroes);
                R0 = R0.Add(digit < 0 ? R1.Negate() : R1);

                zeroes = 1;
            }

            return(R0);
        }