def step_4_batched(n, gk, g1_d, g1_a, g1_hat_a, crs_sm): y2 = [gk.q.random() for x in range(n - 1)] + [1] inf1, _ = prover.get_infs(gk) g2_beta = crs_sm.g2_beta g2_beta_hat = crs_sm.g2_betahat left = gk.e(mexp(y2, g1_d, inf1), gk.g2) right = (gk.e(mexp(y2, g1_a, inf1), g2_beta) * gk.e(mexp(y2, g1_hat_a, inf1), g2_beta_hat)) return left == right
def step_5_batched(gk, pk, g1_t, crs_con, g1_a_hat, N, M, MP): infT = get_infT(gk) _, inf2 = prover.get_infs(gk) g1_hat_rho = crs_con.g1rhohat g1_poly_hats = crs_con.g1_poly_hats y3 = [gk.q.random(), 1] q = gk.e(g1_t, mexp(y3, pk, inf2)) right = q * gk.e(g1_hat_rho, mexp(y3, N, inf2)).inv() left = infT for ph, mp, a, m in zip(g1_poly_hats, MP, g1_a_hat, M): left *= gk.e(ph, mexp(y3, mp, inf2)) * gk.e(a, mexp(y3, m, inf2)).inv() return left == right
def step_3_batched(n, gk, g1_a, g2_b, g1_c, crs_1sp, g2_rho): y1 = [gk.q.random() for x in range(n - 1)] + [1] infT = get_infT(gk) inf1, _ = prover.get_infs(gk) g1_alpha_poly_zero = crs_1sp.g1_alpha_poly_zero g2alpha = crs_1sp.g2alpha pair_alpha = crs_1sp.pair_alpha right = (gk.e(mexp(y1, g1_c, inf1), g2_rho) * (pair_alpha**(sum(y1) % gk.q))) left = infT for yi, a, b in zip(y1, g1_a, g2_b): left *= gk.e(yi * (a + g1_alpha_poly_zero), b + g2alpha) return left == right