From 0dc08b804cd3b09aa2de879c5f4e935695007a67 Mon Sep 17 00:00:00 2001
From: cedoor
Date: Thu, 12 Oct 2023 12:37:41 -0700
Subject: [PATCH 1/7] feat(groth16): create new groth16 package
---
packages/groth16/LICENSE | 21 +
packages/groth16/README.md | 119 ++++
packages/groth16/build.tsconfig.json | 8 +
packages/groth16/package.json | 52 ++
packages/groth16/rollup.browser.config.ts | 56 ++
packages/groth16/rollup.node.config.ts | 44 ++
packages/groth16/snark-artifacts/index.json | 96 ++++
packages/groth16/snark-artifacts/index.wasm | Bin 0 -> 1948286 bytes
packages/groth16/snark-artifacts/index.zkey | Bin 0 -> 250238 bytes
packages/groth16/src/index.ts | 5 +
packages/groth16/src/prove.ts | 228 ++++++++
packages/groth16/src/types/index.ts | 19 +
packages/groth16/src/utils.ts | 14 +
packages/groth16/src/verify.ts | 84 +++
packages/groth16/src/wtns-calculate.ts | 39 ++
packages/groth16/src/wtns-utils.ts | 32 ++
packages/groth16/src/zkey-utils.ts | 63 +++
packages/groth16/tests/index.test.ts | 46 ++
packages/groth16/tsconfig.json | 7 +
packages/groth16/typedoc.json | 3 +
types/ffjavascript/index.d.ts | 509 +++++++++++++++++
yarn.lock | 592 +++++++++++++++++++-
22 files changed, 2017 insertions(+), 20 deletions(-)
create mode 100644 packages/groth16/LICENSE
create mode 100644 packages/groth16/README.md
create mode 100644 packages/groth16/build.tsconfig.json
create mode 100644 packages/groth16/package.json
create mode 100644 packages/groth16/rollup.browser.config.ts
create mode 100644 packages/groth16/rollup.node.config.ts
create mode 100644 packages/groth16/snark-artifacts/index.json
create mode 100644 packages/groth16/snark-artifacts/index.wasm
create mode 100644 packages/groth16/snark-artifacts/index.zkey
create mode 100644 packages/groth16/src/index.ts
create mode 100644 packages/groth16/src/prove.ts
create mode 100644 packages/groth16/src/types/index.ts
create mode 100644 packages/groth16/src/utils.ts
create mode 100644 packages/groth16/src/verify.ts
create mode 100644 packages/groth16/src/wtns-calculate.ts
create mode 100644 packages/groth16/src/wtns-utils.ts
create mode 100644 packages/groth16/src/zkey-utils.ts
create mode 100644 packages/groth16/tests/index.test.ts
create mode 100644 packages/groth16/tsconfig.json
create mode 100644 packages/groth16/typedoc.json
create mode 100644 types/ffjavascript/index.d.ts
diff --git a/packages/groth16/LICENSE b/packages/groth16/LICENSE
new file mode 100644
index 000000000..4377091ec
--- /dev/null
+++ b/packages/groth16/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Ethereum Foundation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/groth16/README.md b/packages/groth16/README.md
new file mode 100644
index 000000000..784fa5b8d
--- /dev/null
+++ b/packages/groth16/README.md
@@ -0,0 +1,119 @@
+
+
+ SnarkJS Groth16
+
+ A snippet of SnarkJS code for verifying and generating Groth16 proofs only.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+| This package contains [SnarkJS](https://github.com/iden3/snarkjs) functions for generating and verifying zero knowledge proofs with Groth16 specifically. In addition to the original code it also uses the cached `bn128` curve if it already exists, making verification and generation of consecutive proofs faster. |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+
+## 🛠 Install
+
+### npm or yarn
+
+Install the `@zk-kit/groth16` package and its peer dependencies with npm:
+
+```bash
+npm i @zk-kit/groth16
+```
+
+or yarn:
+
+```bash
+yarn add @zk-kit/groth16
+```
+
+## 📜 Usage
+
+\# **prove**(input: _CircuitSignals_, wasmFile: _ZKArtifact_, zkeyFile: _ZKArtifact_): Promise\<_{
+proof: Groth16Proof
+publicSignals: PublicSignals
+}_>
+
+```typescript
+import { prove } from "@zk-kit/groth16"
+
+const input = {
+ message: 12,
+ scope: 122
+}
+
+const proof = await prove(input, "./circuit.zkey", "./circuit.wasm")
+
+console.log(proof)
+/*
+{
+ proof: {
+ pi_a: [
+ '8259885706934172848141475422209230656096448508815982888010519325096632035723',
+ '3142099172052192611205205328157407975469005554072266974009053708782134081166',
+ '1'
+ ],
+ pi_b: [ [Array], [Array], [Array] ],
+ pi_c: [
+ '13863804425308906943736719856399634046638544298517159271373916818387594277305',
+ '21340646707244019956779928177502771923632450548108204371058275686712196195969',
+ '1'
+ ],
+ protocol: 'groth16',
+ curve: 'bn128'
+ },
+ publicSignals: [
+ '527758365153958423212195330785598453331596731388181860789801455413116800554',
+ '19104626566001952573667666924569656871967113105870778077087237826253896482830',
+ '122'
+ ]
+}
+*/
+```
+
+\# **verify**(verificationKey: _any_, proof: _{
+proof: Groth16Proof
+publicSignals: PublicSignals
+}_): Promise\<_boolean_>
+
+```typescript
+import { verify } from "@zk-kit/groth16"
+import verificationKey from "./circuit.json"
+
+const response = await verify(verificationKey, proof)
+
+console.log(response) // true
+```
diff --git a/packages/groth16/build.tsconfig.json b/packages/groth16/build.tsconfig.json
new file mode 100644
index 000000000..2d4a1d6da
--- /dev/null
+++ b/packages/groth16/build.tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "declarationDir": "dist/types"
+ },
+ "include": ["src"]
+}
diff --git a/packages/groth16/package.json b/packages/groth16/package.json
new file mode 100644
index 000000000..b56ef1274
--- /dev/null
+++ b/packages/groth16/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@zk-kit/groth16",
+ "version": "0.1.0",
+ "description": "A snippet of SnarkJS code for verifying and generating Groth16 proofs only.",
+ "license": "MIT",
+ "main": "dist/index.node.js",
+ "exports": {
+ "node": {
+ "import": "./dist/index.node.mjs",
+ "require": "./dist/index.node.js"
+ },
+ "browser": "./dist/index.browser.mjs",
+ "default": "./dist/index.browser.mjs"
+ },
+ "types": "dist/types/index.d.ts",
+ "files": [
+ "dist/",
+ "src/",
+ "LICENSE",
+ "README.md"
+ ],
+ "repository": "https://github.com/privacy-scaling-explorations/zk-kit",
+ "homepage": "https://github.com/privacy-scaling-explorations/zk-kit/tree/main/packages/groth16",
+ "bugs": {
+ "url": "https://github.com/privacy-scaling-explorations/zk-kit.git/issues"
+ },
+ "scripts": {
+ "build:watch": "rollup -c rollup.config.ts -w --configPlugin typescript",
+ "build": "rimraf dist && yarn build:browser && yarn build:node",
+ "build:browser": "rollup -c rollup.browser.config.ts --configPlugin typescript",
+ "build:node": "rollup -c rollup.node.config.ts --configPlugin typescript",
+ "prepublishOnly": "yarn build"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "devDependencies": {
+ "@iden3/binfileutils": "0.0.11",
+ "@rollup/plugin-commonjs": "^24.1.0",
+ "@rollup/plugin-node-resolve": "^15.0.2",
+ "@rollup/plugin-virtual": "^3.0.2",
+ "fastfile": "0.0.20",
+ "rimraf": "^5.0.5",
+ "rollup": "^4.0.2",
+ "rollup-plugin-cleanup": "^3.2.1",
+ "rollup-plugin-typescript2": "^0.31.2"
+ },
+ "dependencies": {
+ "circom_runtime": "0.1.24",
+ "ffjavascript": "0.2.60"
+ }
+}
diff --git a/packages/groth16/rollup.browser.config.ts b/packages/groth16/rollup.browser.config.ts
new file mode 100644
index 000000000..058143451
--- /dev/null
+++ b/packages/groth16/rollup.browser.config.ts
@@ -0,0 +1,56 @@
+import commonjs from "@rollup/plugin-commonjs"
+import { nodeResolve } from "@rollup/plugin-node-resolve"
+import virtual from "@rollup/plugin-virtual"
+import * as fs from "fs"
+import cleanup from "rollup-plugin-cleanup"
+import typescript from "rollup-plugin-typescript2"
+
+// Needed by fastfile.
+import { O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC } from "constants"
+
+const constants = `
+export const O_TRUNC = ${O_TRUNC};
+export const O_CREAT = ${O_CREAT};
+export const O_RDWR = ${O_RDWR};
+export const O_EXCL = ${O_EXCL};
+export const O_RDONLY = ${O_RDONLY}
+`
+
+const empty = "export default {}"
+
+const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8"))
+const banner = `/**
+ * @module ${pkg.name}
+ * @version ${pkg.version}
+ * @file ${pkg.description}
+ * @copyright Ethereum Foundation 2023
+ * @license ${pkg.license}
+ * @see [Github]{@link ${pkg.homepage}}
+*/`
+
+export default {
+ input: "src/index.ts",
+ output: [
+ {
+ file: pkg.exports.browser,
+ format: "es",
+ banner
+ }
+ ],
+ external: Object.keys(pkg.dependencies),
+ plugins: [
+ typescript({
+ tsconfig: "./build.tsconfig.json",
+ useTsconfigDeclarationDir: true
+ }),
+ virtual({
+ fs: empty,
+ constants
+ }),
+ nodeResolve(),
+ commonjs({
+ esmExternals: true
+ }),
+ cleanup({ comments: "jsdoc" })
+ ]
+}
diff --git a/packages/groth16/rollup.node.config.ts b/packages/groth16/rollup.node.config.ts
new file mode 100644
index 000000000..66f4a02cb
--- /dev/null
+++ b/packages/groth16/rollup.node.config.ts
@@ -0,0 +1,44 @@
+import commonjs from "@rollup/plugin-commonjs"
+import { nodeResolve } from "@rollup/plugin-node-resolve"
+import * as fs from "fs"
+import cleanup from "rollup-plugin-cleanup"
+import typescript from "rollup-plugin-typescript2"
+
+const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8"))
+const banner = `/**
+ * @module ${pkg.name}
+ * @version ${pkg.version}
+ * @file ${pkg.description}
+ * @copyright Ethereum Foundation 2023
+ * @license ${pkg.license}
+ * @see [Github]{@link ${pkg.homepage}}
+*/`
+
+export default {
+ input: "src/index.ts",
+ output: [
+ {
+ file: pkg.exports.node.require,
+ format: "cjs",
+ banner,
+ exports: "auto"
+ },
+ {
+ file: pkg.exports.node.import,
+ format: "es",
+ banner
+ }
+ ],
+ external: Object.keys(pkg.dependencies),
+ plugins: [
+ typescript({
+ tsconfig: "./build.tsconfig.json",
+ useTsconfigDeclarationDir: true
+ }),
+ nodeResolve(),
+ commonjs({
+ esmExternals: true
+ }),
+ cleanup({ comments: "jsdoc" })
+ ]
+}
diff --git a/packages/groth16/snark-artifacts/index.json b/packages/groth16/snark-artifacts/index.json
new file mode 100644
index 000000000..fd88c223a
--- /dev/null
+++ b/packages/groth16/snark-artifacts/index.json
@@ -0,0 +1,96 @@
+{
+ "protocol": "groth16",
+ "curve": "bn128",
+ "nPublic": 3,
+ "vk_alpha_1": [
+ "20491192805390485299153009773594534940189261866228447918068658471970481763042",
+ "9383485363053290200918347156157836566562967994039712273449902621266178545958",
+ "1"
+ ],
+ "vk_beta_2": [
+ [
+ "6375614351688725206403948262868962793625744043794305715222011528459656738731",
+ "4252822878758300859123897981450591353533073413197771768651442665752259397132"
+ ],
+ [
+ "10505242626370262277552901082094356697409835680220590971873171140371331206856",
+ "21847035105528745403288232691147584728191162732299865338377159692350059136679"
+ ],
+ ["1", "0"]
+ ],
+ "vk_gamma_2": [
+ [
+ "10857046999023057135944570762232829481370756359578518086990519993285655852781",
+ "11559732032986387107991004021392285783925812861821192530917403151452391805634"
+ ],
+ [
+ "8495653923123431417604973247489272438418190587263600148770280649306958101930",
+ "4082367875863433681332203403145435568316851327593401208105741076214120093531"
+ ],
+ ["1", "0"]
+ ],
+ "vk_delta_2": [
+ [
+ "17546152771742044890128665170773308307706885904145171368861289731338407120726",
+ "21635289475723704811498602453116541869848271742675656134593605133653559871988"
+ ],
+ [
+ "12208424286857750236404959484429248934995357114248145547240410687755355066198",
+ "19321625097082563598592975631421044551870980615218660051914871088320678365555"
+ ],
+ ["1", "0"]
+ ],
+ "vk_alphabeta_12": [
+ [
+ [
+ "2029413683389138792403550203267699914886160938906632433982220835551125967885",
+ "21072700047562757817161031222997517981543347628379360635925549008442030252106"
+ ],
+ [
+ "5940354580057074848093997050200682056184807770593307860589430076672439820312",
+ "12156638873931618554171829126792193045421052652279363021382169897324752428276"
+ ],
+ [
+ "7898200236362823042373859371574133993780991612861777490112507062703164551277",
+ "7074218545237549455313236346927434013100842096812539264420499035217050630853"
+ ]
+ ],
+ [
+ [
+ "7077479683546002997211712695946002074877511277312570035766170199895071832130",
+ "10093483419865920389913245021038182291233451549023025229112148274109565435465"
+ ],
+ [
+ "4595479056700221319381530156280926371456704509942304414423590385166031118820",
+ "19831328484489333784475432780421641293929726139240675179672856274388269393268"
+ ],
+ [
+ "11934129596455521040620786944827826205713621633706285934057045369193958244500",
+ "8037395052364110730298837004334506829870972346962140206007064471173334027475"
+ ]
+ ]
+ ],
+ "IC": [
+ [
+ "10540353245037691655240058832465935071147222378795512774896416883563614389198",
+ "20042286059857913285646233979306226083538103143380748863555356103197961213823",
+ "1"
+ ],
+ [
+ "12178048393484805922448151297512780036777540315506565788645040495931277621130",
+ "9697539656531822741576184528195082340044862873578980581504958946888585254425",
+ "1"
+ ],
+ [
+ "20991907493060125430185038723439696392069163847357524165903787100018954817952",
+ "12348708907766483529401318577288191297476103087328423321867414316726183562292",
+ "1"
+ ],
+ [
+ "6823739927950557742246913693052072220213742766782370219666937126411380340633",
+ "19878777316727584245579797737044924949420447706770682437221414501064053790692",
+ "1"
+ ]
+ ]
+}
+
diff --git a/packages/groth16/snark-artifacts/index.wasm b/packages/groth16/snark-artifacts/index.wasm
new file mode 100644
index 0000000000000000000000000000000000000000..7a67220dcf5ae3ecbc51b71a1617ae9726c27c4f
GIT binary patch
literal 1948286
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
z
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