diff --git a/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep2.circom b/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep2.circom index 386109f0d..fe1613387 100644 --- a/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep2.circom +++ b/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep2.circom @@ -1,7 +1,7 @@ pragma circom 2.1.5; include "../../../../../../node_modules/circomlib/circuits/comparators.circom"; -include "./utils/ecdsaSignatureVerifier.circom"; +include "../../../../../../node_modules/circomlib/circuits/eddsa.circom"; include "./utils/arithmeticOperators.circom"; template Workstep2(){ diff --git a/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep3.circom b/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep3.circom index f9545b4c6..6bbe45f16 100644 --- a/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep3.circom +++ b/examples/bri-3/src/bri/zeroKnowledgeProof/services/circuit/snarkjs/workstep3.circom @@ -1,7 +1,7 @@ pragma circom 2.1.5; include "../../../../../../node_modules/circomlib/circuits/comparators.circom"; -include "./utils/ecdsaSignatureVerifier.circom"; +include "../../../../../../node_modules/circomlib/circuits/eddsa.circom"; include "./utils/arithmeticOperators.circom"; template Workstep3(){ diff --git a/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2.r1cs b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2.r1cs new file mode 100644 index 000000000..0c749c11c Binary files /dev/null and b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2.r1cs differ diff --git a/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_final.zkey b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_final.zkey new file mode 100644 index 000000000..7b04f42b6 Binary files /dev/null and b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_final.zkey differ diff --git a/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_js/generate_witness.js b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_js/generate_witness.js new file mode 100644 index 000000000..eabb86e58 --- /dev/null +++ b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_js/generate_witness.js @@ -0,0 +1,20 @@ +const wc = require("./witness_calculator.js"); +const { readFileSync, writeFile } = require("fs"); + +if (process.argv.length != 5) { + console.log("Usage: node generate_witness.js "); +} else { + const input = JSON.parse(readFileSync(process.argv[3], "utf8")); + + const buffer = readFileSync(process.argv[2]); + wc(buffer).then(async witnessCalculator => { + // const w= await witnessCalculator.calculateWitness(input,0); + // for (let i=0; i< w.length; i++){ + // console.log(w[i]); + // } + const buff= await witnessCalculator.calculateWTNSBin(input,0); + writeFile(process.argv[4], buff, function(err) { + if (err) throw err; + }); + }); +} diff --git a/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_js/witness_calculator.js b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_js/witness_calculator.js new file mode 100644 index 000000000..20e6e20ad --- /dev/null +++ b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep2/workstep2_js/witness_calculator.js @@ -0,0 +1,337 @@ +module.exports = async function builder(code, options) { + + options = options || {}; + + let wasmModule; + try { + wasmModule = await WebAssembly.compile(code); + } catch (err) { + console.log(err); + console.log("\nTry to run circom --c in order to generate c++ code instead\n"); + throw new Error(err); + } + + let wc; + + let errStr = ""; + let msgStr = ""; + + const instance = await WebAssembly.instantiate(wasmModule, { + runtime: { + exceptionHandler : function(code) { + let err; + if (code == 1) { + err = "Signal not found.\n"; + } else if (code == 2) { + err = "Too many signals set.\n"; + } else if (code == 3) { + err = "Signal already set.\n"; + } else if (code == 4) { + err = "Assert Failed.\n"; + } else if (code == 5) { + err = "Not enough memory.\n"; + } else if (code == 6) { + err = "Input signal array access exceeds the size.\n"; + } else { + err = "Unknown error.\n"; + } + throw new Error(err + errStr); + }, + printErrorMessage : function() { + errStr += getMessage() + "\n"; + // console.error(getMessage()); + }, + writeBufferMessage : function() { + const msg = getMessage(); + // Any calls to `log()` will always end with a `\n`, so that's when we print and reset + if (msg === "\n") { + console.log(msgStr); + msgStr = ""; + } else { + // If we've buffered other content, put a space in between the items + if (msgStr !== "") { + msgStr += " " + } + // Then append the message to the message we are creating + msgStr += msg; + } + }, + showSharedRWMemory : function() { + printSharedRWMemory (); + } + + } + }); + + const sanityCheck = + options +// options && +// ( +// options.sanityCheck || +// options.logGetSignal || +// options.logSetSignal || +// options.logStartComponent || +// options.logFinishComponent +// ); + + + wc = new WitnessCalculator(instance, sanityCheck); + return wc; + + function getMessage() { + var message = ""; + var c = instance.exports.getMessageChar(); + while ( c != 0 ) { + message += String.fromCharCode(c); + c = instance.exports.getMessageChar(); + } + return message; + } + + function printSharedRWMemory () { + const shared_rw_memory_size = instance.exports.getFieldNumLen32(); + const arr = new Uint32Array(shared_rw_memory_size); + for (let j=0; j { + const h = fnvHash(k); + const hMSB = parseInt(h.slice(0,8), 16); + const hLSB = parseInt(h.slice(8,16), 16); + const fArr = flatArray(input[k]); + let signalSize = this.instance.exports.getInputSignalSize(hMSB, hLSB); + if (signalSize < 0){ + throw new Error(`Signal ${k} not found\n`); + } + if (fArr.length < signalSize) { + throw new Error(`Not enough values for input signal ${k}\n`); + } + if (fArr.length > signalSize) { + throw new Error(`Too many values for input signal ${k}\n`); + } + for (let i=0; i0) { + res.unshift(0); + i--; + } + } + return res; +} + +function fromArray32(arr) { //returns a BigInt + var res = BigInt(0); + const radix = BigInt(0x100000000); + for (let i = 0; i "); +} else { + const input = JSON.parse(readFileSync(process.argv[3], "utf8")); + + const buffer = readFileSync(process.argv[2]); + wc(buffer).then(async witnessCalculator => { + // const w= await witnessCalculator.calculateWitness(input,0); + // for (let i=0; i< w.length; i++){ + // console.log(w[i]); + // } + const buff= await witnessCalculator.calculateWTNSBin(input,0); + writeFile(process.argv[4], buff, function(err) { + if (err) throw err; + }); + }); +} diff --git a/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep3/workstep3_js/witness_calculator.js b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep3/workstep3_js/witness_calculator.js new file mode 100644 index 000000000..20e6e20ad --- /dev/null +++ b/examples/bri-3/zeroKnowledgeArtifacts/circuits/workstep3/workstep3_js/witness_calculator.js @@ -0,0 +1,337 @@ +module.exports = async function builder(code, options) { + + options = options || {}; + + let wasmModule; + try { + wasmModule = await WebAssembly.compile(code); + } catch (err) { + console.log(err); + console.log("\nTry to run circom --c in order to generate c++ code instead\n"); + throw new Error(err); + } + + let wc; + + let errStr = ""; + let msgStr = ""; + + const instance = await WebAssembly.instantiate(wasmModule, { + runtime: { + exceptionHandler : function(code) { + let err; + if (code == 1) { + err = "Signal not found.\n"; + } else if (code == 2) { + err = "Too many signals set.\n"; + } else if (code == 3) { + err = "Signal already set.\n"; + } else if (code == 4) { + err = "Assert Failed.\n"; + } else if (code == 5) { + err = "Not enough memory.\n"; + } else if (code == 6) { + err = "Input signal array access exceeds the size.\n"; + } else { + err = "Unknown error.\n"; + } + throw new Error(err + errStr); + }, + printErrorMessage : function() { + errStr += getMessage() + "\n"; + // console.error(getMessage()); + }, + writeBufferMessage : function() { + const msg = getMessage(); + // Any calls to `log()` will always end with a `\n`, so that's when we print and reset + if (msg === "\n") { + console.log(msgStr); + msgStr = ""; + } else { + // If we've buffered other content, put a space in between the items + if (msgStr !== "") { + msgStr += " " + } + // Then append the message to the message we are creating + msgStr += msg; + } + }, + showSharedRWMemory : function() { + printSharedRWMemory (); + } + + } + }); + + const sanityCheck = + options +// options && +// ( +// options.sanityCheck || +// options.logGetSignal || +// options.logSetSignal || +// options.logStartComponent || +// options.logFinishComponent +// ); + + + wc = new WitnessCalculator(instance, sanityCheck); + return wc; + + function getMessage() { + var message = ""; + var c = instance.exports.getMessageChar(); + while ( c != 0 ) { + message += String.fromCharCode(c); + c = instance.exports.getMessageChar(); + } + return message; + } + + function printSharedRWMemory () { + const shared_rw_memory_size = instance.exports.getFieldNumLen32(); + const arr = new Uint32Array(shared_rw_memory_size); + for (let j=0; j { + const h = fnvHash(k); + const hMSB = parseInt(h.slice(0,8), 16); + const hLSB = parseInt(h.slice(8,16), 16); + const fArr = flatArray(input[k]); + let signalSize = this.instance.exports.getInputSignalSize(hMSB, hLSB); + if (signalSize < 0){ + throw new Error(`Signal ${k} not found\n`); + } + if (fArr.length < signalSize) { + throw new Error(`Not enough values for input signal ${k}\n`); + } + if (fArr.length > signalSize) { + throw new Error(`Too many values for input signal ${k}\n`); + } + for (let i=0; i0) { + res.unshift(0); + i--; + } + } + return res; +} + +function fromArray32(arr) { //returns a BigInt + var res = BigInt(0); + const radix = BigInt(0x100000000); + for (let i = 0; i