public static GenerateCompactNaf ( BigInteger k ) : int[] | ||
k | BigInteger | |
return | int[] |
protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k) { ECCurve curveOrig = p.Curve; ECCurve curveAdd = ConfigureCurve(curveOrig, additionCoord); ECCurve curveDouble = ConfigureCurve(curveOrig, doublingCoord); int[] naf = WNafUtilities.GenerateCompactNaf(k); ECPoint Ra = curveAdd.Infinity; ECPoint Td = curveDouble.ImportPoint(p); int zeroes = 0; for (int i = 0; i < naf.Length; ++i) { int ni = naf[i]; int digit = ni >> 16; zeroes += ni & 0xFFFF; Td = Td.TimesPow2(zeroes); ECPoint Tj = curveAdd.ImportPoint(Td); if (digit < 0) { Tj = Tj.Negate(); } Ra = Ra.Add(Tj); zeroes = 1; } return(curveOrig.ImportPoint(Ra)); }
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)); }
protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k) { ECCurve curve = p.Curve; ECCurve eCCurve = this.ConfigureCurve(curve, this.additionCoord); ECCurve eCCurve2 = this.ConfigureCurve(curve, this.doublingCoord); int[] array = WNafUtilities.GenerateCompactNaf(k); ECPoint eCPoint = eCCurve.Infinity; ECPoint eCPoint2 = eCCurve2.ImportPoint(p); int num = 0; for (int i = 0; i < array.Length; i++) { int num2 = array[i]; int num3 = num2 >> 16; num += (num2 & 65535); 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)); }
public static int[] GenerateCompactWindowNaf(int width, BigInteger k) { if (width == 2) { return(WNafUtilities.GenerateCompactNaf(k)); } if (width < 2 || width > 16) { throw new ArgumentException("must be in the range [2, 16]", "width"); } if (k.BitLength >> 16 != 0) { throw new ArgumentException("must have bitlength < 2^16", "k"); } if (k.SignValue == 0) { return(WNafUtilities.EMPTY_INTS); } int[] array = new int[k.BitLength / width + 1]; int num = 1 << width; int num2 = num - 1; int num3 = num >> 1; bool flag = false; int num4 = 0; int i = 0; while (i <= k.BitLength) { if (k.TestBit(i) == flag) { i++; } else { k = k.ShiftRight(i); int num5 = k.IntValue & num2; if (flag) { num5++; } flag = ((num5 & num3) != 0); if (flag) { num5 -= num; } int num6 = (num4 > 0) ? (i - 1) : i; array[num4++] = (num5 << 16 | num6); i = width; } } if (array.Length > num4) { array = WNafUtilities.Trim(array, num4); } return(array); }
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 & 65535; eCPoint3 = eCPoint3.TwicePlus((num3 < 0) ? eCPoint2 : eCPoint); eCPoint3 = eCPoint3.TimesPow2(e); } return(eCPoint3); }
protected override ECPoint MultiplyPositive(ECPoint p, BigInteger k) { int[] array = WNafUtilities.GenerateCompactNaf(k); ECPoint eCPoint = p.Curve.Infinity; ECPoint eCPoint2 = p; int num = 0; for (int i = 0; i < array.Length; i++) { int num2 = array[i]; int num3 = num2 >> 16; num += (num2 & 65535); eCPoint2 = eCPoint2.TimesPow2(num); eCPoint = eCPoint.Add((num3 < 0) ? eCPoint2.Negate() : eCPoint2); num = 1; } return(eCPoint); }
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); }
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); }