iden3 / circom

zkSnark circuit compiler
GNU General Public License v3.0
1.25k stars 232 forks source link

Fix calcwit.cpp InputHashMap wrap-around #239

Open blukat29 opened 5 months ago

blukat29 commented 5 months ago

The witness calculated generated with circom --cpp may not work depending on the input signal names.

In the calcwit.cpp, if the signal name hash h happens to satisfy pos = (h % 256) = get_size_of_input_hashmap() - 1 and there is a hashmap collision, then the loop fails to find the InputHashMap entry.

In our case (found by @2dvorak) the two signals were hashed to the pos = 255. "expLen" (h = 13708731413403068927) and "audValOffset" (h = 16744535348853068031).

This PR fixes the edge case.