Use self-hosted snarkjs dependency
This commit is contained in:
parent
e9256fbf85
commit
fdcb762030
1
.npmrc
Normal file
1
.npmrc
Normal file
@ -0,0 +1 @@
|
|||||||
|
@tornado:registry=https://git.tornado.ws/api/packages/tornado-packages/npm/
|
@ -1,5 +1,5 @@
|
|||||||
const bn128 = require("snarkjs").bn128;
|
const bn128 = require("@tornado/snarkjs").bn128;
|
||||||
const bigInt = require("snarkjs").bigInt;
|
const bigInt = require("@tornado/snarkjs").bigInt;
|
||||||
const createBlakeHash = require("blake-hash");
|
const createBlakeHash = require("blake-hash");
|
||||||
const babyJub = require("../src/babyjub");
|
const babyJub = require("../src/babyjub");
|
||||||
|
|
||||||
@ -8,12 +8,12 @@ function getPoint(S) {
|
|||||||
const h = createBlakeHash("blake256").update(S).digest();
|
const h = createBlakeHash("blake256").update(S).digest();
|
||||||
|
|
||||||
if (h.length != 32) {
|
if (h.length != 32) {
|
||||||
throw new Error("Invalid length")
|
throw new Error("Invalid length");
|
||||||
}
|
}
|
||||||
|
|
||||||
let sign = false;
|
let sign = false;
|
||||||
if (h[31] & 0x80) {
|
if (h[31] & 0x80) {
|
||||||
h[31] = h[31] & 0x7F;
|
h[31] = h[31] & 0x7f;
|
||||||
sign = true;
|
sign = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,9 +28,7 @@ function getPoint(S) {
|
|||||||
|
|
||||||
const y2 = F.square(y);
|
const y2 = F.square(y);
|
||||||
|
|
||||||
let x = F.sqrt(F.div(
|
let x = F.sqrt(F.div(F.sub(F.one, y2), F.sub(a, F.mul(d, y2))));
|
||||||
F.sub(F.one, y2),
|
|
||||||
F.sub(a, F.mul(d, y2))));
|
|
||||||
|
|
||||||
if (x == null) return null;
|
if (x == null) return null;
|
||||||
|
|
||||||
@ -43,7 +41,6 @@ function getPoint(S) {
|
|||||||
return p8;
|
return p8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function generatePoint(S) {
|
function generatePoint(S) {
|
||||||
let p = null;
|
let p = null;
|
||||||
let idx = 0;
|
let idx = 0;
|
||||||
@ -59,13 +56,10 @@ function generatePoint(S) {
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const g = [
|
const g = [
|
||||||
bigInt("5299619240641551281634865583518297030282874472190772894086521144482721001553"),
|
bigInt("5299619240641551281634865583518297030282874472190772894086521144482721001553"),
|
||||||
bigInt("16950150798460657717958625567821834550301663161624707787222815936182638968203")];
|
bigInt("16950150798460657717958625567821834550301663161624707787222815936182638968203"),
|
||||||
|
];
|
||||||
|
|
||||||
// Sanity check
|
// Sanity check
|
||||||
if (!babyJub.inCurve(g)) {
|
if (!babyJub.inCurve(g)) {
|
||||||
@ -78,6 +72,3 @@ for (let i=0; i<25; i++) {
|
|||||||
const P = generatePoint("Iden3_PedersenGenerator_" + S);
|
const P = generatePoint("Iden3_PedersenGenerator_" + S);
|
||||||
console.log(`[${P[0].toString()}, ${P[1].toString()}]`);
|
console.log(`[${P[0].toString()}, ${P[1].toString()}]`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
4516
package-lock.json
generated
4516
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -24,6 +24,7 @@
|
|||||||
"author": "0Kims",
|
"author": "0Kims",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@tornado/snarkjs": "0.1.20",
|
||||||
"blake-hash": "^1.1.0",
|
"blake-hash": "^1.1.0",
|
||||||
"blake2b": "^2.1.3",
|
"blake2b": "^2.1.3",
|
||||||
"circom": "0.5.33",
|
"circom": "0.5.33",
|
||||||
|
@ -3,8 +3,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
const Contract = require("./evmasm");
|
const Contract = require("./evmasm");
|
||||||
const G2 = require("snarkjs").bn128.G2;
|
const G2 = require("@tornado/snarkjs").bn128.G2;
|
||||||
|
|
||||||
|
|
||||||
function toHex256(a) {
|
function toHex256(a) {
|
||||||
let S = a.toString(16);
|
let S = a.toString(16);
|
||||||
@ -13,13 +12,12 @@ function toHex256(a) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createCode(P, w) {
|
function createCode(P, w) {
|
||||||
|
|
||||||
const C = new Contract();
|
const C = new Contract();
|
||||||
|
|
||||||
const NPOINTS = 1 << (w - 1);
|
const NPOINTS = 1 << (w - 1);
|
||||||
|
|
||||||
const VAR_POS = C.allocMem(32);
|
const VAR_POS = C.allocMem(32);
|
||||||
const VAR_POINTS = C.allocMem( (NPOINTS)*4*32);
|
const VAR_POINTS = C.allocMem(NPOINTS * 4 * 32);
|
||||||
const savedP = C.allocMem(32);
|
const savedP = C.allocMem(32);
|
||||||
const savedZ3 = C.allocMem(32);
|
const savedZ3 = C.allocMem(32);
|
||||||
|
|
||||||
@ -95,7 +93,6 @@ function createCode(P, w) {
|
|||||||
C.push("0x00");
|
C.push("0x00");
|
||||||
C.return();
|
C.return();
|
||||||
|
|
||||||
|
|
||||||
double();
|
double();
|
||||||
addPoint();
|
addPoint();
|
||||||
affine();
|
affine();
|
||||||
@ -209,7 +206,6 @@ function createCode(P, w) {
|
|||||||
C.and();
|
C.and();
|
||||||
C.jumpi("enddouble"); // X Y Z q
|
C.jumpi("enddouble"); // X Y Z q
|
||||||
|
|
||||||
|
|
||||||
// Z3 = 2*Y*Z // Remove Z
|
// Z3 = 2*Y*Z // Remove Z
|
||||||
mul(2, 4, 6); // yz X Y Z q
|
mul(2, 4, 6); // yz X Y Z q
|
||||||
rm(6); // X Y yz q
|
rm(6); // X Y yz q
|
||||||
@ -278,8 +274,8 @@ function createCode(P, w) {
|
|||||||
C.returnCall();
|
C.returnCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
function addPoint() { // p, xR, xI, yR, yI, zR zI, q
|
function addPoint() {
|
||||||
|
// p, xR, xI, yR, yI, zR zI, q
|
||||||
|
|
||||||
C.dup(0); // p p X2 Y2 Z2 q
|
C.dup(0); // p p X2 Y2 Z2 q
|
||||||
|
|
||||||
@ -289,7 +285,6 @@ function createCode(P, w) {
|
|||||||
C.iszero(); // X2 Y2 Z2 q
|
C.iszero(); // X2 Y2 Z2 q
|
||||||
C.jumpi("endpadd");
|
C.jumpi("endpadd");
|
||||||
|
|
||||||
|
|
||||||
C.dup(4);
|
C.dup(4);
|
||||||
C.iszero();
|
C.iszero();
|
||||||
C.dup(6);
|
C.dup(6);
|
||||||
@ -297,15 +292,12 @@ function createCode(P, w) {
|
|||||||
C.and();
|
C.and();
|
||||||
C.jumpi("returnP"); // X2 Y2 Z2 q
|
C.jumpi("returnP"); // X2 Y2 Z2 q
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// lastZ3 = (Z2+1)^2 - Z2^2
|
// lastZ3 = (Z2+1)^2 - Z2^2
|
||||||
add1(4, 6); // Z2+1 X2 Y2 Z2 q
|
add1(4, 6); // Z2+1 X2 Y2 Z2 q
|
||||||
square(0, 8); // (Z2+1)^2 Z2+1 X2 Y2 Z2 q
|
square(0, 8); // (Z2+1)^2 Z2+1 X2 Y2 Z2 q
|
||||||
rm(2); // (Z2+1)^2 X2 Y2 Z2 q
|
rm(2); // (Z2+1)^2 X2 Y2 Z2 q
|
||||||
square(6, 8); // Z2^2 (Z2+1)^2 X2 Y2 Z2 q
|
square(6, 8); // Z2^2 (Z2+1)^2 X2 Y2 Z2 q
|
||||||
|
|
||||||
|
|
||||||
sub(2, 0, 10); // (Z2+1)^2-Z2^2 Z2^2 (Z2+1)^2 X2 Y2 Z2 q
|
sub(2, 0, 10); // (Z2+1)^2-Z2^2 Z2^2 (Z2+1)^2 X2 Y2 Z2 q
|
||||||
|
|
||||||
saveZ3(); // Z2^2 (Z2+1)^2 X2 Y2 Z2 q
|
saveZ3(); // Z2^2 (Z2+1)^2 X2 Y2 Z2 q
|
||||||
@ -314,13 +306,11 @@ function createCode(P, w) {
|
|||||||
// U2 = X2
|
// U2 = X2
|
||||||
// S2 = Y2 // Z2^2 U2 S2 Z2 q
|
// S2 = Y2 // Z2^2 U2 S2 Z2 q
|
||||||
|
|
||||||
|
|
||||||
// U1 = X1 * Z2^2
|
// U1 = X1 * Z2^2
|
||||||
loadX(); // X1 Z2^2 U2 S2 Z2 q
|
loadX(); // X1 Z2^2 U2 S2 Z2 q
|
||||||
mul(0, 2, 10); // X1*Z2^2 X1 Z2^2 U2 S2 Z2 q
|
mul(0, 2, 10); // X1*Z2^2 X1 Z2^2 U2 S2 Z2 q
|
||||||
rm(2); // X1*Z2^2 Z2^2 U2 S2 Z2 q
|
rm(2); // X1*Z2^2 Z2^2 U2 S2 Z2 q
|
||||||
|
|
||||||
|
|
||||||
mul(2, 8, 10); // Z2^3 U1 Z2^2 U2 S2 Z2 q
|
mul(2, 8, 10); // Z2^3 U1 Z2^2 U2 S2 Z2 q
|
||||||
rm(4); // U1 Z2^3 U2 S2 Z2 q
|
rm(4); // U1 Z2^3 U2 S2 Z2 q
|
||||||
rm(8); // Z2^3 U2 S2 U1 q
|
rm(8); // Z2^3 U2 S2 U1 q
|
||||||
@ -336,7 +326,6 @@ function createCode(P, w) {
|
|||||||
C.and(); // c2&c1 S1 U2 S2 U1 q
|
C.and(); // c2&c1 S1 U2 S2 U1 q
|
||||||
C.jumpi("double1"); // S1 U2 S2 U1 q
|
C.jumpi("double1"); // S1 U2 S2 U1 q
|
||||||
|
|
||||||
|
|
||||||
// Returns the double
|
// Returns the double
|
||||||
|
|
||||||
// H = U2-U1 // Remove U2
|
// H = U2-U1 // Remove U2
|
||||||
@ -472,7 +461,8 @@ function createCode(P, w) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function affine() { // X Y Z q
|
function affine() {
|
||||||
|
// X Y Z q
|
||||||
// If Z2=0 return 0
|
// If Z2=0 return 0
|
||||||
C.label("affine");
|
C.label("affine");
|
||||||
C.dup(4);
|
C.dup(4);
|
||||||
@ -550,33 +540,32 @@ function createCode(P, w) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.abi = [
|
module.exports.abi = [
|
||||||
{
|
{
|
||||||
"constant": true,
|
constant: true,
|
||||||
"inputs": [
|
inputs: [
|
||||||
{
|
{
|
||||||
"name": "escalar",
|
name: "escalar",
|
||||||
"type": "uint256"
|
type: "uint256",
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
"name": "mulexp",
|
name: "mulexp",
|
||||||
"outputs": [
|
outputs: [
|
||||||
{
|
{
|
||||||
"name": "",
|
name: "",
|
||||||
"type": "uint256"
|
type: "uint256",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "",
|
name: "",
|
||||||
"type": "uint256"
|
type: "uint256",
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
"payable": false,
|
payable: false,
|
||||||
"stateMutability": "pure",
|
stateMutability: "pure",
|
||||||
"type": "function"
|
type: "function",
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
module.exports.createCode = createCode;
|
module.exports.createCode = createCode;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
|
const snarkjs = require("@tornado/snarkjs");
|
||||||
const snarkjs = require("snarkjs");
|
|
||||||
|
|
||||||
const bigInt = snarkjs.bigInt;
|
const bigInt = snarkjs.bigInt;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user