From 51d937cd9682a24e83e44827ffebbbd368b99815 Mon Sep 17 00:00:00 2001 From: Stefan Nikolov Date: Thu, 29 Jun 2023 14:45:06 +0300 Subject: [PATCH] fix(circom): Constrain index remainder by idx2Bits --- .../is_valid_merkle_branch_out.circom | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/beacon-light-client/circom/circuits/is_valid_merkle_branch_out.circom b/beacon-light-client/circom/circuits/is_valid_merkle_branch_out.circom index 574bc96f2..6546a42dc 100644 --- a/beacon-light-client/circom/circuits/is_valid_merkle_branch_out.circom +++ b/beacon-light-client/circom/circuits/is_valid_merkle_branch_out.circom @@ -2,6 +2,8 @@ pragma circom 2.1.5; include "hash_two.circom"; include "../../../node_modules/circomlib/circuits/comparators.circom"; +include "../../../node_modules/circomlib/circuits/bitify.circom"; + include "utils/arrays.circom"; include "utils/numerical.circom"; @@ -15,27 +17,14 @@ template IsValidMerkleBranchOut(N) { component hashers[N]; component isZero[N]; - component pow[N]; - component divisionByTwo[N]; - component divisionByPow[N]; - + component idx2Bits; + idx2Bits = Num2Bits(N+1); + idx2Bits.in <== index; for(var i = 0; i < N; i++) { hashers[i] = HashTwo(); isZero[i] = IsZero(); - pow[i] = Pow(256); - pow[i].base <== 2; - pow[i].power <== i; - - divisionByPow[i] = DivisionBy(); - divisionByPow[i].dividend <== index; - divisionByPow[i].divisor <== pow[i].out; - - divisionByTwo[i] = DivisionBy(); - divisionByTwo[i].dividend <== divisionByPow[i].quotient; - divisionByTwo[i].divisor <== 2; - - isZero[i].in <== divisionByTwo[i].remainder; + isZero[i].in <== idx2Bits.out[i]; var current[256];