pragma circom 2.0.3; include "final_exp.circom"; include "pairing.circom"; include "bls12_381_func.circom"; include "bls12_381_hash_to_G2.circom"; // Input: pubkey in G_1 // signature, H(m) in G_2 // Output: out = 1 if valid signature, else = 0 // Verifies that e(g1, signature) = e(pubkey, H(m)) by checking e(g1, signature)*e(pubkey, -H(m)) === 1 where e(,) is optimal Ate pairing template CoreVerifyPubkeyG1NoCheck(n, k){ signal input pubkey[2][k]; signal input signature[2][2][k]; signal input Hm[2][2][k]; signal output out; var q[50] = get_BLS12_381_prime(n, k); var x = get_BLS12_381_parameter(); var g1[2][50] = get_generator_G1(n, k); signal neg_s[2][2][k]; component neg[2]; for(var j=0; j<2; j++){ neg[j] = FpNegate(n, k, q); for(var idx=0; idx