/** * Multiplies a {@link BitcoinNet.BouncyCastle.math.ec.AbstractF2mPoint AbstractF2mPoint} * by an element <code>λ</code> of <code><b>Z</b>[τ]</code> * using the <code>τ</code>-adic NAF (TNAF) method, given the TNAF * of <code>λ</code>. * @param p The AbstractF2mPoint to Multiply. * @param u The the TNAF of <code>λ</code>.. * @return <code>λ * p</code> */ public static AbstractF2mPoint MultiplyFromTnaf(AbstractF2mPoint p, sbyte[] u) { ECCurve curve = p.Curve; AbstractF2mPoint q = (AbstractF2mPoint)curve.Infinity; AbstractF2mPoint pNeg = (AbstractF2mPoint)p.Negate(); int tauCount = 0; for (int i = u.Length - 1; i >= 0; i--) { ++tauCount; sbyte ui = u[i]; if (ui != 0) { q = q.TauPow(tauCount); tauCount = 0; ECPoint x = ui > 0 ? p : pNeg; q = (AbstractF2mPoint)q.Add(x); } } if (tauCount > 0) { q = q.TauPow(tauCount); } return(q); }
public static AbstractF2mPoint MultiplyFromTnaf(AbstractF2mPoint p, sbyte[] u) { ECCurve curve = p.Curve; AbstractF2mPoint abstractF2mPoint = (AbstractF2mPoint)curve.Infinity; AbstractF2mPoint abstractF2mPoint2 = (AbstractF2mPoint)p.Negate(); int num = 0; for (int num2 = u.Length - 1; num2 >= 0; num2--) { num++; sbyte b = u[num2]; if (b != 0) { abstractF2mPoint = abstractF2mPoint.TauPow(num); num = 0; ECPoint b2 = (b > 0) ? p : abstractF2mPoint2; abstractF2mPoint = (AbstractF2mPoint)abstractF2mPoint.Add(b2); } } if (num > 0) { abstractF2mPoint = abstractF2mPoint.TauPow(num); } return(abstractF2mPoint); }
public static AbstractF2mPoint MultiplyFromTnaf(AbstractF2mPoint p, sbyte[] u) { AbstractF2mPoint infinity = (AbstractF2mPoint)p.Curve.Infinity; AbstractF2mPoint point2 = (AbstractF2mPoint)p.Negate(); int pow = 0; for (int i = u.Length - 1; i >= 0; i--) { pow++; sbyte num3 = u[i]; if (num3 != 0) { infinity = infinity.TauPow(pow); pow = 0; ECPoint b = (num3 <= 0) ? point2 : p; infinity = (AbstractF2mPoint)infinity.Add(b); } } if (pow > 0) { infinity = infinity.TauPow(pow); } return(infinity); }
/** * Multiplies a {@link NBitcoin.BouncyCastle.math.ec.AbstractF2mPoint AbstractF2mPoint} * by an element <code>λ</code> of <code><b>Z</b>[τ]</code> * using the <code>τ</code>-adic NAF (TNAF) method, given the TNAF * of <code>λ</code>. * @param p The AbstractF2mPoint to Multiply. * @param u The the TNAF of <code>λ</code>.. * @return <code>λ * p</code> */ public static AbstractF2mPoint MultiplyFromTnaf(AbstractF2mPoint p, sbyte[] u) { ECCurve curve = p.Curve; AbstractF2mPoint q = (AbstractF2mPoint)curve.Infinity; AbstractF2mPoint pNeg = (AbstractF2mPoint)p.Negate(); int tauCount = 0; for(int i = u.Length - 1; i >= 0; i--) { ++tauCount; sbyte ui = u[i]; if(ui != 0) { q = q.TauPow(tauCount); tauCount = 0; ECPoint x = ui > 0 ? p : pNeg; q = (AbstractF2mPoint)q.Add(x); } } if(tauCount > 0) { q = q.TauPow(tauCount); } return q; }