generatePedersenHashExpTable<T extends JubJubScalar<T>, E extends BaseJubJubPoint<T, E>> static method

List<List<List<E>>> generatePedersenHashExpTable<T extends JubJubScalar<T>, E extends BaseJubJubPoint<T, E>>({
  1. required E fromBytes(
    1. List<int> bytes
    ),
  2. required E identity,
})

Implementation

static List<List<List<E>>> generatePedersenHashExpTable<
  T extends JubJubScalar<T>,
  E extends BaseJubJubPoint<T, E>
>({required E Function(List<int> bytes) fromBytes, required E identity}) {
  final List<E> generators = generateHash<T, E>(fromBytes);
  final int window = pedersenHashExpWindowSize;
  final int numBits = JubJubFrConst.bits;
  final List<List<List<E>>> result = [];
  for (var g0 in generators) {
    E g = g0;
    final List<List<E>> tables = [];
    int numBitsProcessed = 0;

    while (numBitsProcessed <= numBits) {
      final List<E> table = [];
      E base = identity;

      for (int i = 0; i < (1 << window); i++) {
        table.add(base);
        base = base + g;
      }

      tables.add(table);
      numBitsProcessed += window;

      // double g for next window
      for (int i = 0; i < window; i++) {
        g = g.double();
      }
    }

    result.add(tables);
  }

  return result;
}