/* Copyright 2018 0KIMS association. This file is part of circom (Zero Knowledge Circuit Compiler). circom is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. circom is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with circom. If not, see . */ /* SMTVerifier is a component to verify inclusion/exclusion of an element in the tree fnc: 0 -> VERIFY INCLUSION 1 -> VERIFY NOT INCLUSION */ pragma circom 2.0.0; include "../gates.circom"; include "../bitify.circom"; include "../comparators.circom"; include "../switcher.circom"; include "smtlevins.circom"; include "smtverifierlevel.circom"; include "smtverifiersm.circom"; include "smthash_poseidon.circom"; template SMTVerifier(nLevels) { signal input enabled; signal input root; signal input siblings[nLevels]; signal input oldKey; signal input oldValue; signal input isOld0; signal input key; signal input value; signal input fnc; var i; component hash1Old = SMTHash1(); hash1Old.key <== oldKey; hash1Old.value <== oldValue; component hash1New = SMTHash1(); hash1New.key <== key; hash1New.value <== value; component n2bOld = Num2Bits_strict(); component n2bNew = Num2Bits_strict(); n2bOld.in <== oldKey; n2bNew.in <== key; component smtLevIns = SMTLevIns(nLevels); for (i=0; i