mirror of
https://github.com/arnaucube/circom.git
synced 2026-02-06 18:56:40 +01:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a5f7d1a2b | ||
|
|
434e7ac498 | ||
|
|
99afb4312e | ||
|
|
67ec7c5d5b | ||
|
|
a76f3b5988 | ||
|
|
bc9d395e70 | ||
|
|
7fc457ac90 |
46
package-lock.json
generated
46
package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "circom",
|
"name": "circom",
|
||||||
"version": "0.5.8",
|
"version": "0.5.11",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -221,12 +221,22 @@
|
|||||||
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
|
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
|
||||||
},
|
},
|
||||||
"circom_runtime": {
|
"circom_runtime": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.0.6.tgz",
|
||||||
"integrity": "sha512-WEZHnRO1AJIDI2w1yX6rq4G1/MMKnExT3qirjBQR7x43i9Ww3E/wusBHTbXWLb8aYyxsBU07LGy0YXPywPGYvA==",
|
"integrity": "sha512-o0T5MuWzxnxinWG3+CygS/kZouoP+z5ZrufUwqKJy3gsVFJhkbqMpfKmcBGjhExB3uatA7cKyOiRAOLOz5+t5w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"ffjavascript": "0.1.0",
|
"ffjavascript": "0.1.0",
|
||||||
"fnv-plus": "^1.3.1"
|
"fnv-plus": "^1.3.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ffjavascript": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.1.0.tgz",
|
||||||
|
"integrity": "sha512-dmKlUasSfvUcxBm8nCSKl2x7EFJsXA7OVP8XLFA03T2+6mAc3IiVLC2ambEVOcMOhyhl0vJfVZjM9f9d38D1rw==",
|
||||||
|
"requires": {
|
||||||
|
"big-integer": "^1.6.48"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cjson": {
|
"cjson": {
|
||||||
@@ -581,6 +591,11 @@
|
|||||||
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"fastfile": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fastfile/-/fastfile-0.0.1.tgz",
|
||||||
|
"integrity": "sha512-Fk8PWafGWGEUw7oPq/dJen92ASxknCEy4ZC8n4VEvSwCp/jcReyEmVoWsRIWTf+IvAp2MzvFi54vOPeK2LQZtQ=="
|
||||||
|
},
|
||||||
"ffiasm": {
|
"ffiasm": {
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/ffiasm/-/ffiasm-0.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/ffiasm/-/ffiasm-0.0.2.tgz",
|
||||||
@@ -592,9 +607,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ffjavascript": {
|
"ffjavascript": {
|
||||||
"version": "0.1.0",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.1.2.tgz",
|
||||||
"integrity": "sha512-dmKlUasSfvUcxBm8nCSKl2x7EFJsXA7OVP8XLFA03T2+6mAc3IiVLC2ambEVOcMOhyhl0vJfVZjM9f9d38D1rw==",
|
"integrity": "sha512-zB1dhgBjJlvyk2VQIQzFSpUJmanYQYDR/Fo1KhZnaNW5chMFJT55qz0dx1LMKrAklBbidKzz2/C7dgibxQF94g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"big-integer": "^1.6.48"
|
"big-integer": "^1.6.48"
|
||||||
}
|
}
|
||||||
@@ -1123,11 +1138,22 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"r1csfile": {
|
"r1csfile": {
|
||||||
"version": "0.0.4",
|
"version": "0.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.5.tgz",
|
||||||
"integrity": "sha512-1Y/zzzEjQVTR/gPlduRaKi2K+yU+UxqtsS+obDLEEb4WAzwCkKGybRfp037CUW5OApeleS1WdGmtKv9K9FPhsA==",
|
"integrity": "sha512-B+BdKPb/WUTp4N/3X4d1Spgx9Ojx5tFVejGZRJxpTtzq34mC8Vi/czWfiPj85V8kud31lCfYcZ16z7+czvM0Sw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"fastfile": "0.0.1",
|
||||||
"ffjavascript": "0.1.0"
|
"ffjavascript": "0.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"ffjavascript": {
|
||||||
|
"version": "0.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.1.0.tgz",
|
||||||
|
"integrity": "sha512-dmKlUasSfvUcxBm8nCSKl2x7EFJsXA7OVP8XLFA03T2+6mAc3IiVLC2ambEVOcMOhyhl0vJfVZjM9f9d38D1rw==",
|
||||||
|
"requires": {
|
||||||
|
"big-integer": "^1.6.48"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"regexpp": {
|
"regexpp": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "circom",
|
"name": "circom",
|
||||||
"version": "0.5.8",
|
"version": "0.5.11",
|
||||||
"description": "Language to generate logic circuits",
|
"description": "Language to generate logic circuits",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
@@ -30,12 +30,13 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"circom_runtime": "0.0.5",
|
"circom_runtime": "0.0.6",
|
||||||
|
"fastfile": "0.0.1",
|
||||||
"ffiasm": "0.0.2",
|
"ffiasm": "0.0.2",
|
||||||
"ffjavascript": "0.1.0",
|
"ffjavascript": "0.1.2",
|
||||||
"ffwasm": "0.0.7",
|
"ffwasm": "0.0.7",
|
||||||
"fnv-plus": "^1.3.1",
|
"fnv-plus": "^1.3.1",
|
||||||
"r1csfile": "0.0.4",
|
"r1csfile": "0.0.5",
|
||||||
"tmp-promise": "^2.0.2",
|
"tmp-promise": "^2.0.2",
|
||||||
"wasmbuilder": "0.0.10"
|
"wasmbuilder": "0.0.10"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -504,7 +504,7 @@ class BuilderC {
|
|||||||
|
|
||||||
|
|
||||||
function addShortMontgomeryNegative(a) {
|
function addShortMontgomeryNegative(a) {
|
||||||
const b = a.minus(self.header.P);
|
const b = self.F.neg(a);
|
||||||
return `${b.toString()}, 0x40000000, { ${getLongString(toMontgomery(a))} }`;
|
return `${b.toString()}, 0x40000000, { ${getLongString(toMontgomery(a))} }`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
|
|
||||||
const fs = require("fs");
|
const fastFile = require("fastfile");
|
||||||
const assert = require("assert");
|
const assert = require("assert");
|
||||||
const Scalar = require("ffjavascript").Scalar;
|
|
||||||
|
|
||||||
module.exports.buildR1cs = buildR1cs;
|
module.exports.buildR1cs = buildR1cs;
|
||||||
|
|
||||||
async function buildR1cs(ctx, fileName) {
|
async function buildR1cs(ctx, fileName) {
|
||||||
|
|
||||||
const fd = await fs.promises.open(fileName, "w");
|
const fd = await fastFile.createOverride(fileName);
|
||||||
|
|
||||||
|
|
||||||
await fd.write("r1cs"); // Magic "r1cs"
|
await fd.write(Buffer.from("r1cs"), 0); // Magic "r1cs"
|
||||||
|
|
||||||
let p = 4;
|
let p = 4;
|
||||||
await writeU32(1); // Version
|
await writeU32(1); // Version
|
||||||
@@ -53,7 +52,6 @@ async function buildR1cs(ctx, fileName) {
|
|||||||
for (let i=0; i<ctx.constraints.length; i++) {
|
for (let i=0; i<ctx.constraints.length; i++) {
|
||||||
if ((ctx.verbose)&&(i%10000 == 0)) {
|
if ((ctx.verbose)&&(i%10000 == 0)) {
|
||||||
if (ctx.verbose) console.log("writing constraint: ", i);
|
if (ctx.verbose) console.log("writing constraint: ", i);
|
||||||
await fd.datasync();
|
|
||||||
}
|
}
|
||||||
await writeConstraint(ctx.constraints[i]);
|
await writeConstraint(ctx.constraints[i]);
|
||||||
}
|
}
|
||||||
@@ -89,19 +87,22 @@ async function buildR1cs(ctx, fileName) {
|
|||||||
await writeU32(constraintsSize, pConstraintsSize);
|
await writeU32(constraintsSize, pConstraintsSize);
|
||||||
await writeU32(mapSize, pMapSize);
|
await writeU32(mapSize, pMapSize);
|
||||||
|
|
||||||
await fd.sync();
|
|
||||||
await fd.close();
|
await fd.close();
|
||||||
|
|
||||||
async function writeU32(v, pos) {
|
async function writeU32(v, pos) {
|
||||||
|
let o = (typeof pos == "undefined") ? p : pos;
|
||||||
|
|
||||||
const b = Buffer.allocUnsafe(4);
|
const b = Buffer.allocUnsafe(4);
|
||||||
b.writeInt32LE(v);
|
b.writeInt32LE(v);
|
||||||
|
|
||||||
await fd.write(b, 0, 4, pos);
|
await fd.write(b, o);
|
||||||
|
|
||||||
if (typeof(pos) == "undefined") p += 4;
|
if (typeof(pos) == "undefined") p += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function writeU64(v, pos) {
|
async function writeU64(v, pos) {
|
||||||
|
let o = (typeof pos == "undefined") ? p : pos;
|
||||||
|
|
||||||
const b = Buffer.allocUnsafe(8);
|
const b = Buffer.allocUnsafe(8);
|
||||||
|
|
||||||
const LSB = v & 0xFFFFFFFF;
|
const LSB = v & 0xFFFFFFFF;
|
||||||
@@ -109,7 +110,7 @@ async function buildR1cs(ctx, fileName) {
|
|||||||
b.writeInt32LE(LSB, 0);
|
b.writeInt32LE(LSB, 0);
|
||||||
b.writeInt32LE(MSB, 4);
|
b.writeInt32LE(MSB, 4);
|
||||||
|
|
||||||
await fd.write(b, 0, 8, pos);
|
await fd.write(b, o);
|
||||||
|
|
||||||
if (typeof(pos) == "undefined") p += 8;
|
if (typeof(pos) == "undefined") p += 8;
|
||||||
}
|
}
|
||||||
@@ -134,16 +135,15 @@ async function buildR1cs(ctx, fileName) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function writeBigInt(n, pos) {
|
async function writeBigInt(n, pos) {
|
||||||
const b = Buffer.allocUnsafe(n8);
|
|
||||||
|
|
||||||
const dwords = Scalar.toArray(n, 0x100000000);
|
let o = (typeof pos == "undefined") ? p : pos;
|
||||||
|
|
||||||
for (let i=0; i<dwords.length; i++) {
|
const s = n.toString(16);
|
||||||
b.writeUInt32LE(dwords[dwords.length-1-i], i*4, 4 );
|
const b = Buffer.from(s.padStart(n8*2, "0"), "hex");
|
||||||
}
|
const buff = Buffer.allocUnsafe(b.length);
|
||||||
b.fill(0, dwords.length*4);
|
for (let i=0; i<b.length; i++) buff[i] = b[b.length-1-i];
|
||||||
|
|
||||||
await fd.write(b, 0, fs, pos);
|
await fd.write(buff, o);
|
||||||
|
|
||||||
if (typeof(pos) == "undefined") p += n8;
|
if (typeof(pos) == "undefined") p += n8;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user