wnafExp<SCALAR extends CryptoField<SCALAR>, G extends CryptoGroupElement<G, SCALAR>> static method

G wnafExp<SCALAR extends CryptoField<SCALAR>, G extends CryptoGroupElement<G, SCALAR>>(
  1. List<G> table,
  2. List<int> wnaf,
  3. G identity
)

Implementation

static G wnafExp<
  SCALAR extends CryptoField<SCALAR>,
  G extends CryptoGroupElement<G, SCALAR>
>(List<G> table, List<int> wnaf, G identity) {
  G result = identity;

  bool foundOne = false;

  // Iterate in reverse over wnaf
  for (final n in wnaf.reversed) {
    if (foundOne) {
      result = result.double();
    }

    if (n != 0) {
      foundOne = true;

      if (n > 0) {
        result = result + table[(n ~/ 2)];
      } else {
        result = result - table[(-n) ~/ 2];
      }
    }
  }

  return result;
}