I am using zkSNARK to prove knowledge of preimage for SHA256. However, the library used only supports field operations (such as add and multiply), and it compiles down to arithmetic circuits. Thus, bitwise operations prevalent in SHA256 have to be simulated using field operations. How can they be simulated, say, left shift?
This link contains a circuit for SHA256, but it is a boolean circuit.
To make things easy, we can assume the input is fixed-length, say, 255 bits (i.e., a field in the library).