public static void secp256k1_ecmult_context_build(EcMultContext ctx, EventHandler <Callback> cb) { if (ctx.PreG != null) { return; } GeJ geJ = new GeJ(); Group.secp256k1_gej_set_ge(geJ, Group.Secp256K1GeConstG); int n = 1 << 16 - 2; ctx.PreG = new GeStorage[n]; for (int index = 0; index < n; ++index) { ctx.PreG[index] = new GeStorage(); } EcMult.secp256k1_ecmult_odd_multiples_table_storage_var(n, ctx.PreG, geJ, cb); }
public static void secp256k1_ecmult_odd_multiples_table_storage_var(int n, GeStorage[] pre, GeJ a, EventHandler <Callback> cb) { GeJ[] geJArray = new GeJ[n]; Ge[] r = new Ge[n]; Fe[] zr = new Fe[n]; for (int index = 0; index < n; ++index) { geJArray[index] = new GeJ(); r[index] = new Ge(); zr[index] = new Fe(); } EcMult.secp256k1_ecmult_odd_multiples_table(n, geJArray, zr, a); Group.secp256k1_ge_set_table_gej_var(r, geJArray, zr, n); for (int index = 0; index < n; ++index) { Group.ToStorage(pre[index], r[index]); } }