3 Commits
v0.0.6 ... main

Author SHA1 Message Date
arnaucube
bd01a89971 Fix c tester witness file read
c tester (c/tester.js) was using a method to read the witness file
called 'readBinaryFile' that was obtaining a wrong number of witness
elements, and as consequence was returning a wrong array of witness.

Changed that method to 'readBinWitnessFile', which makes use of
wtnsUtils method from snarkjs to read the witness binary file, so now
the c tester returns the correct witness.
2021-11-04 14:55:42 +01:00
Jordi Baylina
15ddd2a0be 0.0.7 2021-10-15 19:32:11 +02:00
Jordi Baylina
020cb4d510 Add optimization options 2021-10-15 19:31:55 +02:00
4 changed files with 17 additions and 19 deletions

View File

@@ -11,6 +11,8 @@ const exec = util.promisify(require("child_process").exec);
const loadR1cs = require("r1csfile").load;
const ZqField = require("ffjavascript").ZqField;
const readWtns = require("snarkjs").wtns.exportJson;
module.exports = c_tester;
async function c_tester(circomInput, _options) {
@@ -46,7 +48,9 @@ async function compile (baseName, fileName, options) {
if (options.r1cs) flags += "--r1cs ";
if (options.json) flags += "--json ";
if (options.output) flags += "--output " + options.output + " ";
if (options.O === 0) flags += "--O0 "
if (options.O === 1) flags += "--O1 "
b = await exec("circom " + flags + fileName);
assert(b.stderr == "",
"circom compiler error \n" + b.stderr);
@@ -79,7 +83,7 @@ class WasmTester {
});
await exec("ls " + path.join(this.dir.path, this.baseName+"_cpp/"));
await exec(runc + " " + inputFile + " " + wtnsFile);
return readBinaryFile(wtnsFile);
return await readBinWitnessFile(wtnsFile);
}
async loadSymbols() {
@@ -206,18 +210,9 @@ async function compiler_above_version(v) {
return check_versions ( compiler_version, vlist );
}
function readBinaryFile(fileName) {
const buff = fs.readFileSync(fileName);
const n32 = fromArray8ToUint(buff.slice(24,27));
var pos = 28+n32;
const ws = fromArray8ToUint(buff.slice(pos,pos+3));
pos += 16;
const w = [];
for (let i=0; i<ws; i++) {
w.push(fromArray8(buff.slice(pos,pos+n32-1)));
pos += n32;
}
return w;
async function readBinWitnessFile(fileName) {
const buffWitness = await readWtns(fileName);
return buffWitness;
}
function fromArray8(arr) { //returns a BigInt

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "circom_tester",
"version": "0.0.6",
"version": "0.0.7",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "circom_tester",
"version": "0.0.6",
"version": "0.0.7",
"license": "GPL-3.0",
"dependencies": {
"chai": "^4.3.4",

View File

@@ -1,6 +1,6 @@
{
"name": "circom_tester",
"version": "0.0.6",
"version": "0.0.7",
"description": "Tools for testing circom circuits.",
"main": "index.js",
"scripts": {
@@ -29,6 +29,7 @@
"fnv-plus": "^1.3.1",
"r1csfile": "0.0.16",
"tmp-promise": "^3.0.2",
"util": "^0.12.4"
"util": "^0.12.4",
"snarkjs": "0.4.10"
}
}

View File

@@ -51,7 +51,9 @@ async function compile (fileName, options) {
if (options.r1cs) flags += "--r1cs ";
if (options.json) flags += "--json ";
if (options.output) flags += "--output " + options.output + " ";
if (options.O === 0) flags += "--O0 "
if (options.O === 1) flags += "--O1 "
b = await exec("circom " + flags + fileName);
assert(b.stderr == "",
"circom compiler error \n" + b.stderr);