Esempio n. 1
0
        public static ECPoint SumOfTwoMultiplies(ECPoint P, BigInteger a, ECPoint Q, BigInteger b)
        {
            ECCurve curve = P.Curve;

            Q = ECAlgorithms.ImportPoint(curve, Q);
            if (curve is F2mCurve)
            {
                F2mCurve f2mCurve = (F2mCurve)curve;
                if (f2mCurve.IsKoblitz)
                {
                    return(ECAlgorithms.ValidatePoint(P.Multiply(a).Add(Q.Multiply(b))));
                }
            }
            GlvEndomorphism glvEndomorphism = curve.GetEndomorphism() as GlvEndomorphism;

            if (glvEndomorphism != null)
            {
                return(ECAlgorithms.ValidatePoint(ECAlgorithms.ImplSumOfMultipliesGlv(new ECPoint[]
                {
                    P,
                    Q
                }, new BigInteger[]
                {
                    a,
                    b
                }, glvEndomorphism)));
            }
            return(ECAlgorithms.ValidatePoint(ECAlgorithms.ImplShamirsTrickWNaf(P, a, Q, b)));
        }
Esempio n. 2
0
        internal static ECPoint ImplShamirsTrickWNaf(ECPoint P, BigInteger k, ECPointMap pointMapQ, BigInteger l)
        {
            bool flag  = k.SignValue < 0;
            bool flag2 = l.SignValue < 0;

            k = k.Abs();
            l = l.Abs();
            int             width            = Math.Max(2, Math.Min(16, WNafUtilities.GetWindowSize(Math.Max(k.BitLength, l.BitLength))));
            ECPoint         p                = WNafUtilities.MapPointWithPrecomp(P, width, true, pointMapQ);
            WNafPreCompInfo wNafPreCompInfo  = WNafUtilities.GetWNafPreCompInfo(P);
            WNafPreCompInfo wNafPreCompInfo2 = WNafUtilities.GetWNafPreCompInfo(p);

            ECPoint[] preCompP    = flag ? wNafPreCompInfo.PreCompNeg : wNafPreCompInfo.PreComp;
            ECPoint[] preCompQ    = flag2 ? wNafPreCompInfo2.PreCompNeg : wNafPreCompInfo2.PreComp;
            ECPoint[] preCompNegP = flag ? wNafPreCompInfo.PreComp : wNafPreCompInfo.PreCompNeg;
            ECPoint[] preCompNegQ = flag2 ? wNafPreCompInfo2.PreComp : wNafPreCompInfo2.PreCompNeg;
            byte[]    wnafP       = WNafUtilities.GenerateWindowNaf(width, k);
            byte[]    wnafQ       = WNafUtilities.GenerateWindowNaf(width, l);
            return(ECAlgorithms.ImplShamirsTrickWNaf(preCompP, preCompNegP, wnafP, preCompQ, preCompNegQ, wnafQ));
        }