Comments (2)
Hi @hasinitg
Thanks. I posted a fix for that. Like what the rest of primitive operations do, the assertion op should make sure that the operand wires are in a packed format. This appeared in your use case of SHA256 with assertions, as the output wires of the gadget itself are just bit vectors. Let me know if the fix does not help with your code. I will add a test later to make sure all similar scenarios are covered. Also, will revisit the checks to make them more consistent.
from jsnark.
Hi @akosba
Thank you very much for the quick reply and also for the quick fix. I appreciate a lot.
My issue get resolved by using your fix as well as by calling 'makeOutputArray' method on the output wires of SHA 256 gadget, before enforcing assertions. Basically, as your fix did, packing the output wires was the key for the solution.
Could you please provide your insights on the following?
As mentioned before, I wrote the following verification circuit (code below) using SHA 256 gadget, to be used by a prover to prove that the prover knows the correct pre-image of a given SHA256-digest. Pre-image is secret input, hence prover witness wires are used for the input.
This circuit runs fine with libsnark. However, since I am planning to write more complex verification circuits using jsnark in the future, I would appreciate a lot if you could please confirm if I have followed the correct approach for writing a verification circuit for the above scenario.
If this is the correct approach and if you think this is a useful example circuit to be added to jsnark, I would be happy to send a pull request, to be reviewed and added to jsnark source code.
`package examples.generators.hash;
import circuit.eval.CircuitEvaluator;
import circuit.structure.CircuitGenerator;
import circuit.structure.Wire;
import examples.gadgets.hash.SHA256Gadget;
import java.math.BigInteger;
public class SHA256VerificationCircuitGenerator extends CircuitGenerator {
private Wire[] privateInput;
private String inputStr = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl";
private String expectedDigest = "aeacdd7013805404b62e0701cd09aeab2a4994c519d7f1d7cf7a295a5d8201ad";
public SHA256VerificationCircuitGenerator(String circuitName){
super(circuitName);
}
@Override
protected void buildCircuit() {
privateInput = createProverWitnessWireArray(64);
Wire[] digest = new SHA256Gadget(privateInput, 8, 64, false,
false).getOutputWires();
makeOutputArray(digest);
int beginIndex = 0;
int endIndex = 8;
for(int i =0; i<8; i++){
String ss = expectedDigest.substring(beginIndex, endIndex);
addEqualityAssertion(digest[i], new BigInteger(ss, 16));
beginIndex +=8;
endIndex +=8;
}
}
@Override
public void generateSampleInput(CircuitEvaluator evaluator) {
for(int i = 0; i < privateInput.length; i++){
evaluator.setWireValue(privateInput[i], inputStr.charAt(i));
}
}
public static void main(String[] args) {
SHA256VerificationCircuitGenerator circuitGenerator = new SHA256VerificationCircuitGenerator("SHA256-V");
circuitGenerator.generateCircuit();
circuitGenerator.evalCircuit();
circuitGenerator.prepFiles();
circuitGenerator.runLibsnark();
}
}
`
from jsnark.
Related Issues (20)
- A Trivial Issue: setWireValue(Wire w, long v) HOT 2
- What License is this? HOT 1
- `make` fails for missing includes HOT 3
- JAVA Version
- Questions about RSAEncryptionV1_5_Gadget HOT 2
- Using AES128CipherCircuitGenerator with plaintexts of size more than 16 bytes HOT 2
- Clarifying the use of the input parameter 'bitwidthPerInputElement' in SHA256 gadget HOT 3
- verifying proof on blockchain HOT 2
- toturial
- LongElement multiplication without creating prover witness wires. HOT 1
- HELP: how to implement a solution in practice?
- Change the curve HOT 2
- Computing scalar multiplication using a negated scalar, on the Elliptic Curve HOT 2
- How to initialize a number on the prime field? HOT 1
- cmake failed HOT 2
- libsnark fails for circuits with checkNonZero depending on execution order HOT 2
- How to recover circuit output from two files HOT 3
- Questions about RSAEncryptionCircuitGenerator HOT 2
- Floating point exception (core dumped)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsnark.