mirror of
https://github.com/arnaucube/circomlib.git
synced 2026-02-06 18:56:43 +01:00
pedersen working
This commit is contained in:
@@ -1,55 +1,53 @@
|
||||
const chai = require("chai");
|
||||
const path = require("path");
|
||||
const snarkjs = require("snarkjs");
|
||||
const compiler = require("circom");
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
const bigInt = snarkjs.bigInt;
|
||||
const bigInt = require("big-integer");
|
||||
const tester = require("circom").tester;
|
||||
|
||||
function print(circuit, w, s) {
|
||||
console.log(s + ": " + w[circuit.getSignalIdx(s)]);
|
||||
}
|
||||
|
||||
function checkSub(_a,_b, circuit) {
|
||||
async function checkSub(_a,_b, circuit) {
|
||||
let a=bigInt(_a);
|
||||
let b=bigInt(_b);
|
||||
if (a.lesser(bigInt.zero)) a = a.add(bigInt.one.shl(16));
|
||||
if (b.lesser(bigInt.zero)) b = b.add(bigInt.one.shl(16));
|
||||
const w = circuit.calculateWitness({a: a, b: b});
|
||||
if (a.lesser(bigInt.zero)) a = a.add(bigInt.one.shiftLeft(16));
|
||||
if (b.lesser(bigInt.zero)) b = b.add(bigInt.one.shiftLeft(16));
|
||||
const w = await circuit.calculateWitness({a: a, b: b});
|
||||
|
||||
let res = a.sub(b);
|
||||
if (res.lesser(bigInt.zero)) res = res.add(bigInt.one.shl(16));
|
||||
assert( w[circuit.getSignalIdx("main.out")].equals(bigInt(res)) );
|
||||
let res = a.minus(b);
|
||||
if (res.lesser(bigInt.zero)) res = res.add(bigInt.one.shiftLeft(16));
|
||||
await circuit.assertOut(w, {out: bigInt(res)});
|
||||
}
|
||||
|
||||
describe("BinSub test", () => {
|
||||
describe("BinSub test", function () {
|
||||
|
||||
this.timeout(100000);
|
||||
|
||||
let circuit;
|
||||
before( async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "binsub_test.circom"));
|
||||
|
||||
circuit = new snarkjs.Circuit(cirDef);
|
||||
|
||||
console.log("NConstrains BinSub: " + circuit.nConstraints);
|
||||
circuit = await tester(path.join(__dirname, "circuits", "binsub_test.circom"));
|
||||
});
|
||||
|
||||
it("Should check variuos ege cases", async () => {
|
||||
checkSub(0,0, circuit);
|
||||
checkSub(1,0, circuit);
|
||||
checkSub(-1,0, circuit);
|
||||
checkSub(2,1, circuit);
|
||||
checkSub(2,2, circuit);
|
||||
checkSub(2,3, circuit);
|
||||
checkSub(2,-1, circuit);
|
||||
checkSub(2,-2, circuit);
|
||||
checkSub(2,-3, circuit);
|
||||
checkSub(-2,-3, circuit);
|
||||
checkSub(-2,-2, circuit);
|
||||
checkSub(-2,-1, circuit);
|
||||
checkSub(-2,0, circuit);
|
||||
checkSub(-2,1, circuit);
|
||||
checkSub(-2,2, circuit);
|
||||
checkSub(-2,3, circuit);
|
||||
await checkSub(0,0, circuit);
|
||||
await checkSub(1,0, circuit);
|
||||
await checkSub(-1,0, circuit);
|
||||
await checkSub(2,1, circuit);
|
||||
await checkSub(2,2, circuit);
|
||||
await checkSub(2,3, circuit);
|
||||
await checkSub(2,-1, circuit);
|
||||
await checkSub(2,-2, circuit);
|
||||
await checkSub(2,-3, circuit);
|
||||
await checkSub(-2,-3, circuit);
|
||||
await checkSub(-2,-2, circuit);
|
||||
await checkSub(-2,-1, circuit);
|
||||
await checkSub(-2,0, circuit);
|
||||
await checkSub(-2,1, circuit);
|
||||
await checkSub(-2,2, circuit);
|
||||
await checkSub(-2,3, circuit);
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -1,35 +1,36 @@
|
||||
const chai = require("chai");
|
||||
const path = require("path");
|
||||
const snarkjs = require("snarkjs");
|
||||
const crypto = require("crypto");
|
||||
|
||||
const compiler = require("circom");
|
||||
const tester = require("circom").tester;
|
||||
|
||||
const bigInt = require("big-integer");
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
describe("Sum test", () => {
|
||||
describe("Sum test", function () {
|
||||
|
||||
this.timeout(100000);
|
||||
|
||||
it("Should create a constant circuit", async () => {
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "constants_test.circom"));
|
||||
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "constants_test.circom"));
|
||||
assert.equal(cirDef.nVars, 2);
|
||||
// TODO
|
||||
// assert.equal(cirDef.nVars, 2);
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
const witness = await circuit.calculateWitness({ "in": bigInt("d807aa98", 16)});
|
||||
|
||||
const witness = circuit.calculateWitness({ "in": "0xd807aa98" });
|
||||
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt("0xd807aa98")));
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt("d807aa98", 16)));
|
||||
});
|
||||
it("Should create a sum circuit", async () => {
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "sum_test.circom"));
|
||||
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "sum_test.circom"));
|
||||
assert.equal(cirDef.nVars, 97); // 32 (in1) + 32(in2) + 32(out) + 1 (carry)
|
||||
// TODO
|
||||
// assert.equal(cirDef.nVars, 97); // 32 (in1) + 32(in2) + 32(out) + 1 (carry)
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
const witness = await circuit.calculateWitness({ "a": "111", "b": "222" });
|
||||
|
||||
const witness = circuit.calculateWitness({ "a": "111", "b": "222" });
|
||||
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt("333")));
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt("333")));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -6,6 +6,8 @@ template A() {
|
||||
signal input b;
|
||||
signal output out;
|
||||
|
||||
var i;
|
||||
|
||||
component n2ba = Num2Bits(16);
|
||||
component n2bb = Num2Bits(16);
|
||||
component sub = BinSub(16);
|
||||
@@ -14,9 +16,12 @@ template A() {
|
||||
n2ba.in <== a;
|
||||
n2bb.in <== b;
|
||||
|
||||
for (var i=0; i<16; i++) {
|
||||
for (i=0; i<16; i++) {
|
||||
sub.in[0][i] <== n2ba.out[i];
|
||||
sub.in[1][i] <== n2bb.out[i];
|
||||
}
|
||||
|
||||
for (i=0; i<16; i++) {
|
||||
b2n.in[i] <== sub.out[i];
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"in":"3876493977147089964395646989418653640709890493868463039177063670701706079087","Ax":"7544364404313686108640297486043592597084907953513982229886192880342666171487","Ay":"2721089742146723067451923493488918617350881493409568860627491866568993834336"}
|
||||
{ "in": ["0", "0"]}
|
||||
|
||||
5543
test/circuits/out.json
Normal file
5543
test/circuits/out.json
Normal file
File diff suppressed because it is too large
Load Diff
BIN
test/circuits/pedersen_test
Executable file
BIN
test/circuits/pedersen_test
Executable file
Binary file not shown.
51580
test/circuits/pedersen_test.cpp
Normal file
51580
test/circuits/pedersen_test.cpp
Normal file
File diff suppressed because it is too large
Load Diff
20
test/circuits/pedersen_test.dSYM/Contents/Info.plist
Normal file
20
test/circuits/pedersen_test.dSYM/Contents/Info.plist
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.apple.xcode.dsym.pedersen_test</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>dSYM</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Binary file not shown.
13108
test/circuits/pedersen_test.sym
Normal file
13108
test/circuits/pedersen_test.sym
Normal file
File diff suppressed because it is too large
Load Diff
@@ -6,6 +6,8 @@ template A() {
|
||||
signal input b;
|
||||
signal output out;
|
||||
|
||||
var i;
|
||||
|
||||
component n2ba = Num2Bits(32);
|
||||
component n2bb = Num2Bits(32);
|
||||
component sum = BinSum(32,2);
|
||||
@@ -14,9 +16,12 @@ template A() {
|
||||
n2ba.in <== a;
|
||||
n2bb.in <== b;
|
||||
|
||||
for (var i=0; i<32; i++) {
|
||||
for (i=0; i<32; i++) {
|
||||
sum.in[0][i] <== n2ba.out[i];
|
||||
sum.in[1][i] <== n2bb.out[i];
|
||||
}
|
||||
|
||||
for (i=0; i<32; i++) {
|
||||
b2n.in[i] <== sum.out[i];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,193 +1,184 @@
|
||||
const chai = require("chai");
|
||||
const path = require("path");
|
||||
const snarkjs = require("snarkjs");
|
||||
const crypto = require("crypto");
|
||||
|
||||
const compiler = require("circom");
|
||||
const tester = require("circom").tester;
|
||||
|
||||
const bigInt = require("big-integer");
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
describe("Sum test", () => {
|
||||
it("Should create a iszero circuit", async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "iszero.circom"));
|
||||
describe("Sum test", function () {
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
this.timeout(100000);
|
||||
|
||||
it("Should create a iszero circuit", async() => {
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "iszero.circom"));
|
||||
|
||||
let witness;
|
||||
witness = circuit.calculateWitness({ "in": 111});
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": 111});
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in": 0 });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": 0 });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
});
|
||||
it("Should create a isequal circuit", async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "isequal.circom"));
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "isequal.circom"));
|
||||
|
||||
let witness;
|
||||
witness = circuit.calculateWitness({ "in[0]": "111", "in[1]": "222" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [111,222] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "444", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [444,444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
});
|
||||
it("Should create a comparison lessthan", async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "lessthan.circom"));
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "lessthan.circom"));
|
||||
|
||||
let witness;
|
||||
witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [333,444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in":[1,1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [661, 660] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [1, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [555, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
});
|
||||
it("Should create a comparison lesseqthan", async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "lesseqthan.circom"));
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "lesseqthan.circom"));
|
||||
|
||||
let witness;
|
||||
witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [333,444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in":[1,1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [661, 660] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [1, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [555, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
});
|
||||
it("Should create a comparison greaterthan", async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "greaterthan.circom"));
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "greaterthan.circom"));
|
||||
|
||||
let witness;
|
||||
witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [333,444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in":[1,1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [661, 660] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [1, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [555, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
});
|
||||
it("Should create a comparison greatereqthan", async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "greatereqthan.circom"));
|
||||
|
||||
const circuit = new snarkjs.Circuit(cirDef);
|
||||
|
||||
console.log("NConstraints BalancesUpdater: " + circuit.nConstraints);
|
||||
const circuit = await tester(path.join(__dirname, "circuits", "greatereqthan.circom"));
|
||||
|
||||
let witness;
|
||||
witness = circuit.calculateWitness({ "in[0]": "333", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [333,444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in":[1,1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "661", "in[1]": "660" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [661, 660] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "1" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 1] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "444" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(0)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 444] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(0)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "1", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [1, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "555", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [555, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
|
||||
witness = circuit.calculateWitness({ "in[0]": "0", "in[1]": "0" });
|
||||
assert(witness[0].equals(snarkjs.bigInt(1)));
|
||||
assert(witness[1].equals(snarkjs.bigInt(1)));
|
||||
witness = await circuit.calculateWitness({ "in": [0, 0] });
|
||||
assert(witness[0].equals(bigInt(1)));
|
||||
assert(witness[1].equals(bigInt(1)));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
const chai = require("chai");
|
||||
const path = require("path");
|
||||
const snarkjs = require("snarkjs");
|
||||
const compiler = require("circom");
|
||||
// const crypto = require("crypto");
|
||||
|
||||
const tester = require("circom").tester;
|
||||
const bigInt = require("big-integer");
|
||||
|
||||
const eddsa = require("../src/eddsa.js");
|
||||
const babyJub = require("../src/babyjub.js");
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
const bigInt = snarkjs.bigInt;
|
||||
|
||||
function print(circuit, w, s) {
|
||||
console.log(s + ": " + w[circuit.getSignalIdx(s)]);
|
||||
}
|
||||
@@ -36,11 +34,7 @@ describe("EdDSA test", function () {
|
||||
this.timeout(100000);
|
||||
|
||||
before( async () => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "eddsa_test.circom"));
|
||||
|
||||
circuit = new snarkjs.Circuit(cirDef);
|
||||
|
||||
console.log("NConstrains EdDSA: " + circuit.nConstraints);
|
||||
circuit = await tester(path.join(__dirname, "circuits", "eddsa_test.circom"));
|
||||
});
|
||||
|
||||
it("Sign a single 10 bytes from 0 to 9", async () => {
|
||||
@@ -66,9 +60,10 @@ describe("EdDSA test", function () {
|
||||
const sBits = buffer2bits(pSignature.slice(32, 64));
|
||||
const aBits = buffer2bits(pPubKey);
|
||||
|
||||
const w = circuit.calculateWitness({A: aBits, R8: r8Bits, S: sBits, msg: msgBits});
|
||||
const w = await circuit.calculateWitness({A: aBits, R8: r8Bits, S: sBits, msg: msgBits});
|
||||
|
||||
assert(circuit.checkWitness(w));
|
||||
// TODO
|
||||
// assert(circuit.checkWitness(w));
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
const chai = require("chai");
|
||||
const snarkjs = require("snarkjs");
|
||||
|
||||
const eddsa = require("../src/eddsa.js");
|
||||
const babyJub = require("../src/babyjub.js");
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
const bigInt = snarkjs.bigInt;
|
||||
const bigInt = require("big-integer");
|
||||
const utils = require("../src/utils.js");
|
||||
|
||||
describe("EdDSA js test", function () {
|
||||
|
||||
@@ -14,7 +14,7 @@ describe("EdDSA js test", function () {
|
||||
|
||||
it("Sign (using Mimc7) a single 10 bytes from 0 to 9", () => {
|
||||
const msgBuf = Buffer.from("00010203040506070809", "hex");
|
||||
const msg = bigInt.leBuff2int(msgBuf);
|
||||
const msg = utils.leBuff2int(msgBuf);
|
||||
|
||||
// const prvKey = crypto.randomBytes(32);
|
||||
|
||||
@@ -49,7 +49,7 @@ describe("EdDSA js test", function () {
|
||||
|
||||
it("Sign (using Poseidon) a single 10 bytes from 0 to 9", () => {
|
||||
const msgBuf = Buffer.from("00010203040506070809", "hex");
|
||||
const msg = bigInt.leBuff2int(msgBuf);
|
||||
const msg = utils.leBuff2int(msgBuf);
|
||||
|
||||
const prvKey = Buffer.from("0001020304050607080900010203040506070809000102030405060708090001", "hex");
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
const chai = require("chai");
|
||||
const path = require("path");
|
||||
const snarkjs = require("snarkjs");
|
||||
const compiler = require("circom");
|
||||
|
||||
const assert = chai.assert;
|
||||
|
||||
const bigInt = snarkjs.bigInt;
|
||||
const bigInt = require("big-integer");
|
||||
const tester = require("circom").tester;
|
||||
|
||||
const babyJub = require("../src/babyjub.js");
|
||||
|
||||
@@ -22,79 +19,59 @@ describe("Double Pedersen test", function() {
|
||||
let circuit;
|
||||
this.timeout(100000);
|
||||
before( async() => {
|
||||
const cirDef = await compiler(path.join(__dirname, "circuits", "pedersen_test.circom"));
|
||||
|
||||
circuit = new snarkjs.Circuit(cirDef);
|
||||
circuit = await tester(path.join(__dirname, "circuits", "pedersen_test.circom"));
|
||||
|
||||
console.log("NConstrains: " + circuit.nConstraints);
|
||||
});
|
||||
it("Should pedersen at zero", async () => {
|
||||
|
||||
let w, xout, yout;
|
||||
let w;
|
||||
|
||||
w = circuit.calculateWitness({ in: ["0", "0"]});
|
||||
w = await circuit.calculateWitness({ in: ["0", "0"]});
|
||||
|
||||
xout = w[circuit.getSignalIdx("main.out[0]")];
|
||||
yout = w[circuit.getSignalIdx("main.out[1]")];
|
||||
await circuit.assertOut(w, {out: [0,1]});
|
||||
|
||||
assert(xout.equals("0"));
|
||||
assert(yout.equals("1"));
|
||||
});
|
||||
it("Should pedersen at one first generator", async () => {
|
||||
let w, xout, yout;
|
||||
let w;
|
||||
|
||||
w = circuit.calculateWitness({ in: ["1", "0"]});
|
||||
w = await circuit.calculateWitness({ in: ["1", "0"]});
|
||||
|
||||
xout = bigInt(w[circuit.getSignalIdx("main.out[0]")]);
|
||||
yout = bigInt(w[circuit.getSignalIdx("main.out[1]")]);
|
||||
await circuit.assertOut(w, {out: PBASE[0]});
|
||||
|
||||
assert(xout.equals(PBASE[0][0]));
|
||||
assert(yout.equals(PBASE[0][1]));
|
||||
});
|
||||
it("Should pedersen at one second generator", async () => {
|
||||
let w, xout, yout;
|
||||
let w;
|
||||
|
||||
w = circuit.calculateWitness({ in: ["0", "1"]});
|
||||
w = await circuit.calculateWitness({ in: ["0", "1"]});
|
||||
|
||||
xout = w[circuit.getSignalIdx("main.out[0]")];
|
||||
yout = w[circuit.getSignalIdx("main.out[1]")];
|
||||
|
||||
assert(xout.equals(PBASE[1][0]));
|
||||
assert(yout.equals(PBASE[1][1]));
|
||||
await circuit.assertOut(w, {out: PBASE[1]});
|
||||
|
||||
});
|
||||
it("Should pedersen at mixed generators", async () => {
|
||||
let w, xout, yout;
|
||||
w = circuit.calculateWitness({ in: ["3", "7"]});
|
||||
|
||||
xout = w[circuit.getSignalIdx("main.out[0]")];
|
||||
yout = w[circuit.getSignalIdx("main.out[1]")];
|
||||
|
||||
let w;
|
||||
w = await circuit.calculateWitness({ in: ["3", "7"]});
|
||||
|
||||
const r = babyJub.addPoint(
|
||||
babyJub.mulPointEscalar(PBASE[0], 3),
|
||||
babyJub.mulPointEscalar(PBASE[1], 7)
|
||||
);
|
||||
|
||||
assert(xout.equals(r[0]));
|
||||
assert(yout.equals(r[1]));
|
||||
await circuit.assertOut(w, {out: r});
|
||||
|
||||
});
|
||||
it("Should pedersen all ones", async () => {
|
||||
let w, xout, yout;
|
||||
let w;
|
||||
|
||||
const allOnes = bigInt("1").shl(250).sub(bigInt("1"));
|
||||
w = circuit.calculateWitness({ in: [allOnes, allOnes]});
|
||||
const allOnes = bigInt("1").shiftLeft(250).minus(bigInt("1"));
|
||||
w = await circuit.calculateWitness({ in: [allOnes, allOnes]});
|
||||
|
||||
xout = w[circuit.getSignalIdx("main.out[0]")];
|
||||
yout = w[circuit.getSignalIdx("main.out[1]")];
|
||||
|
||||
const r2 = babyJub.addPoint(
|
||||
babyJub.mulPointEscalar(PBASE[0], allOnes),
|
||||
babyJub.mulPointEscalar(PBASE[1], allOnes)
|
||||
);
|
||||
|
||||
assert(xout.equals(r2[0]));
|
||||
assert(yout.equals(r2[1]));
|
||||
await circuit.assertOut(w, {out: r2});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user