Usually one explains how the R1CS/QAPs and SNARKs work using examples of circuits with multiplication and addition nodes, and constructing polynomials from that is relatively straightforward. SHA-2 hashing uses complicated bit-wise arithmetic applied to itself multiple times, not simple multiplications and additions. How does one even construct a circuit to prove that a string hashes to a hash? Is there anywhere online I could read about this in an approachable form?
-
$\begingroup$ Would you read source code of SHA libsnark gadget? $\endgroup$– Vadym FedyukovychAug 23, 2021 at 14:15
-
$\begingroup$ @VadymFedyukovych I was hoping for something like an overview and explanation of a general principle $\endgroup$– DeLorean88Aug 23, 2021 at 18:43
-
$\begingroup$ What if someone will ask you about general principles of C++ or Java programming? R1CS is the language, there are known-good examples in the gadgets library ranging from elementary to SHA (which is large). Would you start from the idea of bit representation of the input string-to-hash, considering each bit as an R1CS variable? $\endgroup$– Vadym FedyukovychAug 24, 2021 at 14:25