Browse Source

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.
main
arnaucube 7 months ago
parent
commit
bd01a89971
2 changed files with 8 additions and 14 deletions
  1. +6
    -13
      c/tester.js
  2. +2
    -1
      package.json

+ 6
- 13
c/tester.js

@ -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) {
@ -81,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() {
@ -208,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

+ 2
- 1
package.json

@ -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"
}
}

Loading…
Cancel
Save