├── apps
├── web
│ ├── README.md
│ ├── .eslintrc.js
│ ├── postcss.config.js
│ ├── tailwind.config.js
│ ├── public
│ │ ├── favicon.ico
│ │ ├── agg_ecdsa.r1cs
│ │ ├── agg_ecdsa.wasm
│ │ ├── github-mark.png
│ │ ├── agg_ecdsa_mobile.r1cs
│ │ └── agg_ecdsa_mobile.wasm
│ ├── workers
│ │ ├── shared.ts
│ │ ├── generate-params.worker.ts
│ │ ├── verify.worker.ts
│ │ └── generate-proof.worker.ts
│ ├── app
│ │ ├── fonts.ts
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── next-env.d.ts
│ ├── tsconfig.json
│ ├── types
│ │ └── types.ts
│ ├── .gitignore
│ ├── next.config.js
│ ├── package.json
│ └── hooks
│ │ ├── useGenerateParams.ts
│ │ ├── useFolding.ts
│ │ ├── useProve.ts
│ │ └── useVerify.ts
└── docs
│ ├── README.md
│ ├── .eslintrc.js
│ ├── next.config.js
│ ├── app
│ ├── page.tsx
│ └── layout.tsx
│ ├── next-env.d.ts
│ ├── tsconfig.json
│ ├── .gitignore
│ └── package.json
├── .npmrc
├── nova-ecdsa-browser
├── rust-toolchain
├── src
│ ├── lib.rs
│ └── wasm.rs
├── notes.md
├── .cargo
│ └── config.toml
├── Cargo.toml
└── Cargo.lock
├── .gitattributes
├── pnpm-workspace.yaml
├── packages
├── ui
│ ├── postcss.config.js
│ ├── tailwind.config.js
│ ├── styles.css
│ ├── tsconfig.json
│ ├── index.tsx
│ ├── Header.tsx
│ ├── turbo
│ │ └── generators
│ │ │ ├── templates
│ │ │ └── component.hbs
│ │ │ └── config.ts
│ ├── Button.tsx
│ ├── package.json
│ ├── Containers.tsx
│ ├── Description.tsx
│ └── Nova.tsx
├── configs
│ └── tailwind
│ │ ├── package.json
│ │ ├── postcss.config.js
│ │ └── tailwind.config.js
├── nova-ecdsa-browser-pkg
│ ├── nova_ecdsa_browser_bg.wasm
│ ├── snippets
│ │ ├── wasm-bindgen-futures-264cf9c4a001c783
│ │ │ └── src
│ │ │ │ └── task
│ │ │ │ └── worker.js
│ │ ├── wasm-bindgen-rayon-7afa899f36665473
│ │ │ └── src
│ │ │ │ └── workerHelpers.js
│ │ └── nova-scotia-30308307bbbbb0ad
│ │ │ └── src
│ │ │ └── circom
│ │ │ └── wasm_deps
│ │ │ └── generate_witness_browser.js
│ ├── package.json
│ ├── nova_ecdsa_browser_bg.wasm.d.ts
│ ├── nova_ecdsa_browser.d.ts
│ └── nova_ecdsa_browser.js
├── tsconfig
│ ├── package.json
│ ├── react-library.json
│ ├── base.json
│ └── nextjs.json
├── eslint-config-custom
│ ├── index.js
│ └── package.json
└── scripts
│ ├── package.json
│ └── generateSampleSignature.ts
├── Cargo.toml
├── nova-ecdsa
├── src
│ ├── data
│ │ ├── agg_ecdsa.r1cs
│ │ ├── agg_ecdsa.wasm
│ │ ├── agg_ecdsa_mobile.r1cs
│ │ ├── agg_ecdsa_mobile.wasm
│ │ └── circuits
│ │ │ ├── compile.sh
│ │ │ ├── efficient_ecdsa_pubkey.circom
│ │ │ ├── main.circom
│ │ │ └── batch_efficient_ecdsa_pubkey.circom
│ └── main.rs
├── Cargo.toml
└── Cargo.lock
├── .eslintrc.js
├── turbo.json
├── package.json
├── .gitignore
├── README.md
└── Cargo.lock
/apps/web/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/docs/README.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | auto-install-peers = true
2 |
--------------------------------------------------------------------------------
/nova-ecdsa-browser/rust-toolchain:
--------------------------------------------------------------------------------
1 | nightly-2022-12-12
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | packages/nova-ecdsa-browser-pkg/* linguist-vendored
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - "apps/*"
3 | - "packages/*"
4 |
--------------------------------------------------------------------------------
/nova-ecdsa-browser/src/lib.rs:
--------------------------------------------------------------------------------
1 | #[cfg(target_family = "wasm")]
2 | pub mod wasm;
--------------------------------------------------------------------------------
/packages/ui/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require("../configs/tailwind/postcss.config");
--------------------------------------------------------------------------------
/apps/docs/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ["custom"],
4 | };
5 |
--------------------------------------------------------------------------------
/apps/web/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ["custom"],
4 | };
5 |
--------------------------------------------------------------------------------
/packages/ui/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require("../configs/tailwind/tailwind.config");
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [workspace]
2 |
3 | members = [
4 | "nova-ecdsa",
5 | "nova-ecdsa-browser",
6 | ]
--------------------------------------------------------------------------------
/apps/web/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require("../../packages/configs/tailwind/postcss.config");
--------------------------------------------------------------------------------
/apps/web/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = require("../../packages/configs/tailwind/tailwind.config");
--------------------------------------------------------------------------------
/apps/docs/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | reactStrictMode: true,
3 | transpilePackages: ["ui"],
4 | };
5 |
--------------------------------------------------------------------------------
/apps/web/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/apps/web/public/favicon.ico
--------------------------------------------------------------------------------
/apps/web/public/agg_ecdsa.r1cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/apps/web/public/agg_ecdsa.r1cs
--------------------------------------------------------------------------------
/apps/web/public/agg_ecdsa.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/apps/web/public/agg_ecdsa.wasm
--------------------------------------------------------------------------------
/apps/web/public/github-mark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/apps/web/public/github-mark.png
--------------------------------------------------------------------------------
/packages/configs/tailwind/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "configs",
3 | "version": "0.0.0",
4 | "private": true
5 | }
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/agg_ecdsa.r1cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/nova-ecdsa/src/data/agg_ecdsa.r1cs
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/agg_ecdsa.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/nova-ecdsa/src/data/agg_ecdsa.wasm
--------------------------------------------------------------------------------
/apps/web/public/agg_ecdsa_mobile.r1cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/apps/web/public/agg_ecdsa_mobile.r1cs
--------------------------------------------------------------------------------
/apps/web/public/agg_ecdsa_mobile.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/apps/web/public/agg_ecdsa_mobile.wasm
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/agg_ecdsa_mobile.r1cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/nova-ecdsa/src/data/agg_ecdsa_mobile.r1cs
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/agg_ecdsa_mobile.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/nova-ecdsa/src/data/agg_ecdsa_mobile.wasm
--------------------------------------------------------------------------------
/packages/ui/styles.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | h1 {
6 | font-family: var(--font-roboto-500)
7 | }
--------------------------------------------------------------------------------
/packages/configs/tailwind/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
--------------------------------------------------------------------------------
/packages/ui/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["."],
4 | "exclude": ["dist", "build", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/nova_ecdsa_browser_bg.wasm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dmpierre/nova-browser-ecdsa/HEAD/packages/nova-ecdsa-browser-pkg/nova_ecdsa_browser_bg.wasm
--------------------------------------------------------------------------------
/nova-ecdsa-browser/notes.md:
--------------------------------------------------------------------------------
1 | - Environment variable should correctly point to your llvm installation
2 | - `.vscode` folder is used for environment setup. Might need to change paths provided for it to work properly
--------------------------------------------------------------------------------
/packages/tsconfig/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tsconfig",
3 | "version": "0.0.0",
4 | "private": true,
5 | "license": "MIT",
6 | "publishConfig": {
7 | "access": "public"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/apps/docs/app/page.tsx:
--------------------------------------------------------------------------------
1 | import { Button, Header } from "ui";
2 |
3 | export default function Page() {
4 | return (
5 | <>
6 |
7 |
8 | >
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/apps/web/workers/shared.ts:
--------------------------------------------------------------------------------
1 | export const WEBSITE_ROOT = process.env.NODE_ENV == 'production' ? 'https://nova-browser-ecdsa-web.vercel.app/' : 'http://localhost:3000/';
2 | export const ctx: Worker = self as unknown as Worker;
--------------------------------------------------------------------------------
/apps/web/app/fonts.ts:
--------------------------------------------------------------------------------
1 | import { Inter, Roboto } from 'next/font/google';
2 |
3 | export const roboto = Roboto({
4 | display: 'swap',
5 | weight: '500',
6 | subsets: ['latin'],
7 | variable: '--font-roboto-500'
8 | });
9 |
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/circuits/compile.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | CIRCOMLIB_PATH=${1}
3 | SPARTAN_ECDSA_EFFICIENT_ECDSA_PATH=${2}
4 | circom -l ${CIRCOMLIB_PATH} -l ${SPARTAN_ECDSA_EFFICIENT_ECDSA_PATH} --prime secq256k1 --r1cs --wasm ./main.circom
--------------------------------------------------------------------------------
/apps/web/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/packages/ui/index.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 |
3 | // component exports
4 | export * from "./Button";
5 | export * from "./Header";
6 | export * from "./Nova";
7 | export * from "./Containers";
8 | export * from "./Description";
--------------------------------------------------------------------------------
/apps/docs/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/packages/configs/tailwind/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | content: [
3 | "../../packages/ui/**/*.{js,ts,jsx,tsx}",
4 | "./app/**/*.{js,ts,jsx,tsx}",
5 | ],
6 | theme: {
7 | extend: {},
8 | },
9 | };
--------------------------------------------------------------------------------
/apps/docs/app/layout.tsx:
--------------------------------------------------------------------------------
1 | export default function RootLayout({
2 | children,
3 | }: {
4 | children: React.ReactNode;
5 | }) {
6 | return (
7 |
8 |
{children}
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/apps/docs/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/nextjs.json",
3 | "compilerOptions": {
4 | "plugins": [{ "name": "next" }]
5 | },
6 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
7 | "exclude": ["node_modules"]
8 | }
9 |
--------------------------------------------------------------------------------
/apps/web/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/nextjs.json",
3 | "compilerOptions": {
4 | "plugins": [{ "name": "next" }]
5 | },
6 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
7 | "exclude": ["node_modules"]
8 | }
9 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | // This tells ESLint to load the config from the package `eslint-config-custom`
4 | extends: ["custom"],
5 | settings: {
6 | next: {
7 | rootDir: ["apps/*/"],
8 | },
9 | },
10 | };
11 |
--------------------------------------------------------------------------------
/apps/web/types/types.ts:
--------------------------------------------------------------------------------
1 | export type FoldingParams = {
2 | filename: string;
3 | iteration_count: number; // not camelCasing to fit wasm fn signature
4 | per_iteration_count: number; // not camelCasing to fit wasm fn signature
5 | total: number;
6 | type: string;
7 | }
--------------------------------------------------------------------------------
/packages/ui/Header.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 |
3 | export const Header = ({ text }: { text: string }) => {
4 | return (
5 |
6 |
7 | {text}
8 |
9 | );
10 | };
11 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/snippets/wasm-bindgen-futures-264cf9c4a001c783/src/task/worker.js:
--------------------------------------------------------------------------------
1 | onmessage = function (ev) {
2 | let [ia, index, value] = ev.data;
3 | ia = new Int32Array(ia.buffer);
4 | let result = Atomics.wait(ia, index, value);
5 | postMessage(result);
6 | };
7 |
--------------------------------------------------------------------------------
/nova-ecdsa-browser/.cargo/config.toml:
--------------------------------------------------------------------------------
1 | [target.wasm32-unknown-unknown]
2 | rustflags = ["-C", "target-feature=+atomics,+bulk-memory,+mutable-globals", "-C", "link-arg=--max-memory=4294967296"]
3 |
4 | [unstable]
5 | build-std = ["panic_abort", "std"]
6 |
7 | [build]
8 | target = "wasm32-unknown-unknown"
--------------------------------------------------------------------------------
/apps/web/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import { roboto } from "./fonts";
2 |
3 | export default function RootLayout({
4 | children,
5 | }: {
6 | children: React.ReactNode;
7 | }) {
8 | return (
9 |
10 | {children}
11 |
12 | );
13 | }
--------------------------------------------------------------------------------
/packages/eslint-config-custom/index.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ["next", "turbo", "prettier"],
3 | rules: {
4 | "@next/next/no-html-link-for-pages": "off",
5 | },
6 | parserOptions: {
7 | babelOptions: {
8 | presets: [require.resolve("next/babel")],
9 | },
10 | },
11 | };
12 |
--------------------------------------------------------------------------------
/packages/tsconfig/react-library.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "React Library",
4 | "extends": "./base.json",
5 | "compilerOptions": {
6 | "jsx": "react-jsx",
7 | "lib": ["ES2015", "DOM"],
8 | "module": "ESNext",
9 | "target": "es6"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/packages/ui/turbo/generators/templates/component.hbs:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 |
3 | interface Props {
4 | children?: React.ReactNode;
5 | }
6 |
7 | export const {{ pascalCase name }} = ({ children }: Props) => {
8 | return (
9 |
10 |
{{ name }}
11 | {children}
12 |
13 | );
14 | };
15 |
--------------------------------------------------------------------------------
/packages/ui/Button.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import * as React from "react";
4 |
5 | interface ButtonProps {
6 | text: string;
7 | onClick: () => void;
8 | }
9 |
10 | export const Button: React.FC = ({ text, onClick }) => {
11 | return {text} ;
12 | };
13 |
--------------------------------------------------------------------------------
/turbo.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://turbo.build/schema.json",
3 | "globalDependencies": ["**/.env.*local"],
4 | "pipeline": {
5 | "build": {
6 | "dependsOn": ["^build"],
7 | "outputs": [".next/**", "!.next/cache/**"]
8 | },
9 | "lint": {},
10 | "dev": {
11 | "cache": false,
12 | "persistent": true
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nova-ecdsa-browser",
3 | "version": "0.1.0",
4 | "files": [
5 | "nova_ecdsa_browser_bg.wasm",
6 | "nova_ecdsa_browser.js",
7 | "nova_ecdsa_browser.d.ts"
8 | ],
9 | "module": "nova_ecdsa_browser.js",
10 | "types": "nova_ecdsa_browser.d.ts",
11 | "sideEffects": [
12 | "./snippets/*"
13 | ]
14 | }
--------------------------------------------------------------------------------
/packages/eslint-config-custom/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "eslint-config-custom",
3 | "version": "0.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "dependencies": {
7 | "eslint-config-next": "^13.4.1",
8 | "eslint-config-prettier": "^8.3.0",
9 | "eslint-plugin-react": "7.28.0",
10 | "eslint-config-turbo": "^1.9.3"
11 | },
12 | "publishConfig": {
13 | "access": "public"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages/scripts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "scripts",
3 | "version": "1.0.0",
4 | "description": "Utility scripts for the project",
5 | "keywords": [],
6 | "author": "",
7 | "license": "ISC",
8 | "dependencies": {
9 | "@ethereumjs/util": "^8.0.5",
10 | "@personaelabs/spartan-ecdsa": "^2.1.4",
11 | "elliptic": "^6.5.4"
12 | },
13 | "devDependencies": {
14 | "@types/elliptic": "^6.4.14",
15 | "ts-node": "^10.9.1"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "build": "turbo run build",
5 | "dev": "turbo run dev",
6 | "lint": "turbo run lint",
7 | "format": "prettier --write \"**/*.{ts,tsx,md}\""
8 | },
9 | "devDependencies": {
10 | "@turbo/gen": "^1.9.7",
11 | "eslint": "^7.32.0",
12 | "eslint-config-custom": "workspace:*",
13 | "prettier": "^2.5.1",
14 | "turbo": "latest"
15 | },
16 | "packageManager": "pnpm@8.6.10",
17 | "name": "nova-ecdsa"
18 | }
19 |
--------------------------------------------------------------------------------
/nova-ecdsa/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "nova-ecdsa"
3 | version = "0.1.0"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | [dependencies]
9 | nova-scotia = { git = "https://github.com/dmpierre/Nova-Scotia.git", branch = "secp_secq" }
10 | ff = { version = "0.13", features = ["derive"]}
11 | nova-snark = { git = "https://github.com/dmpierre/Nova.git", default-features = false, branch = "dev-secpsecq-031738d" }
12 | serde = "1.0.185"
13 | serde_json = "1.0.105"
--------------------------------------------------------------------------------
/apps/docs/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
--------------------------------------------------------------------------------
/apps/web/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
--------------------------------------------------------------------------------
/packages/ui/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ui",
3 | "version": "0.0.0",
4 | "main": "./index.tsx",
5 | "types": "./index.tsx",
6 | "license": "MIT",
7 | "scripts": {
8 | "lint": "eslint \"**/*.ts*\"",
9 | "generate:component": "turbo gen react-component"
10 | },
11 | "devDependencies": {
12 | "@types/react": "^18.2.0",
13 | "@types/react-dom": "^18.2.0",
14 | "eslint": "^7.32.0",
15 | "eslint-config-custom": "workspace:*",
16 | "react": "^18.2.0",
17 | "tsconfig": "workspace:*",
18 | "typescript": "^4.5.2"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/circuits/efficient_ecdsa_pubkey.circom:
--------------------------------------------------------------------------------
1 | pragma circom 2.1.2;
2 |
3 | template EfficientECDSAPubKey() {
4 |
5 | signal input s;
6 | signal input Tx;
7 | signal input Ty;
8 | signal input Ux;
9 | signal input Uy;
10 | signal input pubX;
11 | signal input pubY;
12 |
13 | component eff_ecdsa = EfficientECDSA();
14 | eff_ecdsa.s <== s;
15 | eff_ecdsa.Tx <== Tx;
16 | eff_ecdsa.Ty <== Ty;
17 | eff_ecdsa.Ux <== Ux;
18 | eff_ecdsa.Uy <== Uy;
19 |
20 | eff_ecdsa.pubKeyX === pubX;
21 | eff_ecdsa.pubKeyY === pubY;
22 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules
5 | .pnp
6 | .pnp.js
7 |
8 | # testing
9 | coverage
10 |
11 | # next.js
12 | .next/
13 | out/
14 | build
15 |
16 | # misc
17 | .DS_Store
18 | *.pem
19 |
20 | # debug
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
25 | # local env files
26 | .env
27 | .env.local
28 | .env.development.local
29 | .env.test.local
30 | .env.production.local
31 |
32 | # turbo
33 | .turbo
34 |
35 | # vercel
36 | .vercel
37 |
38 |
39 | # Added by cargo
40 | target
41 |
42 | .vscode
--------------------------------------------------------------------------------
/apps/web/next.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | reactStrictMode: true,
3 | transpilePackages: ["ui"],
4 | async headers() {
5 | return [
6 | {
7 | source: '/(.*?)',
8 | headers: [
9 | {
10 | key: 'Cross-Origin-Embedder-Policy',
11 | value: 'require-corp',
12 | },
13 | {
14 | key: 'Cross-Origin-Opener-Policy',
15 | value: 'same-origin',
16 | },
17 | {
18 | key: 'Access-Control-Allow-Origin',
19 | value: '*',
20 | }
21 | ],
22 | },
23 | ]
24 | }
25 | };
26 |
--------------------------------------------------------------------------------
/packages/tsconfig/base.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "Default",
4 | "compilerOptions": {
5 | "composite": false,
6 | "declaration": true,
7 | "declarationMap": true,
8 | "esModuleInterop": true,
9 | "forceConsistentCasingInFileNames": true,
10 | "inlineSources": false,
11 | "isolatedModules": true,
12 | "moduleResolution": "node",
13 | "noUnusedLocals": false,
14 | "noUnusedParameters": false,
15 | "preserveWatchOutput": true,
16 | "skipLibCheck": true,
17 | "strict": true
18 | },
19 | "exclude": ["node_modules"]
20 | }
21 |
--------------------------------------------------------------------------------
/packages/tsconfig/nextjs.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "Next.js",
4 | "extends": "./base.json",
5 | "compilerOptions": {
6 | "plugins": [{ "name": "next" }],
7 | "allowJs": true,
8 | "declaration": false,
9 | "declarationMap": false,
10 | "incremental": true,
11 | "jsx": "preserve",
12 | "lib": ["dom", "dom.iterable", "esnext"],
13 | "module": "esnext",
14 | "noEmit": true,
15 | "resolveJsonModule": true,
16 | "strict": false,
17 | "target": "es5"
18 | },
19 | "include": ["src", "next-env.d.ts"],
20 | "exclude": ["node_modules"]
21 | }
22 |
--------------------------------------------------------------------------------
/apps/docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docs",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev --port 3001",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "next": "^13.4.1",
13 | "react": "^18.2.0",
14 | "react-dom": "^18.2.0",
15 | "ui": "workspace:*"
16 | },
17 | "devDependencies": {
18 | "@types/node": "^17.0.12",
19 | "@types/react": "^18.0.22",
20 | "@types/react-dom": "^18.0.7",
21 | "eslint-config-custom": "workspace:*",
22 | "tsconfig": "workspace:*",
23 | "typescript": "^4.5.3"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/apps/web/workers/generate-params.worker.ts:
--------------------------------------------------------------------------------
1 | import { ctx, WEBSITE_ROOT } from "./shared";
2 |
3 | async function generateParams(filename: string) {
4 | const multiThread = await import("nova-ecdsa-browser");
5 | await multiThread.default();
6 | await multiThread.initThreadPool(navigator.hardwareConcurrency);
7 | const start = performance.now();
8 | const data = await multiThread.generate_params(WEBSITE_ROOT, filename);
9 | const end = performance.now();
10 | ctx.postMessage({
11 | data: data,
12 | time: end - start
13 | });
14 | }
15 |
16 | ctx.addEventListener("message", async (event) => {
17 | generateParams(event.data.filename);
18 | });
--------------------------------------------------------------------------------
/apps/web/workers/verify.worker.ts:
--------------------------------------------------------------------------------
1 | import { ctx } from "./shared";
2 |
3 | async function verify(iteration_count: number, pp: string, proof: string, sigs: string) {
4 | const multiThread = await import("nova-ecdsa-browser");
5 | await multiThread.default();
6 | await multiThread.initThreadPool(navigator.hardwareConcurrency);
7 | const start = performance.now();
8 | const data = await multiThread.verify_compressed_proof(iteration_count, pp, proof, sigs);
9 | const end = performance.now();
10 | ctx.postMessage({
11 | data: data,
12 | time: end - start
13 | });
14 | }
15 |
16 | ctx.addEventListener("message", async (event) => {
17 | verify(event.data.iteration_count, event.data.pp, event.data.proof, event.data.sigs);
18 | });
19 |
--------------------------------------------------------------------------------
/packages/ui/Containers.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | export const MainContainer: React.FC<{ children: React.ReactNode }> = ({ children }) => {
4 | return (
5 |
6 |
7 | {children}
8 |
9 |
10 | )
11 | }
12 |
13 | export const MainNovaContainer: React.FC<{ children: React.ReactNode }> = ({ children }) => {
14 | return (
15 |
16 | {children}
17 |
18 | )
19 | }
20 |
21 | export const NovaContainer: React.FC<{ children: React.ReactNode }> = ({ children }) => {
22 | return (
23 |
24 | {children}
25 |
26 | )
27 | }
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/circuits/main.circom:
--------------------------------------------------------------------------------
1 | pragma circom 2.1.2;
2 |
3 | // circomlib: https://github.com/iden3/circomlib/tree/master
4 | include "comparators.circom";
5 | include "gates.circom";
6 | include "mux1.circom";
7 | include "bitify.circom";
8 | include "comparators.circom";
9 | include "gates.circom";
10 | include "bitify.circom";
11 |
12 | // spartan-ecdsa-monorepo: https://github.com/personaelabs/spartan-ecdsa
13 | // eff_ecdsa: https://github.com/personaelabs/spartan-ecdsa/tree/main/packages/circuits/eff_ecdsa_membership
14 | // you will need to remove 'include' statements there to avoid duplicate symbol errors with circomlib
15 | include "eff_ecdsa.circom";
16 |
17 | include "batch_efficient_ecdsa_pubkey.circom";
18 |
19 | // 10 is the batch size here. Change it to whatever you want.
20 | component main { public [ step_in ] } = BatchEfficientECDSAPubKey(10);
21 |
--------------------------------------------------------------------------------
/apps/web/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint",
10 | "wasm:build": "cd ../../nova-ecdsa-browser && wasm-pack build --target web --out-dir ../packages/nova-ecdsa-browser-pkg"
11 | },
12 | "dependencies": {
13 | "comlink": "^4.4.1",
14 | "next": "^13.4.1",
15 | "nova-ecdsa-browser": "workspace:*",
16 | "react": "^18.2.0",
17 | "react-dom": "^18.2.0",
18 | "ui": "workspace:*"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^17.0.12",
22 | "@types/react": "^18.0.22",
23 | "@types/react-dom": "^18.0.7",
24 | "autoprefixer": "^10.4.15",
25 | "eslint-config-custom": "workspace:*",
26 | "tailwindcss": "^3.3.3",
27 | "tsconfig": "workspace:*",
28 | "typescript": "^4.5.3"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/apps/web/workers/generate-proof.worker.ts:
--------------------------------------------------------------------------------
1 | import { ctx, WEBSITE_ROOT } from "./shared";
2 |
3 | async function generateProof(filename: string, iteration_count: number, per_iteration_count: number, pp: string, sigs: string) {
4 | const multiThread = await import("nova-ecdsa-browser");
5 | await multiThread.default();
6 | await multiThread.initThreadPool(navigator.hardwareConcurrency);
7 | const start = performance.now();
8 | const data = await multiThread.generate_proof(
9 | WEBSITE_ROOT, filename,
10 | iteration_count, per_iteration_count,
11 | pp, sigs
12 | );
13 | const end = performance.now();
14 | ctx.postMessage({
15 | data: data,
16 | time: end - start
17 | });
18 | }
19 |
20 | ctx.addEventListener("message", async (event) => {
21 | generateProof(
22 | event.data.filename,
23 | event.data.iteration_count, event.data.per_iteration_count,
24 | event.data.pp, event.data.sigs
25 | );
26 | });
--------------------------------------------------------------------------------
/packages/ui/turbo/generators/config.ts:
--------------------------------------------------------------------------------
1 | import { PlopTypes } from "@turbo/gen";
2 |
3 | // Learn more about Turborepo Generators at https://turbo.build/repo/docs/core-concepts/monorepos/code-generation
4 |
5 | export default function generator(plop: PlopTypes.NodePlopAPI): void {
6 | // A simple generator to add a new React component to the internal UI library
7 | plop.setGenerator("react-component", {
8 | description: "Adds a new react component",
9 | prompts: [
10 | {
11 | type: "input",
12 | name: "name",
13 | message: "What is the name of the component?",
14 | },
15 | ],
16 | actions: [
17 | {
18 | type: "add",
19 | path: "{{pascalCase name}}.tsx",
20 | templateFile: "templates/component.hbs",
21 | },
22 | {
23 | type: "append",
24 | path: "index.tsx",
25 | pattern: /(\/\/ component exports)/g,
26 | template: 'export * from "./{{pascalCase name}}";',
27 | },
28 | ],
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/packages/ui/Description.tsx:
--------------------------------------------------------------------------------
1 | import React from "react"
2 |
3 | export const Description: React.FC<{ total: number, type: string, iteration_count: number, per_iteration_count: number }> = ({ total, type, iteration_count, per_iteration_count }) => {
4 | return (
5 |
6 |
7 | This is an app aggregating {total} ECDSA signatures - {iteration_count} folding steps, {per_iteration_count} signatures per step - over secp/secq using Nova. You can test it to generate and subsequently verify a compressed Nova SNARK.
8 |
9 | Read here on how to leverage Nova within your zk app.
10 | And here on how we did this along with some benchmarks.
11 |
12 |
13 | )
14 | };
--------------------------------------------------------------------------------
/nova-ecdsa-browser/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "nova-ecdsa-browser"
3 | version = "0.1.0"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | [dependencies]
9 | nova-scotia = { git = "https://github.com/dmpierre/Nova-Scotia.git", branch = "secp_secq" }
10 | ff = { version = "0.13", features = ["derive"]}
11 | nova-snark = { git = "https://github.com/dmpierre/Nova.git", default-features = false, branch = "dev-secpsecq-031738d" }
12 | serde = "1.0.185"
13 | serde_json = "1.0.105"
14 | num-bigint = { version = "0.4", features = ["serde", "rand"] }
15 | num-traits = "0.2.15"
16 |
17 | [target.'cfg(target_family = "wasm")'.dependencies]
18 | getrandom = { version = "0.2", features = ["js"]}
19 | wasm-bindgen = { version = "0.2.81", features = ["serde-serialize"]}
20 | console_error_panic_hook = "0.1.7"
21 | rayon = "1.5"
22 | wasm-bindgen-rayon = { version = "1.0"}
23 | web-sys = { version = "0.3", features = ["Request", "Window", "Response"] }
24 | wasm-bindgen-futures = "0.4"
25 | js-sys = "0.3"
26 |
27 | [lib]
28 | crate-type = ["cdylib", "rlib"]
--------------------------------------------------------------------------------
/apps/web/hooks/useGenerateParams.ts:
--------------------------------------------------------------------------------
1 | import { useRef, useEffect, useCallback, useState } from "react";
2 |
3 | export const useGenerateParams = (filename: string) => {
4 | const [pp, setpp] = useState({ data: "" });
5 | const [time, settime] = useState();
6 | const [isGenerating, setisGenerating] = useState(false);
7 |
8 | const worker = useRef();
9 |
10 | useEffect(() => {
11 | worker.current = new Worker(new URL("../workers/generate-params.worker.ts", import.meta.url));
12 | worker.current.onmessage = (e) => {
13 | console.log("Public params generated!");
14 | setisGenerating(false);
15 | setpp(e.data);
16 | settime(e.data.time);
17 | };
18 | return () => {
19 | worker.current?.terminate();
20 | };
21 | }, []);
22 |
23 | const generateParams = useCallback(async () => {
24 | console.log("Starting public params generation...");
25 | setisGenerating(true);
26 | worker.current?.postMessage({
27 | filename: filename
28 | });
29 | }, []);
30 |
31 | return { pp, generateParams, isGenerating, time };
32 | };
--------------------------------------------------------------------------------
/apps/web/hooks/useFolding.ts:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 |
3 | export const useFoldingParams = () => {
4 | // our folding will be different if on mobile vs on desktop
5 | // hook to detect whether running on mobile phones
6 | const initialWidth = typeof window !== "undefined" ? window.innerWidth : 0;
7 | const [width, setWidth] = useState(initialWidth);
8 |
9 | function handleWindowSizeChange() {
10 | setWidth(window.innerWidth);
11 | }
12 |
13 | useEffect(() => {
14 | window.addEventListener('resize', handleWindowSizeChange);
15 | return () => {
16 | window.removeEventListener('resize', handleWindowSizeChange);
17 | }
18 | }, []);
19 |
20 | const isMobile = width <= 730;
21 | const folding = isMobile ?
22 | {
23 | filename: "agg_ecdsa",
24 | iteration_count: 30,
25 | per_iteration_count: 10,
26 | total: 300,
27 | type: "mobile"
28 | } :
29 | {
30 | filename: "agg_ecdsa",
31 | iteration_count: 30,
32 | per_iteration_count: 10,
33 | total: 300,
34 | type: "desktop"
35 | }
36 | ;
37 |
38 | return folding;
39 | }
--------------------------------------------------------------------------------
/nova-ecdsa/src/data/circuits/batch_efficient_ecdsa_pubkey.circom:
--------------------------------------------------------------------------------
1 | include "./efficient_ecdsa_pubkey.circom";
2 |
3 | template BatchEfficientECDSAPubKey(N_SIGS) {
4 |
5 | signal input step_in[7];
6 | signal input signatures[N_SIGS][7];
7 | signal output step_out[7];
8 |
9 | component sigsChecker[N_SIGS];
10 |
11 | sigsChecker[0] = EfficientECDSAPubKey();
12 | sigsChecker[0].s <== step_in[0];
13 | sigsChecker[0].Tx <== step_in[1];
14 | sigsChecker[0].Ty <== step_in[2];
15 | sigsChecker[0].Ux <== step_in[3];
16 | sigsChecker[0].Uy <== step_in[4];
17 | sigsChecker[0].pubX <== step_in[5];
18 | sigsChecker[0].pubY <== step_in[6];
19 |
20 |
21 | for (var i = 1; i < N_SIGS; i++) {
22 |
23 | sigsChecker[i] = EfficientECDSAPubKey();
24 | sigsChecker[i].s <== signatures[i - 1][0];
25 | sigsChecker[i].Tx <== signatures[i - 1][1];
26 | sigsChecker[i].Ty <== signatures[i - 1][2];
27 | sigsChecker[i].Ux <== signatures[i - 1][3];
28 | sigsChecker[i].Uy <== signatures[i - 1][4];
29 | sigsChecker[i].pubX <== signatures[i - 1][5];
30 | sigsChecker[i].pubY <== signatures[i - 1][6];
31 |
32 | }
33 |
34 | for (var i = 0; i < 7; i++) {
35 | step_out[i] <== signatures[N_SIGS - 1][i];
36 | }
37 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |  
2 |
3 | # In-browser signature aggregation with Nova
4 |
5 | There are two accompanying write-ups to this project. The [first one](https://hackmd.io/KxG-BH1nQPGpdRxz6M50hw) targets developers interested in developing an app using nova and nova-scotia. The [second one](https://hackmd.io/mArMuUx5TC2LEcYecc741Q?view) is a tad more technical, it features how we implement the secp/secq cycle in nova along with some benchmarks.
6 |
7 | This is a monorepo demonstrating a working secp256k1 signature aggregation circuit using Nova. This work aims to show:
8 |
9 | 1. How to leverage nova for zk/snark app developers. Since it features a rust codebase, we can easily port folding circuits to `wasm` and get in-browser functionality.
10 |
11 | 2. Demonstrate the relevancy of Nova in terms of performances. We compiled some benchmarks [here](https://hackmd.io/mArMuUx5TC2LEcYecc741Q#Benchmark). According to our estimates, this demo web app proving time for 300 secp signatures should oscillate from 2 to 6 signatures per second in the browser.
12 |
13 | # How to run
14 |
15 | You can run this app locally:
16 |
17 | ```sh
18 | $ git clone git@github.com:dmpierre/nova-browser-ecdsa.git
19 | $ cd nova-browser-ecdsa/
20 | $ pnpm i && pnpm dev
21 | ```
22 |
23 | Navigate to [localhost](http://localhost:3000/) and you should see the app running.
--------------------------------------------------------------------------------
/apps/web/hooks/useProve.ts:
--------------------------------------------------------------------------------
1 | import { useRef, useEffect, useCallback, useState } from "react";
2 | import sigsJSON from "../public/batch.json";
3 | import { FoldingParams } from "../types/types";
4 |
5 | export const useProve = (foldingParams: FoldingParams, pp: string) => {
6 | const [proof, setproof] = useState({ data: "" });
7 | const worker = useRef();
8 | const [time, settime] = useState(0);
9 | const [isGenerating, setisGenerating] = useState(false);
10 |
11 | useEffect(() => {
12 | worker.current = new Worker(new URL("../workers/generate-proof.worker.ts", import.meta.url));
13 | worker.current.onmessage = (e) => {
14 | console.log("CompressedSNARK generated!");
15 | setisGenerating(false);
16 | setproof(e.data);
17 | settime(e.data.time);
18 | };
19 | return () => {
20 | worker.current?.terminate();
21 | };
22 | }, []);
23 |
24 | const generateProof = useCallback(async () => {
25 | setisGenerating(true);
26 | worker.current?.postMessage({
27 | pp: pp,
28 | sigs: JSON.stringify(sigsJSON),
29 | filename: foldingParams.filename,
30 | iteration_count: foldingParams.iteration_count,
31 | per_iteration_count: foldingParams.per_iteration_count
32 | });
33 | }, [pp]);
34 |
35 | return { proof, generateProof, isGenerating, time };
36 | };
--------------------------------------------------------------------------------
/apps/web/hooks/useVerify.ts:
--------------------------------------------------------------------------------
1 | import { useRef, useEffect, useCallback, useState } from "react";
2 | import sigsJSON from "../public/batch.json";
3 | import { FoldingParams } from "../types/types";
4 |
5 | export const useVerify = (foldingParams: FoldingParams, pp: string, proof: string) => {
6 | const worker = useRef();
7 | const [verify, setverify] = useState<{ data: boolean | undefined }>({ data: undefined });
8 | const [time, settime] = useState();
9 | const [isGenerating, setisGenerating] = useState(false);
10 |
11 | useEffect(() => {
12 | worker.current = new Worker(new URL("../workers/verify.worker.ts", import.meta.url));
13 | worker.current.onmessage = (e) => {
14 | console.log("CompressedSNARK verified!");
15 | setisGenerating(false);
16 | setverify(e.data);
17 | settime(e.data.time);
18 | };
19 | return () => {
20 | worker.current?.terminate();
21 | };
22 | }, []);
23 |
24 | const generateVerify = useCallback(async () => {
25 | console.log("Starting compressedSNARK verification...");
26 | setisGenerating(true);
27 | worker.current?.postMessage({
28 | pp: pp,
29 | sigs: JSON.stringify(sigsJSON),
30 | proof: proof,
31 | iteration_count: foldingParams.iteration_count,
32 | });
33 | }, [pp, proof]);
34 |
35 | return { verify, generateVerify, isGenerating, time };
36 | };
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/nova_ecdsa_browser_bg.wasm.d.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable */
2 | /* eslint-disable */
3 | export function __wbg_effsig_free(a: number): void;
4 | export function generate_params(a: number, b: number, c: number, d: number): number;
5 | export function generate_proof(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): number;
6 | export function verify_compressed_proof(a: number, b: number, c: number, d: number, e: number, f: number, g: number): number;
7 | export function init_panic_hook(): void;
8 | export function __wbg_wbg_rayon_poolbuilder_free(a: number): void;
9 | export function wbg_rayon_poolbuilder_numThreads(a: number): number;
10 | export function wbg_rayon_poolbuilder_receiver(a: number): number;
11 | export function wbg_rayon_poolbuilder_build(a: number): void;
12 | export function wbg_rayon_start_worker(a: number): void;
13 | export function initThreadPool(a: number): number;
14 | export function read_file(a: number, b: number): number;
15 | export function generate_witness_browser(a: number, b: number, c: number, d: number): number;
16 | export const memory: WebAssembly.Memory;
17 | export const __wbindgen_export_1: WebAssembly.Table;
18 | export function _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h6ae7b9308d5b8965(a: number, b: number, c: number): void;
19 | export function __wbindgen_malloc(a: number, b: number): number;
20 | export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number;
21 | export function __wbindgen_exn_store(a: number): void;
22 | export function wasm_bindgen__convert__closures__invoke2_mut__h79d8b12638ec1af1(a: number, b: number, c: number, d: number): void;
23 | export function __wbindgen_free(a: number, b: number, c: number): void;
24 | export function __wbindgen_thread_destroy(a: number, b: number): void;
25 | export function __wbindgen_start(): void;
26 |
--------------------------------------------------------------------------------
/packages/scripts/generateSampleSignature.ts:
--------------------------------------------------------------------------------
1 | import { computeEffEcdsaPubInput } from "@personaelabs/spartan-ecdsa"
2 | import { ecsign } from "@ethereumjs/util";
3 | import { ec } from "elliptic";
4 | import crypto from "crypto";
5 | import fs from "fs";
6 |
7 | (BigInt.prototype as any).toJSON = function () {
8 | return this.toString();
9 | };
10 |
11 | const main = () => {
12 | /*
13 | * This is a script for generating sample signatures for the sig_ecdsa circuits.
14 | * Useful for generating batches of random signatures when needed.
15 | */
16 | const numSignatures = parseInt(process.argv[2]);
17 | if (isNaN(numSignatures)) {
18 | throw new Error("Number of signatures must be a number");
19 | }
20 | if (numSignatures <= 1) {
21 | throw new Error("Number of signatures must be greater than 1");
22 | }
23 | const curve = new ec("secp256k1");
24 | const privKey = Buffer.from(
25 | "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
26 | "hex"
27 | );
28 | const keypair = curve.keyFromPrivate(privKey)
29 | const point = keypair.getPublic();
30 | const inputs: any[] = [];
31 |
32 | for (let i = 0; i < numSignatures; i++) {
33 | const msg = crypto.randomBytes(32);
34 | const { v, r: _r, s } = ecsign(msg, privKey);
35 | const r = BigInt("0x" + _r.toString("hex"));
36 | const circuitPubInput = computeEffEcdsaPubInput(r, v, msg);
37 | const input = [
38 | BigInt("0x" + s.toString("hex")),
39 | circuitPubInput.Tx,
40 | circuitPubInput.Ty,
41 | circuitPubInput.Ux,
42 | circuitPubInput.Uy,
43 | point.getX().toString(),
44 | point.getY().toString(),
45 | ]
46 | inputs.push(input);
47 | }
48 |
49 | const fileOutput = {
50 | "start_pub_input": inputs[0],
51 | "signatures": inputs.slice(1, inputs.length)
52 | };
53 |
54 | fs.writeFileSync(
55 | "out/sig_ecdsa_batch_sample.json",
56 | JSON.stringify(fileOutput)
57 | );
58 | };
59 |
60 | main();
--------------------------------------------------------------------------------
/apps/web/app/page.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Header, NovaGenerateParams, NovaGenerateProof, NovaVerify, MainContainer } from "ui";
4 | import { useGenerateParams } from "../hooks/useGenerateParams";
5 | import { useProve } from "../hooks/useProve";
6 | import { useVerify } from "../hooks/useVerify";
7 | import { useFoldingParams } from "../hooks/useFolding";
8 | import Image from "next/image";
9 | import "ui/styles.css";
10 | import dynamic from "next/dynamic";
11 |
12 | const Description = dynamic(() => import('ui/Description').then((mod) => mod.Description), { ssr: false })
13 | const MainNovaContainer = dynamic(() => import('ui/Containers').then((mod) => mod.MainNovaContainer), { ssr: false })
14 |
15 | export default function Page() {
16 |
17 | const foldingParams = useFoldingParams();
18 | const { pp, generateParams, isGenerating: isGeneratingParams, time: paramsTime } = useGenerateParams(foldingParams.filename);
19 | const { proof, generateProof, isGenerating: isGeneratingProof, time: provingTime } = useProve(foldingParams, pp.data);
20 | const { verify, generateVerify, isGenerating: isGeneratingVerify, time: verifyTime } = useVerify(foldingParams, pp.data, proof.data);
21 |
22 | return (
23 |
24 |
25 |
30 |
36 |
37 | {
38 | foldingParams.type === "mobile" ?
39 | Currently desktop only!
40 | :
41 | <>
42 |
43 | {
44 | pp.data ?
45 |
46 | :
47 | <>>
48 | }
49 | {
50 | proof.data ?
51 |
52 | :
53 | <>>
54 | }
55 | >
56 | }
57 |
58 |
59 | );
60 | }
61 |
--------------------------------------------------------------------------------
/packages/ui/Nova.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import { Button } from './Button';
3 | import { NovaContainer } from './Containers';
4 |
5 | const formatForDisplay = (data: string) => {
6 | return `${data.slice(1, 20)} [...] ${data.slice(data.length - 20, data.length - 1)}}`;
7 | };
8 |
9 | const formatTime = (time: number) => {
10 | return (time / 1000).toFixed(2);
11 | }
12 |
13 | interface NovaProps {
14 | data: string | boolean | undefined;
15 | time: number;
16 | isGenerating: boolean;
17 | }
18 |
19 | interface NovaGenerateParams extends NovaProps {
20 | generateParams: () => Promise;
21 | }
22 |
23 | interface NovaGenerateProofProps extends NovaProps {
24 | generateProof: () => Promise;
25 | }
26 |
27 | interface NovaVerifyProps extends NovaProps {
28 | generateVerify: () => Promise;
29 | }
30 |
31 | export const NovaGenerateParams: React.FC = ({ data, isGenerating, time, generateParams }) => {
32 | return (
33 |
34 | Generate Public Parameters:
35 | {
36 | isGenerating ?
37 | Generating...
38 | :
39 | data ?
40 |
41 |
{formatForDisplay(`${data}`)}
42 |
Generation time: {formatTime(time)}s
43 |
44 | :
45 |
46 | }
47 |
48 | )
49 | };
50 |
51 | export const NovaGenerateProof: React.FC = ({ data, isGenerating, generateProof, time }) => {
52 | return (
53 |
54 | Generate Proof:
55 | {
56 | isGenerating ?
57 | Generating...
58 | :
59 | data ?
60 | <>
61 | {formatForDisplay(`${data}`)}
62 | Generation time: {formatTime(time)}s
63 | (~ {(300 / (time / 1000)).toFixed(2)} signatures/second, including compressed SPARTAN proof generation.)
64 | >
65 | :
66 |
67 | }
68 |
69 | )
70 | }
71 |
72 | export const NovaVerify: React.FC = ({ data, isGenerating, generateVerify, time }) => {
73 | return (
74 |
75 | Verify Proof:
76 | {
77 | isGenerating ?
78 | Verifying...
79 | :
80 | data != undefined ?
81 | <>
82 | Verified as: {`${data}`}
83 | Verification time: {formatTime(time)}s
84 | >
85 | :
86 |
87 | }
88 | NovaContainer>
89 |
90 | )
91 | }
92 |
--------------------------------------------------------------------------------
/nova-ecdsa/src/main.rs:
--------------------------------------------------------------------------------
1 | use std::{collections::HashMap, env::current_dir, time::{Instant, Duration}};
2 |
3 | use nova_scotia::{
4 | circom::reader::load_r1cs, create_public_params, create_recursive_circuit, FileLocation,
5 | F1, G2
6 | };
7 | use ff::PrimeField;
8 | use nova_snark::traits::Group;
9 | use serde::{Deserialize, Serialize};
10 | use serde_json::json;
11 |
12 | #[derive(Serialize, Deserialize)]
13 | #[allow(non_snake_case)]
14 | struct EffSig {
15 | start_pub_input: [String; 7],
16 | signatures: Vec<[String; 7]>,
17 | }
18 |
19 | fn run(per_iteration_count: usize, r1cs_path: String, wasm_path: String) -> (Duration, Duration) {
20 |
21 | let root = current_dir().unwrap();
22 | let circuit_file = root.join(r1cs_path);
23 | let r1cs = load_r1cs(&FileLocation::PathBuf(circuit_file));
24 | let witness_generator_wasm = root.join(wasm_path);
25 | let sigs: EffSig = serde_json::from_str(include_str!("data/batch.json"))
26 | .unwrap();
27 | let start_public_input = vec![
28 | F1::from_str_vartime(&sigs.start_pub_input[0]).unwrap(),
29 | F1::from_str_vartime(&sigs.start_pub_input[1]).unwrap(),
30 | F1::from_str_vartime(&sigs.start_pub_input[2]).unwrap(),
31 | F1::from_str_vartime(&sigs.start_pub_input[3]).unwrap(),
32 | F1::from_str_vartime(&sigs.start_pub_input[4]).unwrap(),
33 | F1::from_str_vartime(&sigs.start_pub_input[5]).unwrap(),
34 | F1::from_str_vartime(&sigs.start_pub_input[6]).unwrap(),
35 | ];
36 |
37 | let mut private_inputs = Vec::new();
38 | let n_sigs = sigs.signatures.len();
39 | println!("n_sigs: {}", n_sigs);
40 | let iteration_count = n_sigs / per_iteration_count;
41 | for i in 0..iteration_count {
42 | let mut private_input = HashMap::new();
43 | private_input.insert(
44 | "signatures".to_string(),
45 | json!(
46 | sigs.signatures
47 | [i * per_iteration_count..i * per_iteration_count + per_iteration_count]
48 | ),
49 | );
50 | private_inputs.push(private_input);
51 | }
52 | let pp = create_public_params(r1cs.clone());
53 | println!("Creating a RecursiveSNARK...");
54 | let start = Instant::now();
55 | let recursive_snark = create_recursive_circuit(
56 | FileLocation::PathBuf(witness_generator_wasm),
57 | r1cs,
58 | private_inputs,
59 | start_public_input.clone(),
60 | &pp,
61 | )
62 | .unwrap();
63 | let prover_time = start.elapsed();
64 | println!("RecursiveSNARK creation took {:?}", start.elapsed());
65 |
66 | let z0_secondary = vec![::Scalar::zero()];
67 |
68 | // verify the recursive SNARK
69 | println!("Verifying a RecursiveSNARK...");
70 | let start = Instant::now();
71 | let res = recursive_snark.verify(
72 | &pp,
73 | iteration_count,
74 | start_public_input.clone(),
75 | z0_secondary.clone(),
76 | );
77 | println!(
78 | "RecursiveSNARK::verify: {:?}, took {:?}",
79 | res,
80 | start.elapsed()
81 | );
82 | let verifier_time = start.elapsed();
83 | assert!(res.is_ok());
84 | (prover_time, verifier_time)
85 |
86 | }
87 |
88 | fn main() {
89 | let circuit_filepath = format!("src/data/agg_ecdsa.r1cs");
90 | let witness_gen_filepath = format!("src/data/agg_ecdsa.wasm");
91 | run(10, circuit_filepath, witness_gen_filepath);
92 | }
93 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/snippets/wasm-bindgen-rayon-7afa899f36665473/src/workerHelpers.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright 2021 Google Inc. All Rights Reserved.
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | * Unless required by applicable law or agreed to in writing, software
8 | * distributed under the License is distributed on an "AS IS" BASIS,
9 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 | * See the License for the specific language governing permissions and
11 | * limitations under the License.
12 | */
13 |
14 | // Note: we use `wasm_bindgen_worker_`-prefixed message types to make sure
15 | // we can handle bundling into other files, which might happen to have their
16 | // own `postMessage`/`onmessage` communication channels.
17 | //
18 | // If we didn't take that into the account, we could send much simpler signals
19 | // like just `0` or whatever, but the code would be less resilient.
20 |
21 | function waitForMsgType(target, type) {
22 | return new Promise(resolve => {
23 | target.addEventListener('message', function onMsg({ data }) {
24 | if (data == null || data.type !== type) return;
25 | target.removeEventListener('message', onMsg);
26 | resolve(data);
27 | });
28 | });
29 | }
30 |
31 | waitForMsgType(self, 'wasm_bindgen_worker_init').then(async data => {
32 | // # Note 1
33 | // Our JS should have been generated in
34 | // `[out-dir]/snippets/wasm-bindgen-rayon-[hash]/workerHelpers.js`,
35 | // resolve the main module via `../../..`.
36 | //
37 | // This might need updating if the generated structure changes on wasm-bindgen
38 | // side ever in the future, but works well with bundlers today. The whole
39 | // point of this crate, after all, is to abstract away unstable features
40 | // and temporary bugs so that you don't need to deal with them in your code.
41 | //
42 | // # Note 2
43 | // This could be a regular import, but then some bundlers complain about
44 | // circular deps.
45 | //
46 | // Dynamic import could be cheap if this file was inlined into the parent,
47 | // which would require us just using `../../..` in `new Worker` below,
48 | // but that doesn't work because wasm-pack unconditionally adds
49 | // "sideEffects":false (see below).
50 | //
51 | // OTOH, even though it can't be inlined, it should be still reasonably
52 | // cheap since the requested file is already in cache (it was loaded by
53 | // the main thread).
54 | const pkg = await import('../../..');
55 | await pkg.default(data.module, data.memory);
56 | postMessage({ type: 'wasm_bindgen_worker_ready' });
57 | pkg.wbg_rayon_start_worker(data.receiver);
58 | });
59 |
60 | // Note: this is never used, but necessary to prevent a bug in Firefox
61 | // (https://bugzilla.mozilla.org/show_bug.cgi?id=1702191) where it collects
62 | // Web Workers that have a shared WebAssembly memory with the main thread,
63 | // but are not explicitly rooted via a `Worker` instance.
64 | //
65 | // By storing them in a variable, we can keep `Worker` objects around and
66 | // prevent them from getting GC-d.
67 | let _workers;
68 |
69 | export async function startWorkers(module, memory, builder) {
70 | const workerInit = {
71 | type: 'wasm_bindgen_worker_init',
72 | module,
73 | memory,
74 | receiver: builder.receiver()
75 | };
76 |
77 | _workers = await Promise.all(
78 | Array.from({ length: builder.numThreads() }, async () => {
79 | // Self-spawn into a new Worker.
80 | //
81 | // TODO: while `new URL('...', import.meta.url) becomes a semi-standard
82 | // way to get asset URLs relative to the module across various bundlers
83 | // and browser, ideally we should switch to `import.meta.resolve`
84 | // once it becomes a standard.
85 | //
86 | // Note: we could use `../../..` as the URL here to inline workerHelpers.js
87 | // into the parent entry instead of creating another split point -
88 | // this would be preferable from optimization perspective -
89 | // however, Webpack then eliminates all message handler code
90 | // because wasm-pack produces "sideEffects":false in package.json
91 | // unconditionally.
92 | //
93 | // The only way to work around that is to have side effect code
94 | // in an entry point such as Worker file itself.
95 | const worker = new Worker(new URL('./workerHelpers.js', import.meta.url), {
96 | type: 'module'
97 | });
98 | worker.postMessage(workerInit);
99 | await waitForMsgType(worker, 'wasm_bindgen_worker_ready');
100 | return worker;
101 | })
102 | );
103 | builder.build();
104 | }
105 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/nova_ecdsa_browser.d.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable */
2 | /* eslint-disable */
3 | /**
4 | */
5 | export function init_panic_hook(): void;
6 | /**
7 | * @param {string} website_root
8 | * @param {string} file_name
9 | * @returns {Promise}
10 | */
11 | export function generate_params(website_root: string, file_name: string): Promise;
12 | /**
13 | * @param {string} website_root
14 | * @param {string} file_name
15 | * @param {number} iteration_count
16 | * @param {number} per_iteration_count
17 | * @param {string} pp_str
18 | * @param {string} sigs
19 | * @returns {Promise}
20 | */
21 | export function generate_proof(website_root: string, file_name: string, iteration_count: number, per_iteration_count: number, pp_str: string, sigs: string): Promise;
22 | /**
23 | * @param {number} iteration_count
24 | * @param {string} pp_str
25 | * @param {string} proof_str
26 | * @param {string} sigs
27 | * @returns {Promise}
28 | */
29 | export function verify_compressed_proof(iteration_count: number, pp_str: string, proof_str: string, sigs: string): Promise;
30 | /**
31 | * @param {string} path
32 | * @returns {Promise}
33 | */
34 | export function read_file(path: string): Promise;
35 | /**
36 | * @param {string} input_json_string
37 | * @param {string} wasm_file
38 | * @returns {Promise}
39 | */
40 | export function generate_witness_browser(input_json_string: string, wasm_file: string): Promise;
41 | /**
42 | * @param {number} num_threads
43 | * @returns {Promise}
44 | */
45 | export function initThreadPool(num_threads: number): Promise;
46 | /**
47 | * @param {number} receiver
48 | */
49 | export function wbg_rayon_start_worker(receiver: number): void;
50 | /**
51 | */
52 | export class EffSig {
53 | free(): void;
54 | }
55 | /**
56 | */
57 | export class wbg_rayon_PoolBuilder {
58 | free(): void;
59 | /**
60 | * @returns {number}
61 | */
62 | numThreads(): number;
63 | /**
64 | * @returns {number}
65 | */
66 | receiver(): number;
67 | /**
68 | */
69 | build(): void;
70 | }
71 |
72 | export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
73 |
74 | export interface InitOutput {
75 | readonly __wbg_effsig_free: (a: number) => void;
76 | readonly generate_params: (a: number, b: number, c: number, d: number) => number;
77 | readonly generate_proof: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number;
78 | readonly verify_compressed_proof: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
79 | readonly init_panic_hook: () => void;
80 | readonly __wbg_wbg_rayon_poolbuilder_free: (a: number) => void;
81 | readonly wbg_rayon_poolbuilder_numThreads: (a: number) => number;
82 | readonly wbg_rayon_poolbuilder_receiver: (a: number) => number;
83 | readonly wbg_rayon_poolbuilder_build: (a: number) => void;
84 | readonly wbg_rayon_start_worker: (a: number) => void;
85 | readonly initThreadPool: (a: number) => number;
86 | readonly read_file: (a: number, b: number) => number;
87 | readonly generate_witness_browser: (a: number, b: number, c: number, d: number) => number;
88 | readonly memory: WebAssembly.Memory;
89 | readonly __wbindgen_export_1: WebAssembly.Table;
90 | readonly _dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h6ae7b9308d5b8965: (a: number, b: number, c: number) => void;
91 | readonly __wbindgen_malloc: (a: number, b: number) => number;
92 | readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
93 | readonly __wbindgen_exn_store: (a: number) => void;
94 | readonly wasm_bindgen__convert__closures__invoke2_mut__h79d8b12638ec1af1: (a: number, b: number, c: number, d: number) => void;
95 | readonly __wbindgen_free: (a: number, b: number, c: number) => void;
96 | readonly __wbindgen_thread_destroy: (a: number, b: number) => void;
97 | readonly __wbindgen_start: () => void;
98 | }
99 |
100 | export type SyncInitInput = BufferSource | WebAssembly.Module;
101 | /**
102 | * Instantiates the given `module`, which can either be bytes or
103 | * a precompiled `WebAssembly.Module`.
104 | *
105 | * @param {SyncInitInput} module
106 | * @param {WebAssembly.Memory} maybe_memory
107 | *
108 | * @returns {InitOutput}
109 | */
110 | export function initSync(module: SyncInitInput, maybe_memory?: WebAssembly.Memory): InitOutput;
111 |
112 | /**
113 | * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
114 | * for everything else, calls `WebAssembly.instantiate` directly.
115 | *
116 | * @param {InitInput | Promise} module_or_path
117 | * @param {WebAssembly.Memory} maybe_memory
118 | *
119 | * @returns {Promise}
120 | */
121 | export default function __wbg_init (module_or_path?: InitInput | Promise, maybe_memory?: WebAssembly.Memory): Promise;
122 |
--------------------------------------------------------------------------------
/nova-ecdsa-browser/src/wasm.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 |
3 | use nova_scotia::{
4 | circom::{circuit::CircomCircuit, reader::load_r1cs},
5 | create_public_params, create_recursive_circuit, F1, F2, G1, G2, S1, S2,
6 | };
7 | use nova_scotia::{FileLocation, EE1, EE2};
8 | use nova_snark::{
9 | spartan::RelaxedR1CSSNARK,
10 | traits::{circuit::TrivialTestCircuit, Group},
11 | CompressedSNARK, PublicParams,
12 | };
13 | use serde::{Deserialize, Serialize};
14 | use serde_json::json;
15 | use wasm_bindgen::prelude::*;
16 |
17 | use ff::PrimeField;
18 |
19 | pub use wasm_bindgen_rayon::init_thread_pool;
20 |
21 | #[wasm_bindgen]
22 | extern "C" {
23 | // Use `js_namespace` here to bind `console.log(..)` instead of just
24 | // `log(..)`
25 | #[wasm_bindgen(js_namespace = console)]
26 | fn log(s: &str);
27 |
28 | // The `console.log` is quite polymorphic, so we can bind it with multiple
29 | // signatures. Note that we need to use `js_name` to ensure we always call
30 | // `log` in JS.
31 | #[wasm_bindgen(js_namespace = console, js_name = log)]
32 | fn log_u32(a: u32);
33 |
34 | // Multiple arguments too!
35 | #[wasm_bindgen(js_namespace = console, js_name = log)]
36 | fn log_many(a: &str, b: &str);
37 | }
38 |
39 | macro_rules! console_log {
40 | // Note that this is using the `log` function imported above during
41 | // `bare_bones`
42 | ($($t:tt)*) => (log(&format_args!($($t)*).to_string()))
43 | }
44 |
45 | extern crate console_error_panic_hook;
46 |
47 | #[wasm_bindgen]
48 | #[derive(Serialize, Deserialize)]
49 | pub struct EffSig {
50 | start_pub_input: [String; 7],
51 | signatures: Vec<[String; 7]>,
52 | }
53 |
54 | #[wasm_bindgen]
55 | pub fn init_panic_hook() {
56 | console_error_panic_hook::set_once();
57 | }
58 |
59 | #[wasm_bindgen]
60 | pub async fn generate_params(website_root: &str, file_name: String) -> String {
61 | let r1cs_file = format!("{}.r1cs", file_name);
62 | let r1cs = load_r1cs(&FileLocation::URL(
63 | website_root.to_string().clone() + &r1cs_file.to_string(),
64 | ))
65 | .await;
66 |
67 | let pp = create_public_params(r1cs.clone());
68 | let serialised = serde_json::to_string(&pp).unwrap();
69 | return serialised;
70 | }
71 |
72 | #[wasm_bindgen]
73 | pub async fn generate_proof(
74 | website_root: &str,
75 | file_name: String,
76 | iteration_count: usize,
77 | per_iteration_count: usize,
78 | pp_str: String,
79 | sigs: String,
80 | ) -> String {
81 | let r1cs_file = format!("{}.r1cs", file_name);
82 | let wasm_file = format!("{}.wasm", file_name);
83 | let r1cs = load_r1cs(&FileLocation::URL(
84 | website_root.to_string().clone() + r1cs_file.as_str(),
85 | ))
86 | .await;
87 | let witness_generator_wasm =
88 | FileLocation::URL(website_root.to_string().clone() + wasm_file.as_str());
89 |
90 | let sigs: EffSig = serde_json::from_str(&sigs).unwrap();
91 | let start_public_input = vec![
92 | F1::from_str_vartime(&sigs.start_pub_input[0]).unwrap(),
93 | F1::from_str_vartime(&sigs.start_pub_input[1]).unwrap(),
94 | F1::from_str_vartime(&sigs.start_pub_input[2]).unwrap(),
95 | F1::from_str_vartime(&sigs.start_pub_input[3]).unwrap(),
96 | F1::from_str_vartime(&sigs.start_pub_input[4]).unwrap(),
97 | F1::from_str_vartime(&sigs.start_pub_input[5]).unwrap(),
98 | F1::from_str_vartime(&sigs.start_pub_input[6]).unwrap(),
99 | ];
100 |
101 | let mut private_inputs = Vec::new();
102 |
103 | for i in 0..iteration_count {
104 | let mut private_input = HashMap::new();
105 | private_input.insert(
106 | "signatures".to_string(),
107 | json!(
108 | sigs.signatures
109 | [i * per_iteration_count..i * per_iteration_count + per_iteration_count]
110 | ),
111 | );
112 | private_inputs.push(private_input);
113 | }
114 |
115 | let pp =
116 | serde_json::from_str::, TrivialTestCircuit>>(
117 | &pp_str,
118 | )
119 | .unwrap();
120 |
121 | unsafe {
122 | console_log!(
123 | "Number of constraints per step (primary circuit): {}",
124 | pp.num_constraints().0
125 | );
126 | console_log!(
127 | "Number of constraints per step (secondary circuit): {}",
128 | pp.num_constraints().1
129 | );
130 |
131 | console_log!(
132 | "Number of variables per step (primary circuit): {}",
133 | pp.num_variables().0
134 | );
135 | console_log!(
136 | "Number of variables per step (secondary circuit): {}",
137 | pp.num_variables().1
138 | );
139 |
140 | console_log!("Creating a RecursiveSNARK...");
141 | }
142 | let recursive_snark = create_recursive_circuit(
143 | witness_generator_wasm,
144 | r1cs,
145 | private_inputs,
146 | start_public_input.clone(),
147 | &pp,
148 | )
149 | .await
150 | .unwrap();
151 |
152 | // TODO: empty?
153 | let z0_secondary = vec![::Scalar::zero()];
154 |
155 | // verify the recursive SNARK
156 | unsafe {
157 | console_log!("Verifying a RecursiveSNARK...");
158 | }
159 | let res = recursive_snark.verify(
160 | &pp,
161 | iteration_count,
162 | start_public_input.clone(),
163 | z0_secondary.clone(),
164 | );
165 | assert!(res.is_ok());
166 |
167 | // produce a compressed SNARK
168 | unsafe {
169 | console_log!("Generating a CompressedSNARK using Spartan with IPA-PC...");
170 | }
171 |
172 | let (pk, _vk) = CompressedSNARK::<_, _, _, _, S1, S2>::setup(&pp).unwrap();
173 | let res = CompressedSNARK::<_, _, _, _, S1, S2>::prove(&pp, &pk, &recursive_snark);
174 | assert!(res.is_ok());
175 | let compressed_snark = res.unwrap();
176 | return serde_json::to_string(&compressed_snark).unwrap();
177 | }
178 |
179 | #[wasm_bindgen]
180 | pub async fn verify_compressed_proof(iteration_count: usize, pp_str: String, proof_str: String, sigs: String) -> bool {
181 | let pp =
182 | serde_json::from_str::, TrivialTestCircuit>>(
183 | &pp_str,
184 | )
185 | .unwrap();
186 | let (_pk, vk) = CompressedSNARK::<_, _, _, _, S1, S2>::setup(&pp).unwrap();
187 | let sigs: EffSig = serde_json::from_str(&sigs).unwrap();
188 | let start_public_input = vec![
189 | F1::from_str_vartime(&sigs.start_pub_input[0]).unwrap(),
190 | F1::from_str_vartime(&sigs.start_pub_input[1]).unwrap(),
191 | F1::from_str_vartime(&sigs.start_pub_input[2]).unwrap(),
192 | F1::from_str_vartime(&sigs.start_pub_input[3]).unwrap(),
193 | F1::from_str_vartime(&sigs.start_pub_input[4]).unwrap(),
194 | F1::from_str_vartime(&sigs.start_pub_input[5]).unwrap(),
195 | F1::from_str_vartime(&sigs.start_pub_input[6]).unwrap(),
196 | ];
197 |
198 | let z0_secondary = vec![::Scalar::zero()];
199 |
200 | let compressed_proof = serde_json::from_str::<
201 | CompressedSNARK<
202 | G1,
203 | G2,
204 | CircomCircuit,
205 | TrivialTestCircuit,
206 | RelaxedR1CSSNARK,
207 | RelaxedR1CSSNARK,
208 | >,
209 | >(&proof_str)
210 | .unwrap();
211 | let res = compressed_proof.verify(
212 | &vk,
213 | iteration_count,
214 | start_public_input.clone(),
215 | z0_secondary,
216 | );
217 | return res.is_ok();
218 | }
219 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/snippets/nova-scotia-30308307bbbbb0ad/src/circom/wasm_deps/generate_witness_browser.js:
--------------------------------------------------------------------------------
1 | // TODO: can these reads be cached?
2 | export async function read_file_async(path) {
3 | const response = await fetch(path);
4 | const bytes = await response.arrayBuffer();
5 | const res = new Uint8Array(bytes);
6 | return res;
7 | }
8 |
9 | export async function generate_witness_browser_async(
10 | input_json_string,
11 | wasm_file
12 | ) {
13 | const input = JSON.parse(input_json_string);
14 | const buffer = await read_file_async(wasm_file);
15 | const witnessCalculator = await wc(buffer);
16 | const buff = await witnessCalculator.calculateWTNSBin(input, 0);
17 | return buff;
18 | }
19 |
20 | // It gives me great pain to do this, but witness_calculator.js needs to be copied here
21 | // so wasm-pack would pick it up :(
22 | const wc = async function builder(code, options) {
23 | options = options || {};
24 |
25 | let wasmModule;
26 | try {
27 | wasmModule = await WebAssembly.compile(code);
28 | } catch (err) {
29 | console.log(err);
30 | console.log(
31 | "\nTry to run circom --c in order to generate c++ code instead\n"
32 | );
33 | throw new Error(err);
34 | }
35 |
36 | let wc;
37 |
38 | let errStr = "";
39 | let msgStr = "";
40 |
41 | const instance = await WebAssembly.instantiate(wasmModule, {
42 | runtime: {
43 | exceptionHandler: function (code) {
44 | let err;
45 | if (code == 1) {
46 | err = "Signal not found.\n";
47 | } else if (code == 2) {
48 | err = "Too many signals set.\n";
49 | } else if (code == 3) {
50 | err = "Signal already set.\n";
51 | } else if (code == 4) {
52 | err = "Assert Failed.\n";
53 | } else if (code == 5) {
54 | err = "Not enough memory.\n";
55 | } else if (code == 6) {
56 | err = "Input signal array access exceeds the size.\n";
57 | } else {
58 | err = "Unknown error.\n";
59 | }
60 | throw new Error(err + errStr);
61 | },
62 | printErrorMessage: function () {
63 | errStr += getMessage() + "\n";
64 | // console.error(getMessage());
65 | },
66 | writeBufferMessage: function () {
67 | const msg = getMessage();
68 | // Any calls to `log()` will always end with a `\n`, so that's when we print and reset
69 | if (msg === "\n") {
70 | console.log(msgStr);
71 | msgStr = "";
72 | } else {
73 | // If we've buffered other content, put a space in between the items
74 | if (msgStr !== "") {
75 | msgStr += " ";
76 | }
77 | // Then append the message to the message we are creating
78 | msgStr += msg;
79 | }
80 | },
81 | showSharedRWMemory: function () {
82 | printSharedRWMemory();
83 | },
84 | },
85 | });
86 |
87 | const sanityCheck = options;
88 | // options &&
89 | // (
90 | // options.sanityCheck ||
91 | // options.logGetSignal ||
92 | // options.logSetSignal ||
93 | // options.logStartComponent ||
94 | // options.logFinishComponent
95 | // );
96 |
97 | wc = new WitnessCalculator(instance, sanityCheck);
98 | return wc;
99 |
100 | function getMessage() {
101 | var message = "";
102 | var c = instance.exports.getMessageChar();
103 | while (c != 0) {
104 | message += String.fromCharCode(c);
105 | c = instance.exports.getMessageChar();
106 | }
107 | return message;
108 | }
109 |
110 | function printSharedRWMemory() {
111 | const shared_rw_memory_size = instance.exports.getFieldNumLen32();
112 | const arr = new Uint32Array(shared_rw_memory_size);
113 | for (let j = 0; j < shared_rw_memory_size; j++) {
114 | arr[shared_rw_memory_size - 1 - j] =
115 | instance.exports.readSharedRWMemory(j);
116 | }
117 |
118 | // If we've buffered other content, put a space in between the items
119 | if (msgStr !== "") {
120 | msgStr += " ";
121 | }
122 | // Then append the value to the message we are creating
123 | msgStr += fromArray32(arr).toString();
124 | }
125 | };
126 |
127 | class WitnessCalculator {
128 | constructor(instance, sanityCheck) {
129 | this.instance = instance;
130 |
131 | this.version = this.instance.exports.getVersion();
132 | this.n32 = this.instance.exports.getFieldNumLen32();
133 |
134 | this.instance.exports.getRawPrime();
135 | const arr = new Uint32Array(this.n32);
136 | for (let i = 0; i < this.n32; i++) {
137 | arr[this.n32 - 1 - i] = this.instance.exports.readSharedRWMemory(i);
138 | }
139 | this.prime = fromArray32(arr);
140 |
141 | this.witnessSize = this.instance.exports.getWitnessSize();
142 |
143 | this.sanityCheck = sanityCheck;
144 | }
145 |
146 | circom_version() {
147 | return this.instance.exports.getVersion();
148 | }
149 |
150 | async _doCalculateWitness(input, sanityCheck) {
151 | //input is assumed to be a map from signals to arrays of bigints
152 | this.instance.exports.init(this.sanityCheck || sanityCheck ? 1 : 0);
153 | const keys = Object.keys(input);
154 | var input_counter = 0;
155 | keys.forEach((k) => {
156 | const h = fnvHash(k);
157 | const hMSB = parseInt(h.slice(0, 8), 16);
158 | const hLSB = parseInt(h.slice(8, 16), 16);
159 | const fArr = flatArray(input[k]);
160 | let signalSize = this.instance.exports.getInputSignalSize(hMSB, hLSB);
161 | if (signalSize < 0) {
162 | throw new Error(`Signal ${k} not found\n`);
163 | }
164 | if (fArr.length < signalSize) {
165 | throw new Error(`Not enough values for input signal ${k}\n`);
166 | }
167 | if (fArr.length > signalSize) {
168 | throw new Error(`Too many values for input signal ${k}\n`);
169 | }
170 | for (let i = 0; i < fArr.length; i++) {
171 | const arrFr = toArray32(normalize(fArr[i], this.prime), this.n32);
172 | for (let j = 0; j < this.n32; j++) {
173 | this.instance.exports.writeSharedRWMemory(j, arrFr[this.n32 - 1 - j]);
174 | }
175 | try {
176 | this.instance.exports.setInputSignal(hMSB, hLSB, i);
177 | input_counter++;
178 | } catch (err) {
179 | // console.log(`After adding signal ${i} of ${k}`)
180 | throw new Error(err);
181 | }
182 | }
183 | });
184 | if (input_counter < this.instance.exports.getInputSize()) {
185 | throw new Error(
186 | `Not all inputs have been set. Only ${input_counter} out of ${this.instance.exports.getInputSize()}`
187 | );
188 | }
189 | }
190 |
191 | async calculateWitness(input, sanityCheck) {
192 | const w = [];
193 |
194 | await this._doCalculateWitness(input, sanityCheck);
195 |
196 | for (let i = 0; i < this.witnessSize; i++) {
197 | this.instance.exports.getWitness(i);
198 | const arr = new Uint32Array(this.n32);
199 | for (let j = 0; j < this.n32; j++) {
200 | arr[this.n32 - 1 - j] = this.instance.exports.readSharedRWMemory(j);
201 | }
202 | w.push(fromArray32(arr));
203 | }
204 |
205 | return w;
206 | }
207 |
208 | async calculateBinWitness(input, sanityCheck) {
209 | const buff32 = new Uint32Array(this.witnessSize * this.n32);
210 | const buff = new Uint8Array(buff32.buffer);
211 | await this._doCalculateWitness(input, sanityCheck);
212 |
213 | for (let i = 0; i < this.witnessSize; i++) {
214 | this.instance.exports.getWitness(i);
215 | const pos = i * this.n32;
216 | for (let j = 0; j < this.n32; j++) {
217 | buff32[pos + j] = this.instance.exports.readSharedRWMemory(j);
218 | }
219 | }
220 |
221 | return buff;
222 | }
223 |
224 | async calculateWTNSBin(input, sanityCheck) {
225 | const buff32 = new Uint32Array(this.witnessSize * this.n32 + this.n32 + 11);
226 | const buff = new Uint8Array(buff32.buffer);
227 | await this._doCalculateWitness(input, sanityCheck);
228 |
229 | //"wtns"
230 | buff[0] = "w".charCodeAt(0);
231 | buff[1] = "t".charCodeAt(0);
232 | buff[2] = "n".charCodeAt(0);
233 | buff[3] = "s".charCodeAt(0);
234 |
235 | //version 2
236 | buff32[1] = 2;
237 |
238 | //number of sections: 2
239 | buff32[2] = 2;
240 |
241 | //id section 1
242 | buff32[3] = 1;
243 |
244 | const n8 = this.n32 * 4;
245 | //id section 1 length in 64bytes
246 | const idSection1length = 8 + n8;
247 | const idSection1lengthHex = idSection1length.toString(16);
248 | buff32[4] = parseInt(idSection1lengthHex.slice(0, 8), 16);
249 | buff32[5] = parseInt(idSection1lengthHex.slice(8, 16), 16);
250 |
251 | //this.n32
252 | buff32[6] = n8;
253 |
254 | //prime number
255 | this.instance.exports.getRawPrime();
256 |
257 | var pos = 7;
258 | for (let j = 0; j < this.n32; j++) {
259 | buff32[pos + j] = this.instance.exports.readSharedRWMemory(j);
260 | }
261 | pos += this.n32;
262 |
263 | // witness size
264 | buff32[pos] = this.witnessSize;
265 | pos++;
266 |
267 | //id section 2
268 | buff32[pos] = 2;
269 | pos++;
270 |
271 | // section 2 length
272 | const idSection2length = n8 * this.witnessSize;
273 | const idSection2lengthHex = idSection2length.toString(16);
274 | buff32[pos] = parseInt(idSection2lengthHex.slice(0, 8), 16);
275 | buff32[pos + 1] = parseInt(idSection2lengthHex.slice(8, 16), 16);
276 |
277 | pos += 2;
278 | for (let i = 0; i < this.witnessSize; i++) {
279 | this.instance.exports.getWitness(i);
280 | for (let j = 0; j < this.n32; j++) {
281 | buff32[pos + j] = this.instance.exports.readSharedRWMemory(j);
282 | }
283 | pos += this.n32;
284 | }
285 |
286 | return buff;
287 | }
288 | }
289 |
290 | function toArray32(rem, size) {
291 | const res = []; //new Uint32Array(size); //has no unshift
292 | const radix = BigInt(0x100000000);
293 | while (rem) {
294 | res.unshift(Number(rem % radix));
295 | rem = rem / radix;
296 | }
297 | if (size) {
298 | var i = size - res.length;
299 | while (i > 0) {
300 | res.unshift(0);
301 | i--;
302 | }
303 | }
304 | return res;
305 | }
306 |
307 | function fromArray32(arr) {
308 | //returns a BigInt
309 | var res = BigInt(0);
310 | const radix = BigInt(0x100000000);
311 | for (let i = 0; i < arr.length; i++) {
312 | res = res * radix + BigInt(arr[i]);
313 | }
314 | return res;
315 | }
316 |
317 | function flatArray(a) {
318 | var res = [];
319 | fillArray(res, a);
320 | return res;
321 |
322 | function fillArray(res, a) {
323 | if (Array.isArray(a)) {
324 | for (let i = 0; i < a.length; i++) {
325 | fillArray(res, a[i]);
326 | }
327 | } else {
328 | res.push(a);
329 | }
330 | }
331 | }
332 |
333 | function normalize(n, prime) {
334 | let res = BigInt(n) % prime;
335 | if (res < 0) res += prime;
336 | return res;
337 | }
338 |
339 | function fnvHash(str) {
340 | const uint64_max = BigInt(2) ** BigInt(64);
341 | let hash = BigInt("0xCBF29CE484222325");
342 | for (var i = 0; i < str.length; i++) {
343 | hash ^= BigInt(str[i].charCodeAt());
344 | hash *= BigInt(0x100000001b3);
345 | hash %= uint64_max;
346 | }
347 | let shash = hash.toString(16);
348 | let n = 16 - shash.length;
349 | shash = "0".repeat(n).concat(shash);
350 | return shash;
351 | }
352 |
--------------------------------------------------------------------------------
/packages/nova-ecdsa-browser-pkg/nova_ecdsa_browser.js:
--------------------------------------------------------------------------------
1 | import { read_file_async, generate_witness_browser_async } from './snippets/nova-scotia-30308307bbbbb0ad/src/circom/wasm_deps/generate_witness_browser.js';
2 | import { startWorkers } from './snippets/wasm-bindgen-rayon-7afa899f36665473/src/workerHelpers.js';
3 |
4 | let wasm;
5 |
6 | const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );
7 |
8 | if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };
9 |
10 | let cachedUint8Memory0 = null;
11 |
12 | function getUint8Memory0() {
13 | if (cachedUint8Memory0 === null || cachedUint8Memory0.buffer !== wasm.memory.buffer) {
14 | cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);
15 | }
16 | return cachedUint8Memory0;
17 | }
18 |
19 | function getStringFromWasm0(ptr, len) {
20 | ptr = ptr >>> 0;
21 | return cachedTextDecoder.decode(getUint8Memory0().slice(ptr, ptr + len));
22 | }
23 |
24 | const heap = new Array(128).fill(undefined);
25 |
26 | heap.push(undefined, null, true, false);
27 |
28 | let heap_next = heap.length;
29 |
30 | function addHeapObject(obj) {
31 | if (heap_next === heap.length) heap.push(heap.length + 1);
32 | const idx = heap_next;
33 | heap_next = heap[idx];
34 |
35 | heap[idx] = obj;
36 | return idx;
37 | }
38 |
39 | function getObject(idx) { return heap[idx]; }
40 |
41 | function dropObject(idx) {
42 | if (idx < 132) return;
43 | heap[idx] = heap_next;
44 | heap_next = idx;
45 | }
46 |
47 | function takeObject(idx) {
48 | const ret = getObject(idx);
49 | dropObject(idx);
50 | return ret;
51 | }
52 |
53 | function makeMutClosure(arg0, arg1, dtor, f) {
54 | const state = { a: arg0, b: arg1, cnt: 1, dtor };
55 | const real = (...args) => {
56 | // First up with a closure we increment the internal reference
57 | // count. This ensures that the Rust closure environment won't
58 | // be deallocated while we're invoking it.
59 | state.cnt++;
60 | const a = state.a;
61 | state.a = 0;
62 | try {
63 | return f(a, state.b, ...args);
64 | } finally {
65 | if (--state.cnt === 0) {
66 | wasm.__wbindgen_export_1.get(state.dtor)(a, state.b);
67 |
68 | } else {
69 | state.a = a;
70 | }
71 | }
72 | };
73 | real.original = state;
74 |
75 | return real;
76 | }
77 | function __wbg_adapter_22(arg0, arg1, arg2) {
78 | wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h6ae7b9308d5b8965(arg0, arg1, addHeapObject(arg2));
79 | }
80 |
81 | /**
82 | */
83 | export function init_panic_hook() {
84 | wasm.init_panic_hook();
85 | }
86 |
87 | let WASM_VECTOR_LEN = 0;
88 |
89 | const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );
90 |
91 | const encodeString = function (arg, view) {
92 | const buf = cachedTextEncoder.encode(arg);
93 | view.set(buf);
94 | return {
95 | read: arg.length,
96 | written: buf.length
97 | };
98 | };
99 |
100 | function passStringToWasm0(arg, malloc, realloc) {
101 |
102 | if (realloc === undefined) {
103 | const buf = cachedTextEncoder.encode(arg);
104 | const ptr = malloc(buf.length, 1) >>> 0;
105 | getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
106 | WASM_VECTOR_LEN = buf.length;
107 | return ptr;
108 | }
109 |
110 | let len = arg.length;
111 | let ptr = malloc(len, 1) >>> 0;
112 |
113 | const mem = getUint8Memory0();
114 |
115 | let offset = 0;
116 |
117 | for (; offset < len; offset++) {
118 | const code = arg.charCodeAt(offset);
119 | if (code > 0x7F) break;
120 | mem[ptr + offset] = code;
121 | }
122 |
123 | if (offset !== len) {
124 | if (offset !== 0) {
125 | arg = arg.slice(offset);
126 | }
127 | ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
128 | const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
129 | const ret = encodeString(arg, view);
130 |
131 | offset += ret.written;
132 | }
133 |
134 | WASM_VECTOR_LEN = offset;
135 | return ptr;
136 | }
137 | /**
138 | * @param {string} website_root
139 | * @param {string} file_name
140 | * @returns {Promise}
141 | */
142 | export function generate_params(website_root, file_name) {
143 | const ptr0 = passStringToWasm0(website_root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
144 | const len0 = WASM_VECTOR_LEN;
145 | const ptr1 = passStringToWasm0(file_name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
146 | const len1 = WASM_VECTOR_LEN;
147 | const ret = wasm.generate_params(ptr0, len0, ptr1, len1);
148 | return takeObject(ret);
149 | }
150 |
151 | /**
152 | * @param {string} website_root
153 | * @param {string} file_name
154 | * @param {number} iteration_count
155 | * @param {number} per_iteration_count
156 | * @param {string} pp_str
157 | * @param {string} sigs
158 | * @returns {Promise}
159 | */
160 | export function generate_proof(website_root, file_name, iteration_count, per_iteration_count, pp_str, sigs) {
161 | const ptr0 = passStringToWasm0(website_root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
162 | const len0 = WASM_VECTOR_LEN;
163 | const ptr1 = passStringToWasm0(file_name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
164 | const len1 = WASM_VECTOR_LEN;
165 | const ptr2 = passStringToWasm0(pp_str, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
166 | const len2 = WASM_VECTOR_LEN;
167 | const ptr3 = passStringToWasm0(sigs, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
168 | const len3 = WASM_VECTOR_LEN;
169 | const ret = wasm.generate_proof(ptr0, len0, ptr1, len1, iteration_count, per_iteration_count, ptr2, len2, ptr3, len3);
170 | return takeObject(ret);
171 | }
172 |
173 | /**
174 | * @param {number} iteration_count
175 | * @param {string} pp_str
176 | * @param {string} proof_str
177 | * @param {string} sigs
178 | * @returns {Promise}
179 | */
180 | export function verify_compressed_proof(iteration_count, pp_str, proof_str, sigs) {
181 | const ptr0 = passStringToWasm0(pp_str, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
182 | const len0 = WASM_VECTOR_LEN;
183 | const ptr1 = passStringToWasm0(proof_str, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
184 | const len1 = WASM_VECTOR_LEN;
185 | const ptr2 = passStringToWasm0(sigs, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
186 | const len2 = WASM_VECTOR_LEN;
187 | const ret = wasm.verify_compressed_proof(iteration_count, ptr0, len0, ptr1, len1, ptr2, len2);
188 | return takeObject(ret);
189 | }
190 |
191 | /**
192 | * @param {string} path
193 | * @returns {Promise}
194 | */
195 | export function read_file(path) {
196 | const ptr0 = passStringToWasm0(path, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
197 | const len0 = WASM_VECTOR_LEN;
198 | const ret = wasm.read_file(ptr0, len0);
199 | return takeObject(ret);
200 | }
201 |
202 | /**
203 | * @param {string} input_json_string
204 | * @param {string} wasm_file
205 | * @returns {Promise}
206 | */
207 | export function generate_witness_browser(input_json_string, wasm_file) {
208 | const ptr0 = passStringToWasm0(input_json_string, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
209 | const len0 = WASM_VECTOR_LEN;
210 | const ptr1 = passStringToWasm0(wasm_file, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
211 | const len1 = WASM_VECTOR_LEN;
212 | const ret = wasm.generate_witness_browser(ptr0, len0, ptr1, len1);
213 | return takeObject(ret);
214 | }
215 |
216 | let cachedInt32Memory0 = null;
217 |
218 | function getInt32Memory0() {
219 | if (cachedInt32Memory0 === null || cachedInt32Memory0.buffer !== wasm.memory.buffer) {
220 | cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);
221 | }
222 | return cachedInt32Memory0;
223 | }
224 |
225 | function handleError(f, args) {
226 | try {
227 | return f.apply(this, args);
228 | } catch (e) {
229 | wasm.__wbindgen_exn_store(addHeapObject(e));
230 | }
231 | }
232 | function __wbg_adapter_59(arg0, arg1, arg2, arg3) {
233 | wasm.wasm_bindgen__convert__closures__invoke2_mut__h79d8b12638ec1af1(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
234 | }
235 |
236 | /**
237 | * @param {number} num_threads
238 | * @returns {Promise}
239 | */
240 | export function initThreadPool(num_threads) {
241 | const ret = wasm.initThreadPool(num_threads);
242 | return takeObject(ret);
243 | }
244 |
245 | /**
246 | * @param {number} receiver
247 | */
248 | export function wbg_rayon_start_worker(receiver) {
249 | wasm.wbg_rayon_start_worker(receiver);
250 | }
251 |
252 | /**
253 | */
254 | export class EffSig {
255 |
256 | __destroy_into_raw() {
257 | const ptr = this.__wbg_ptr;
258 | this.__wbg_ptr = 0;
259 |
260 | return ptr;
261 | }
262 |
263 | free() {
264 | const ptr = this.__destroy_into_raw();
265 | wasm.__wbg_effsig_free(ptr);
266 | }
267 | }
268 | /**
269 | */
270 | export class wbg_rayon_PoolBuilder {
271 |
272 | static __wrap(ptr) {
273 | ptr = ptr >>> 0;
274 | const obj = Object.create(wbg_rayon_PoolBuilder.prototype);
275 | obj.__wbg_ptr = ptr;
276 |
277 | return obj;
278 | }
279 |
280 | __destroy_into_raw() {
281 | const ptr = this.__wbg_ptr;
282 | this.__wbg_ptr = 0;
283 |
284 | return ptr;
285 | }
286 |
287 | free() {
288 | const ptr = this.__destroy_into_raw();
289 | wasm.__wbg_wbg_rayon_poolbuilder_free(ptr);
290 | }
291 | /**
292 | * @returns {number}
293 | */
294 | numThreads() {
295 | const ret = wasm.wbg_rayon_poolbuilder_numThreads(this.__wbg_ptr);
296 | return ret >>> 0;
297 | }
298 | /**
299 | * @returns {number}
300 | */
301 | receiver() {
302 | const ret = wasm.wbg_rayon_poolbuilder_receiver(this.__wbg_ptr);
303 | return ret;
304 | }
305 | /**
306 | */
307 | build() {
308 | wasm.wbg_rayon_poolbuilder_build(this.__wbg_ptr);
309 | }
310 | }
311 |
312 | async function __wbg_load(module, imports) {
313 | if (typeof Response === 'function' && module instanceof Response) {
314 | if (typeof WebAssembly.instantiateStreaming === 'function') {
315 | try {
316 | return await WebAssembly.instantiateStreaming(module, imports);
317 |
318 | } catch (e) {
319 | if (module.headers.get('Content-Type') != 'application/wasm') {
320 | console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
321 |
322 | } else {
323 | throw e;
324 | }
325 | }
326 | }
327 |
328 | const bytes = await module.arrayBuffer();
329 | return await WebAssembly.instantiate(bytes, imports);
330 |
331 | } else {
332 | const instance = await WebAssembly.instantiate(module, imports);
333 |
334 | if (instance instanceof WebAssembly.Instance) {
335 | return { instance, module };
336 |
337 | } else {
338 | return instance;
339 | }
340 | }
341 | }
342 |
343 | function __wbg_get_imports() {
344 | const imports = {};
345 | imports.wbg = {};
346 | imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
347 | const ret = getStringFromWasm0(arg0, arg1);
348 | return addHeapObject(ret);
349 | };
350 | imports.wbg.__wbg_log_2eeb2ef1daeb2641 = function(arg0, arg1) {
351 | console.log(getStringFromWasm0(arg0, arg1));
352 | };
353 | imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
354 | takeObject(arg0);
355 | };
356 | imports.wbg.__wbindgen_cb_drop = function(arg0) {
357 | const obj = takeObject(arg0).original;
358 | if (obj.cnt-- == 1) {
359 | obj.a = 0;
360 | return true;
361 | }
362 | const ret = false;
363 | return ret;
364 | };
365 | imports.wbg.__wbg_readfileasync_87541010a6354172 = function(arg0, arg1) {
366 | const ret = read_file_async(getStringFromWasm0(arg0, arg1));
367 | return addHeapObject(ret);
368 | };
369 | imports.wbg.__wbg_generatewitnessbrowserasync_dedd439b0f056b9f = function(arg0, arg1, arg2, arg3) {
370 | const ret = generate_witness_browser_async(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
371 | return addHeapObject(ret);
372 | };
373 | imports.wbg.__wbindgen_link_22046963fe0b707a = function(arg0) {
374 | const ret = "data:application/javascript," + encodeURIComponent(`onmessage = function (ev) {
375 | let [ia, index, value] = ev.data;
376 | ia = new Int32Array(ia.buffer);
377 | let result = Atomics.wait(ia, index, value);
378 | postMessage(result);
379 | };
380 | `);
381 | const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
382 | const len1 = WASM_VECTOR_LEN;
383 | getInt32Memory0()[arg0 / 4 + 1] = len1;
384 | getInt32Memory0()[arg0 / 4 + 0] = ptr1;
385 | };
386 | imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
387 | const ret = getObject(arg0);
388 | return addHeapObject(ret);
389 | };
390 | imports.wbg.__wbg_waitAsync_60fb5e2e86467e31 = function() {
391 | const ret = Atomics.waitAsync;
392 | return addHeapObject(ret);
393 | };
394 | imports.wbg.__wbindgen_is_undefined = function(arg0) {
395 | const ret = getObject(arg0) === undefined;
396 | return ret;
397 | };
398 | imports.wbg.__wbg_waitAsync_73fd6eb3bace0a8d = function(arg0, arg1, arg2) {
399 | const ret = Atomics.waitAsync(getObject(arg0), arg1, arg2);
400 | return addHeapObject(ret);
401 | };
402 | imports.wbg.__wbg_async_e1a2a669aacf35ff = function(arg0) {
403 | const ret = getObject(arg0).async;
404 | return ret;
405 | };
406 | imports.wbg.__wbg_value_555e4f564193db05 = function(arg0) {
407 | const ret = getObject(arg0).value;
408 | return addHeapObject(ret);
409 | };
410 | imports.wbg.__wbindgen_number_new = function(arg0) {
411 | const ret = arg0;
412 | return addHeapObject(ret);
413 | };
414 | imports.wbg.__wbg_data_ab99ae4a2e1e8bc9 = function(arg0) {
415 | const ret = getObject(arg0).data;
416 | return addHeapObject(ret);
417 | };
418 | imports.wbg.__wbg_setonmessage_f0bd0280573b7084 = function(arg0, arg1) {
419 | getObject(arg0).onmessage = getObject(arg1);
420 | };
421 | imports.wbg.__wbg_new_8e7322f46d5d019c = function() { return handleError(function (arg0, arg1) {
422 | const ret = new Worker(getStringFromWasm0(arg0, arg1));
423 | return addHeapObject(ret);
424 | }, arguments) };
425 | imports.wbg.__wbg_postMessage_8c609e2bde333d9c = function() { return handleError(function (arg0, arg1) {
426 | getObject(arg0).postMessage(getObject(arg1));
427 | }, arguments) };
428 | imports.wbg.__wbg_of_3f69007bb4eeae65 = function(arg0, arg1, arg2) {
429 | const ret = Array.of(getObject(arg0), getObject(arg1), getObject(arg2));
430 | return addHeapObject(ret);
431 | };
432 | imports.wbg.__wbg_call_01734de55d61e11d = function() { return handleError(function (arg0, arg1, arg2) {
433 | const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
434 | return addHeapObject(ret);
435 | }, arguments) };
436 | imports.wbg.__wbg_new_43f1b47c28813cbd = function(arg0, arg1) {
437 | try {
438 | var state0 = {a: arg0, b: arg1};
439 | var cb0 = (arg0, arg1) => {
440 | const a = state0.a;
441 | state0.a = 0;
442 | try {
443 | return __wbg_adapter_59(a, state0.b, arg0, arg1);
444 | } finally {
445 | state0.a = a;
446 | }
447 | };
448 | const ret = new Promise(cb0);
449 | return addHeapObject(ret);
450 | } finally {
451 | state0.a = state0.b = 0;
452 | }
453 | };
454 | imports.wbg.__wbg_resolve_53698b95aaf7fcf8 = function(arg0) {
455 | const ret = Promise.resolve(getObject(arg0));
456 | return addHeapObject(ret);
457 | };
458 | imports.wbg.__wbg_then_f7e06ee3c11698eb = function(arg0, arg1) {
459 | const ret = getObject(arg0).then(getObject(arg1));
460 | return addHeapObject(ret);
461 | };
462 | imports.wbg.__wbg_then_b2267541e2a73865 = function(arg0, arg1, arg2) {
463 | const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));
464 | return addHeapObject(ret);
465 | };
466 | imports.wbg.__wbg_buffer_085ec1f694018c4f = function(arg0) {
467 | const ret = getObject(arg0).buffer;
468 | return addHeapObject(ret);
469 | };
470 | imports.wbg.__wbg_new_a0af68041688e8fd = function(arg0) {
471 | const ret = new Int32Array(getObject(arg0));
472 | return addHeapObject(ret);
473 | };
474 | imports.wbg.__wbg_new_8125e318e6245eed = function(arg0) {
475 | const ret = new Uint8Array(getObject(arg0));
476 | return addHeapObject(ret);
477 | };
478 | imports.wbg.__wbg_set_5cf90238115182c3 = function(arg0, arg1, arg2) {
479 | getObject(arg0).set(getObject(arg1), arg2 >>> 0);
480 | };
481 | imports.wbg.__wbg_length_72e2208bbc0efc61 = function(arg0) {
482 | const ret = getObject(arg0).length;
483 | return ret;
484 | };
485 | imports.wbg.__wbg_new_abda76e883ba8a5f = function() {
486 | const ret = new Error();
487 | return addHeapObject(ret);
488 | };
489 | imports.wbg.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) {
490 | const ret = getObject(arg1).stack;
491 | const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
492 | const len1 = WASM_VECTOR_LEN;
493 | getInt32Memory0()[arg0 / 4 + 1] = len1;
494 | getInt32Memory0()[arg0 / 4 + 0] = ptr1;
495 | };
496 | imports.wbg.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) {
497 | let deferred0_0;
498 | let deferred0_1;
499 | try {
500 | deferred0_0 = arg0;
501 | deferred0_1 = arg1;
502 | console.error(getStringFromWasm0(arg0, arg1));
503 | } finally {
504 | wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
505 | }
506 | };
507 | imports.wbg.__wbindgen_throw = function(arg0, arg1) {
508 | throw new Error(getStringFromWasm0(arg0, arg1));
509 | };
510 | imports.wbg.__wbindgen_rethrow = function(arg0) {
511 | throw takeObject(arg0);
512 | };
513 | imports.wbg.__wbindgen_module = function() {
514 | const ret = __wbg_init.__wbindgen_wasm_module;
515 | return addHeapObject(ret);
516 | };
517 | imports.wbg.__wbindgen_memory = function() {
518 | const ret = wasm.memory;
519 | return addHeapObject(ret);
520 | };
521 | imports.wbg.__wbg_startWorkers_6fd3af285ea11136 = function(arg0, arg1, arg2) {
522 | const ret = startWorkers(takeObject(arg0), takeObject(arg1), wbg_rayon_PoolBuilder.__wrap(arg2));
523 | return addHeapObject(ret);
524 | };
525 | imports.wbg.__wbindgen_closure_wrapper3247 = function(arg0, arg1, arg2) {
526 | const ret = makeMutClosure(arg0, arg1, 528, __wbg_adapter_22);
527 | return addHeapObject(ret);
528 | };
529 | imports.wbg.__wbindgen_closure_wrapper3248 = function(arg0, arg1, arg2) {
530 | const ret = makeMutClosure(arg0, arg1, 528, __wbg_adapter_22);
531 | return addHeapObject(ret);
532 | };
533 |
534 | return imports;
535 | }
536 |
537 | function __wbg_init_memory(imports, maybe_memory) {
538 | imports.wbg.memory = maybe_memory || new WebAssembly.Memory({initial:19,maximum:65536,shared:true});
539 | }
540 |
541 | function __wbg_finalize_init(instance, module) {
542 | wasm = instance.exports;
543 | __wbg_init.__wbindgen_wasm_module = module;
544 | cachedInt32Memory0 = null;
545 | cachedUint8Memory0 = null;
546 |
547 | wasm.__wbindgen_start();
548 | return wasm;
549 | }
550 |
551 | function initSync(module, maybe_memory) {
552 | if (wasm !== undefined) return wasm;
553 |
554 | const imports = __wbg_get_imports();
555 |
556 | __wbg_init_memory(imports, maybe_memory);
557 |
558 | if (!(module instanceof WebAssembly.Module)) {
559 | module = new WebAssembly.Module(module);
560 | }
561 |
562 | const instance = new WebAssembly.Instance(module, imports);
563 |
564 | return __wbg_finalize_init(instance, module);
565 | }
566 |
567 | async function __wbg_init(input, maybe_memory) {
568 | if (wasm !== undefined) return wasm;
569 |
570 | if (typeof input === 'undefined') {
571 | input = new URL('nova_ecdsa_browser_bg.wasm', import.meta.url);
572 | }
573 | const imports = __wbg_get_imports();
574 |
575 | if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
576 | input = fetch(input);
577 | }
578 |
579 | __wbg_init_memory(imports, maybe_memory);
580 |
581 | const { instance, module } = await __wbg_load(await input, imports);
582 |
583 | return __wbg_finalize_init(instance, module);
584 | }
585 |
586 | export { initSync }
587 | export default __wbg_init;
588 |
--------------------------------------------------------------------------------
/nova-ecdsa/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "addchain"
7 | version = "0.2.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570"
10 | dependencies = [
11 | "num-bigint 0.3.3",
12 | "num-integer",
13 | "num-traits",
14 | ]
15 |
16 | [[package]]
17 | name = "adler"
18 | version = "1.0.2"
19 | source = "registry+https://github.com/rust-lang/crates.io-index"
20 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
21 |
22 | [[package]]
23 | name = "anyhow"
24 | version = "1.0.75"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
27 |
28 | [[package]]
29 | name = "arrayref"
30 | version = "0.3.7"
31 | source = "registry+https://github.com/rust-lang/crates.io-index"
32 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
33 |
34 | [[package]]
35 | name = "arrayvec"
36 | version = "0.5.2"
37 | source = "registry+https://github.com/rust-lang/crates.io-index"
38 | checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
39 |
40 | [[package]]
41 | name = "arrayvec"
42 | version = "0.7.4"
43 | source = "registry+https://github.com/rust-lang/crates.io-index"
44 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
45 |
46 | [[package]]
47 | name = "autocfg"
48 | version = "1.1.0"
49 | source = "registry+https://github.com/rust-lang/crates.io-index"
50 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
51 |
52 | [[package]]
53 | name = "bellperson"
54 | version = "0.25.0"
55 | source = "registry+https://github.com/rust-lang/crates.io-index"
56 | checksum = "93eaee4b4753554139ae52ecf0e8b8c128cbc561b32e1bfaa32f70cba8518c1f"
57 | dependencies = [
58 | "bincode",
59 | "blake2s_simd 1.0.1",
60 | "blstrs",
61 | "byteorder",
62 | "crossbeam-channel",
63 | "digest 0.10.7",
64 | "ec-gpu",
65 | "ec-gpu-gen",
66 | "ff",
67 | "group",
68 | "log",
69 | "memmap2",
70 | "pairing",
71 | "rand",
72 | "rand_core",
73 | "rayon",
74 | "rustversion",
75 | "serde",
76 | "sha2",
77 | "thiserror",
78 | ]
79 |
80 | [[package]]
81 | name = "bincode"
82 | version = "1.3.3"
83 | source = "registry+https://github.com/rust-lang/crates.io-index"
84 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
85 | dependencies = [
86 | "serde",
87 | ]
88 |
89 | [[package]]
90 | name = "bitvec"
91 | version = "1.0.1"
92 | source = "registry+https://github.com/rust-lang/crates.io-index"
93 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
94 | dependencies = [
95 | "funty",
96 | "radium",
97 | "tap",
98 | "wyz",
99 | ]
100 |
101 | [[package]]
102 | name = "blake2b_simd"
103 | version = "1.0.1"
104 | source = "registry+https://github.com/rust-lang/crates.io-index"
105 | checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
106 | dependencies = [
107 | "arrayref",
108 | "arrayvec 0.7.4",
109 | "constant_time_eq 0.2.6",
110 | ]
111 |
112 | [[package]]
113 | name = "blake2s_simd"
114 | version = "0.5.11"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2"
117 | dependencies = [
118 | "arrayref",
119 | "arrayvec 0.5.2",
120 | "constant_time_eq 0.1.5",
121 | ]
122 |
123 | [[package]]
124 | name = "blake2s_simd"
125 | version = "1.0.1"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f"
128 | dependencies = [
129 | "arrayref",
130 | "arrayvec 0.7.4",
131 | "constant_time_eq 0.2.6",
132 | ]
133 |
134 | [[package]]
135 | name = "block-buffer"
136 | version = "0.7.3"
137 | source = "registry+https://github.com/rust-lang/crates.io-index"
138 | checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
139 | dependencies = [
140 | "block-padding",
141 | "byte-tools",
142 | "byteorder",
143 | "generic-array 0.12.4",
144 | ]
145 |
146 | [[package]]
147 | name = "block-buffer"
148 | version = "0.10.4"
149 | source = "registry+https://github.com/rust-lang/crates.io-index"
150 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
151 | dependencies = [
152 | "generic-array 0.14.7",
153 | ]
154 |
155 | [[package]]
156 | name = "block-padding"
157 | version = "0.1.5"
158 | source = "registry+https://github.com/rust-lang/crates.io-index"
159 | checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
160 | dependencies = [
161 | "byte-tools",
162 | ]
163 |
164 | [[package]]
165 | name = "blst"
166 | version = "0.3.11"
167 | source = "registry+https://github.com/rust-lang/crates.io-index"
168 | checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b"
169 | dependencies = [
170 | "cc",
171 | "glob",
172 | "threadpool",
173 | "zeroize",
174 | ]
175 |
176 | [[package]]
177 | name = "blstrs"
178 | version = "0.7.1"
179 | source = "registry+https://github.com/rust-lang/crates.io-index"
180 | checksum = "7a8a8ed6fefbeef4a8c7b460e4110e12c5e22a5b7cf32621aae6ad650c4dcf29"
181 | dependencies = [
182 | "blst",
183 | "byte-slice-cast",
184 | "ff",
185 | "group",
186 | "pairing",
187 | "rand_core",
188 | "serde",
189 | "subtle",
190 | ]
191 |
192 | [[package]]
193 | name = "bumpalo"
194 | version = "3.13.0"
195 | source = "registry+https://github.com/rust-lang/crates.io-index"
196 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
197 |
198 | [[package]]
199 | name = "byte-slice-cast"
200 | version = "1.2.2"
201 | source = "registry+https://github.com/rust-lang/crates.io-index"
202 | checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c"
203 |
204 | [[package]]
205 | name = "byte-tools"
206 | version = "0.3.1"
207 | source = "registry+https://github.com/rust-lang/crates.io-index"
208 | checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
209 |
210 | [[package]]
211 | name = "byteorder"
212 | version = "1.4.3"
213 | source = "registry+https://github.com/rust-lang/crates.io-index"
214 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
215 |
216 | [[package]]
217 | name = "cc"
218 | version = "1.0.83"
219 | source = "registry+https://github.com/rust-lang/crates.io-index"
220 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
221 | dependencies = [
222 | "libc",
223 | ]
224 |
225 | [[package]]
226 | name = "cfg-if"
227 | version = "1.0.0"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
230 |
231 | [[package]]
232 | name = "constant_time_eq"
233 | version = "0.1.5"
234 | source = "registry+https://github.com/rust-lang/crates.io-index"
235 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
236 |
237 | [[package]]
238 | name = "constant_time_eq"
239 | version = "0.2.6"
240 | source = "registry+https://github.com/rust-lang/crates.io-index"
241 | checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6"
242 |
243 | [[package]]
244 | name = "cpufeatures"
245 | version = "0.2.9"
246 | source = "registry+https://github.com/rust-lang/crates.io-index"
247 | checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
248 | dependencies = [
249 | "libc",
250 | ]
251 |
252 | [[package]]
253 | name = "crc32fast"
254 | version = "1.3.2"
255 | source = "registry+https://github.com/rust-lang/crates.io-index"
256 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
257 | dependencies = [
258 | "cfg-if",
259 | ]
260 |
261 | [[package]]
262 | name = "crossbeam-channel"
263 | version = "0.5.8"
264 | source = "registry+https://github.com/rust-lang/crates.io-index"
265 | checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
266 | dependencies = [
267 | "cfg-if",
268 | "crossbeam-utils",
269 | ]
270 |
271 | [[package]]
272 | name = "crossbeam-deque"
273 | version = "0.8.3"
274 | source = "registry+https://github.com/rust-lang/crates.io-index"
275 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
276 | dependencies = [
277 | "cfg-if",
278 | "crossbeam-epoch",
279 | "crossbeam-utils",
280 | ]
281 |
282 | [[package]]
283 | name = "crossbeam-epoch"
284 | version = "0.9.15"
285 | source = "registry+https://github.com/rust-lang/crates.io-index"
286 | checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
287 | dependencies = [
288 | "autocfg",
289 | "cfg-if",
290 | "crossbeam-utils",
291 | "memoffset",
292 | "scopeguard",
293 | ]
294 |
295 | [[package]]
296 | name = "crossbeam-utils"
297 | version = "0.8.16"
298 | source = "registry+https://github.com/rust-lang/crates.io-index"
299 | checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
300 | dependencies = [
301 | "cfg-if",
302 | ]
303 |
304 | [[package]]
305 | name = "crypto-common"
306 | version = "0.1.6"
307 | source = "registry+https://github.com/rust-lang/crates.io-index"
308 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
309 | dependencies = [
310 | "generic-array 0.14.7",
311 | "typenum",
312 | ]
313 |
314 | [[package]]
315 | name = "digest"
316 | version = "0.8.1"
317 | source = "registry+https://github.com/rust-lang/crates.io-index"
318 | checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
319 | dependencies = [
320 | "generic-array 0.12.4",
321 | ]
322 |
323 | [[package]]
324 | name = "digest"
325 | version = "0.10.7"
326 | source = "registry+https://github.com/rust-lang/crates.io-index"
327 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
328 | dependencies = [
329 | "block-buffer 0.10.4",
330 | "crypto-common",
331 | ]
332 |
333 | [[package]]
334 | name = "ec-gpu"
335 | version = "0.2.0"
336 | source = "registry+https://github.com/rust-lang/crates.io-index"
337 | checksum = "bd63582de2b59ea1aa48d7c1941b5d87618d95484397521b3acdfa0e1e9f5e45"
338 |
339 | [[package]]
340 | name = "ec-gpu-gen"
341 | version = "0.6.0"
342 | source = "registry+https://github.com/rust-lang/crates.io-index"
343 | checksum = "892df2aa20abec5b816e15d5d6383892ca142077708efa3067dd3ac44b75c664"
344 | dependencies = [
345 | "bitvec",
346 | "crossbeam-channel",
347 | "ec-gpu",
348 | "execute",
349 | "ff",
350 | "group",
351 | "hex",
352 | "log",
353 | "num_cpus",
354 | "once_cell",
355 | "rayon",
356 | "sha2",
357 | "thiserror",
358 | "yastl",
359 | ]
360 |
361 | [[package]]
362 | name = "either"
363 | version = "1.9.0"
364 | source = "registry+https://github.com/rust-lang/crates.io-index"
365 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
366 |
367 | [[package]]
368 | name = "execute"
369 | version = "0.2.12"
370 | source = "registry+https://github.com/rust-lang/crates.io-index"
371 | checksum = "16d9a9ea4c04632c16bc5c71a2fcc63d308481f7fc67eb1a1ce6315c44a426ae"
372 | dependencies = [
373 | "execute-command-macro",
374 | "execute-command-tokens",
375 | "generic-array 0.14.7",
376 | ]
377 |
378 | [[package]]
379 | name = "execute-command-macro"
380 | version = "0.1.8"
381 | source = "registry+https://github.com/rust-lang/crates.io-index"
382 | checksum = "a5fbc65a0cf735106743f4c38c9a3671c1e734b5c2c20d21a3c93c696daa3157"
383 | dependencies = [
384 | "execute-command-macro-impl",
385 | ]
386 |
387 | [[package]]
388 | name = "execute-command-macro-impl"
389 | version = "0.1.9"
390 | source = "registry+https://github.com/rust-lang/crates.io-index"
391 | checksum = "55a9a55d1dab3b07854648d48e366f684aefe2ac78ae28cec3bf65e3cd53d9a3"
392 | dependencies = [
393 | "execute-command-tokens",
394 | "quote",
395 | "syn 2.0.29",
396 | ]
397 |
398 | [[package]]
399 | name = "execute-command-tokens"
400 | version = "0.1.6"
401 | source = "registry+https://github.com/rust-lang/crates.io-index"
402 | checksum = "8ba569491c70ec8471e34aa7e9c0b9e82bb5d2464c0398442d17d3c4af814e5a"
403 |
404 | [[package]]
405 | name = "ff"
406 | version = "0.13.0"
407 | source = "registry+https://github.com/rust-lang/crates.io-index"
408 | checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
409 | dependencies = [
410 | "bitvec",
411 | "byteorder",
412 | "ff_derive",
413 | "rand_core",
414 | "subtle",
415 | ]
416 |
417 | [[package]]
418 | name = "ff_derive"
419 | version = "0.13.0"
420 | source = "registry+https://github.com/rust-lang/crates.io-index"
421 | checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a"
422 | dependencies = [
423 | "addchain",
424 | "cfg-if",
425 | "num-bigint 0.3.3",
426 | "num-integer",
427 | "num-traits",
428 | "proc-macro2",
429 | "quote",
430 | "syn 1.0.109",
431 | ]
432 |
433 | [[package]]
434 | name = "flate2"
435 | version = "1.0.27"
436 | source = "registry+https://github.com/rust-lang/crates.io-index"
437 | checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
438 | dependencies = [
439 | "crc32fast",
440 | "miniz_oxide",
441 | ]
442 |
443 | [[package]]
444 | name = "flume"
445 | version = "0.10.14"
446 | source = "registry+https://github.com/rust-lang/crates.io-index"
447 | checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
448 | dependencies = [
449 | "spin 0.9.8",
450 | ]
451 |
452 | [[package]]
453 | name = "funty"
454 | version = "2.0.0"
455 | source = "registry+https://github.com/rust-lang/crates.io-index"
456 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
457 |
458 | [[package]]
459 | name = "generic-array"
460 | version = "0.12.4"
461 | source = "registry+https://github.com/rust-lang/crates.io-index"
462 | checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
463 | dependencies = [
464 | "typenum",
465 | ]
466 |
467 | [[package]]
468 | name = "generic-array"
469 | version = "0.14.7"
470 | source = "registry+https://github.com/rust-lang/crates.io-index"
471 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
472 | dependencies = [
473 | "typenum",
474 | "version_check",
475 | ]
476 |
477 | [[package]]
478 | name = "getrandom"
479 | version = "0.2.10"
480 | source = "registry+https://github.com/rust-lang/crates.io-index"
481 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
482 | dependencies = [
483 | "cfg-if",
484 | "libc",
485 | "wasi",
486 | ]
487 |
488 | [[package]]
489 | name = "glob"
490 | version = "0.3.1"
491 | source = "registry+https://github.com/rust-lang/crates.io-index"
492 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
493 |
494 | [[package]]
495 | name = "group"
496 | version = "0.13.0"
497 | source = "registry+https://github.com/rust-lang/crates.io-index"
498 | checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
499 | dependencies = [
500 | "ff",
501 | "rand",
502 | "rand_core",
503 | "rand_xorshift",
504 | "subtle",
505 | ]
506 |
507 | [[package]]
508 | name = "halo2curves"
509 | version = "0.4.0"
510 | source = "git+https://github.com/privacy-scaling-explorations/halo2curves#723c9762fbb09bf3e82ca9fcb4ed0adc12d11b5a"
511 | dependencies = [
512 | "blake2b_simd",
513 | "ff",
514 | "group",
515 | "lazy_static",
516 | "num-bigint 0.4.3",
517 | "num-traits",
518 | "pairing",
519 | "pasta_curves",
520 | "paste",
521 | "rand",
522 | "rand_core",
523 | "serde",
524 | "serde_arrays",
525 | "static_assertions",
526 | "subtle",
527 | ]
528 |
529 | [[package]]
530 | name = "hermit-abi"
531 | version = "0.3.2"
532 | source = "registry+https://github.com/rust-lang/crates.io-index"
533 | checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
534 |
535 | [[package]]
536 | name = "hex"
537 | version = "0.4.3"
538 | source = "registry+https://github.com/rust-lang/crates.io-index"
539 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
540 | dependencies = [
541 | "serde",
542 | ]
543 |
544 | [[package]]
545 | name = "hex-literal"
546 | version = "0.3.4"
547 | source = "registry+https://github.com/rust-lang/crates.io-index"
548 | checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
549 |
550 | [[package]]
551 | name = "itertools"
552 | version = "0.8.2"
553 | source = "registry+https://github.com/rust-lang/crates.io-index"
554 | checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
555 | dependencies = [
556 | "either",
557 | ]
558 |
559 | [[package]]
560 | name = "itertools"
561 | version = "0.9.0"
562 | source = "registry+https://github.com/rust-lang/crates.io-index"
563 | checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
564 | dependencies = [
565 | "either",
566 | ]
567 |
568 | [[package]]
569 | name = "itoa"
570 | version = "1.0.9"
571 | source = "registry+https://github.com/rust-lang/crates.io-index"
572 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
573 |
574 | [[package]]
575 | name = "js-sys"
576 | version = "0.3.64"
577 | source = "registry+https://github.com/rust-lang/crates.io-index"
578 | checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
579 | dependencies = [
580 | "wasm-bindgen",
581 | ]
582 |
583 | [[package]]
584 | name = "keccak"
585 | version = "0.1.4"
586 | source = "registry+https://github.com/rust-lang/crates.io-index"
587 | checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
588 | dependencies = [
589 | "cpufeatures",
590 | ]
591 |
592 | [[package]]
593 | name = "lazy_static"
594 | version = "1.4.0"
595 | source = "registry+https://github.com/rust-lang/crates.io-index"
596 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
597 | dependencies = [
598 | "spin 0.5.2",
599 | ]
600 |
601 | [[package]]
602 | name = "libc"
603 | version = "0.2.147"
604 | source = "registry+https://github.com/rust-lang/crates.io-index"
605 | checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
606 |
607 | [[package]]
608 | name = "lock_api"
609 | version = "0.4.10"
610 | source = "registry+https://github.com/rust-lang/crates.io-index"
611 | checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
612 | dependencies = [
613 | "autocfg",
614 | "scopeguard",
615 | ]
616 |
617 | [[package]]
618 | name = "log"
619 | version = "0.4.20"
620 | source = "registry+https://github.com/rust-lang/crates.io-index"
621 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
622 |
623 | [[package]]
624 | name = "memmap2"
625 | version = "0.5.10"
626 | source = "registry+https://github.com/rust-lang/crates.io-index"
627 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
628 | dependencies = [
629 | "libc",
630 | ]
631 |
632 | [[package]]
633 | name = "memoffset"
634 | version = "0.9.0"
635 | source = "registry+https://github.com/rust-lang/crates.io-index"
636 | checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
637 | dependencies = [
638 | "autocfg",
639 | ]
640 |
641 | [[package]]
642 | name = "miniz_oxide"
643 | version = "0.7.1"
644 | source = "registry+https://github.com/rust-lang/crates.io-index"
645 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
646 | dependencies = [
647 | "adler",
648 | ]
649 |
650 | [[package]]
651 | name = "neptune"
652 | version = "10.0.0"
653 | source = "registry+https://github.com/rust-lang/crates.io-index"
654 | checksum = "bb9a64337e6d214e2a48db5714ef18cf1e5a7bbff9043838fdf6e57ce5659335"
655 | dependencies = [
656 | "bellperson",
657 | "blake2s_simd 0.5.11",
658 | "blstrs",
659 | "byteorder",
660 | "ff",
661 | "generic-array 0.14.7",
662 | "itertools 0.8.2",
663 | "log",
664 | "pasta_curves",
665 | "serde",
666 | "trait-set",
667 | ]
668 |
669 | [[package]]
670 | name = "nova-ecdsa"
671 | version = "0.1.0"
672 | dependencies = [
673 | "ff",
674 | "nova-scotia",
675 | "nova-snark",
676 | "serde",
677 | "serde_json",
678 | ]
679 |
680 | [[package]]
681 | name = "nova-scotia"
682 | version = "0.4.0"
683 | source = "git+https://github.com/dmpierre/Nova-Scotia.git?branch=secp_secq#a590e4572a62e8515504313f70aa9ff9be9d4298"
684 | dependencies = [
685 | "anyhow",
686 | "bellperson",
687 | "byteorder",
688 | "ff",
689 | "hex-literal",
690 | "itertools 0.9.0",
691 | "js-sys",
692 | "nova-snark",
693 | "num-bigint 0.4.3",
694 | "num-traits",
695 | "pasta_curves",
696 | "rayon",
697 | "serde",
698 | "serde_json",
699 | "wasm-bindgen",
700 | "wasm-bindgen-futures",
701 | "wasm-bindgen-rayon",
702 | ]
703 |
704 | [[package]]
705 | name = "nova-snark"
706 | version = "0.21.0"
707 | source = "git+https://github.com/dmpierre/Nova.git?branch=dev-secpsecq-031738d#1d4179cbc8e3ec9b5ef5ab3b11762990337240e0"
708 | dependencies = [
709 | "bellperson",
710 | "bincode",
711 | "bitvec",
712 | "byteorder",
713 | "digest 0.8.1",
714 | "ff",
715 | "flate2",
716 | "generic-array 0.14.7",
717 | "halo2curves",
718 | "itertools 0.9.0",
719 | "neptune",
720 | "num-bigint 0.4.3",
721 | "num-integer",
722 | "num-traits",
723 | "pasta-msm",
724 | "pasta_curves",
725 | "rand_chacha",
726 | "rand_core",
727 | "rayon",
728 | "serde",
729 | "sha3",
730 | "subtle",
731 | "thiserror",
732 | ]
733 |
734 | [[package]]
735 | name = "num-bigint"
736 | version = "0.3.3"
737 | source = "registry+https://github.com/rust-lang/crates.io-index"
738 | checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3"
739 | dependencies = [
740 | "autocfg",
741 | "num-integer",
742 | "num-traits",
743 | ]
744 |
745 | [[package]]
746 | name = "num-bigint"
747 | version = "0.4.3"
748 | source = "registry+https://github.com/rust-lang/crates.io-index"
749 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
750 | dependencies = [
751 | "autocfg",
752 | "num-integer",
753 | "num-traits",
754 | "rand",
755 | "serde",
756 | ]
757 |
758 | [[package]]
759 | name = "num-integer"
760 | version = "0.1.45"
761 | source = "registry+https://github.com/rust-lang/crates.io-index"
762 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
763 | dependencies = [
764 | "autocfg",
765 | "num-traits",
766 | ]
767 |
768 | [[package]]
769 | name = "num-traits"
770 | version = "0.2.16"
771 | source = "registry+https://github.com/rust-lang/crates.io-index"
772 | checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
773 | dependencies = [
774 | "autocfg",
775 | ]
776 |
777 | [[package]]
778 | name = "num_cpus"
779 | version = "1.16.0"
780 | source = "registry+https://github.com/rust-lang/crates.io-index"
781 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
782 | dependencies = [
783 | "hermit-abi",
784 | "libc",
785 | ]
786 |
787 | [[package]]
788 | name = "once_cell"
789 | version = "1.18.0"
790 | source = "registry+https://github.com/rust-lang/crates.io-index"
791 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
792 |
793 | [[package]]
794 | name = "opaque-debug"
795 | version = "0.2.3"
796 | source = "registry+https://github.com/rust-lang/crates.io-index"
797 | checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
798 |
799 | [[package]]
800 | name = "pairing"
801 | version = "0.23.0"
802 | source = "registry+https://github.com/rust-lang/crates.io-index"
803 | checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f"
804 | dependencies = [
805 | "group",
806 | ]
807 |
808 | [[package]]
809 | name = "pasta-msm"
810 | version = "0.1.4"
811 | source = "registry+https://github.com/rust-lang/crates.io-index"
812 | checksum = "9e85d75eba3e7e9ee3bd11342b669185e194dadda3557934bc1000d9b87159d3"
813 | dependencies = [
814 | "cc",
815 | "pasta_curves",
816 | "semolina",
817 | "sppark",
818 | "which",
819 | ]
820 |
821 | [[package]]
822 | name = "pasta_curves"
823 | version = "0.5.1"
824 | source = "registry+https://github.com/rust-lang/crates.io-index"
825 | checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095"
826 | dependencies = [
827 | "blake2b_simd",
828 | "ff",
829 | "group",
830 | "hex",
831 | "lazy_static",
832 | "rand",
833 | "serde",
834 | "static_assertions",
835 | "subtle",
836 | ]
837 |
838 | [[package]]
839 | name = "paste"
840 | version = "1.0.14"
841 | source = "registry+https://github.com/rust-lang/crates.io-index"
842 | checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
843 |
844 | [[package]]
845 | name = "ppv-lite86"
846 | version = "0.2.17"
847 | source = "registry+https://github.com/rust-lang/crates.io-index"
848 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
849 |
850 | [[package]]
851 | name = "proc-macro2"
852 | version = "1.0.66"
853 | source = "registry+https://github.com/rust-lang/crates.io-index"
854 | checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
855 | dependencies = [
856 | "unicode-ident",
857 | ]
858 |
859 | [[package]]
860 | name = "quote"
861 | version = "1.0.33"
862 | source = "registry+https://github.com/rust-lang/crates.io-index"
863 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
864 | dependencies = [
865 | "proc-macro2",
866 | ]
867 |
868 | [[package]]
869 | name = "radium"
870 | version = "0.7.0"
871 | source = "registry+https://github.com/rust-lang/crates.io-index"
872 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
873 |
874 | [[package]]
875 | name = "rand"
876 | version = "0.8.5"
877 | source = "registry+https://github.com/rust-lang/crates.io-index"
878 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
879 | dependencies = [
880 | "libc",
881 | "rand_chacha",
882 | "rand_core",
883 | ]
884 |
885 | [[package]]
886 | name = "rand_chacha"
887 | version = "0.3.1"
888 | source = "registry+https://github.com/rust-lang/crates.io-index"
889 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
890 | dependencies = [
891 | "ppv-lite86",
892 | "rand_core",
893 | ]
894 |
895 | [[package]]
896 | name = "rand_core"
897 | version = "0.6.4"
898 | source = "registry+https://github.com/rust-lang/crates.io-index"
899 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
900 | dependencies = [
901 | "getrandom",
902 | ]
903 |
904 | [[package]]
905 | name = "rand_xorshift"
906 | version = "0.3.0"
907 | source = "registry+https://github.com/rust-lang/crates.io-index"
908 | checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
909 | dependencies = [
910 | "rand_core",
911 | ]
912 |
913 | [[package]]
914 | name = "rayon"
915 | version = "1.7.0"
916 | source = "registry+https://github.com/rust-lang/crates.io-index"
917 | checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
918 | dependencies = [
919 | "either",
920 | "rayon-core",
921 | ]
922 |
923 | [[package]]
924 | name = "rayon-core"
925 | version = "1.11.0"
926 | source = "registry+https://github.com/rust-lang/crates.io-index"
927 | checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
928 | dependencies = [
929 | "crossbeam-channel",
930 | "crossbeam-deque",
931 | "crossbeam-utils",
932 | "num_cpus",
933 | ]
934 |
935 | [[package]]
936 | name = "rustversion"
937 | version = "1.0.14"
938 | source = "registry+https://github.com/rust-lang/crates.io-index"
939 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
940 |
941 | [[package]]
942 | name = "ryu"
943 | version = "1.0.15"
944 | source = "registry+https://github.com/rust-lang/crates.io-index"
945 | checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
946 |
947 | [[package]]
948 | name = "scopeguard"
949 | version = "1.2.0"
950 | source = "registry+https://github.com/rust-lang/crates.io-index"
951 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
952 |
953 | [[package]]
954 | name = "semolina"
955 | version = "0.1.4"
956 | source = "registry+https://github.com/rust-lang/crates.io-index"
957 | checksum = "2b0111fd4fa831becb0606b9a2285ef3bee3c6a70d690209b8ae9514e9befe23"
958 | dependencies = [
959 | "cc",
960 | "glob",
961 | ]
962 |
963 | [[package]]
964 | name = "serde"
965 | version = "1.0.185"
966 | source = "registry+https://github.com/rust-lang/crates.io-index"
967 | checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
968 | dependencies = [
969 | "serde_derive",
970 | ]
971 |
972 | [[package]]
973 | name = "serde_arrays"
974 | version = "0.1.0"
975 | source = "registry+https://github.com/rust-lang/crates.io-index"
976 | checksum = "38636132857f68ec3d5f3eb121166d2af33cb55174c4d5ff645db6165cbef0fd"
977 | dependencies = [
978 | "serde",
979 | ]
980 |
981 | [[package]]
982 | name = "serde_derive"
983 | version = "1.0.185"
984 | source = "registry+https://github.com/rust-lang/crates.io-index"
985 | checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
986 | dependencies = [
987 | "proc-macro2",
988 | "quote",
989 | "syn 2.0.29",
990 | ]
991 |
992 | [[package]]
993 | name = "serde_json"
994 | version = "1.0.105"
995 | source = "registry+https://github.com/rust-lang/crates.io-index"
996 | checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
997 | dependencies = [
998 | "itoa",
999 | "ryu",
1000 | "serde",
1001 | ]
1002 |
1003 | [[package]]
1004 | name = "sha2"
1005 | version = "0.10.7"
1006 | source = "registry+https://github.com/rust-lang/crates.io-index"
1007 | checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
1008 | dependencies = [
1009 | "cfg-if",
1010 | "cpufeatures",
1011 | "digest 0.10.7",
1012 | ]
1013 |
1014 | [[package]]
1015 | name = "sha3"
1016 | version = "0.8.2"
1017 | source = "registry+https://github.com/rust-lang/crates.io-index"
1018 | checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf"
1019 | dependencies = [
1020 | "block-buffer 0.7.3",
1021 | "byte-tools",
1022 | "digest 0.8.1",
1023 | "keccak",
1024 | "opaque-debug",
1025 | ]
1026 |
1027 | [[package]]
1028 | name = "spin"
1029 | version = "0.5.2"
1030 | source = "registry+https://github.com/rust-lang/crates.io-index"
1031 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
1032 |
1033 | [[package]]
1034 | name = "spin"
1035 | version = "0.9.8"
1036 | source = "registry+https://github.com/rust-lang/crates.io-index"
1037 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
1038 | dependencies = [
1039 | "lock_api",
1040 | ]
1041 |
1042 | [[package]]
1043 | name = "spmc"
1044 | version = "0.3.0"
1045 | source = "registry+https://github.com/rust-lang/crates.io-index"
1046 | checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5"
1047 |
1048 | [[package]]
1049 | name = "sppark"
1050 | version = "0.1.3"
1051 | source = "registry+https://github.com/rust-lang/crates.io-index"
1052 | checksum = "cfb9486baeb35ca1197c4df27451d4df5bd321e15da94c1ddb89670f9e94896a"
1053 | dependencies = [
1054 | "cc",
1055 | "which",
1056 | ]
1057 |
1058 | [[package]]
1059 | name = "static_assertions"
1060 | version = "1.1.0"
1061 | source = "registry+https://github.com/rust-lang/crates.io-index"
1062 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1063 |
1064 | [[package]]
1065 | name = "subtle"
1066 | version = "2.5.0"
1067 | source = "registry+https://github.com/rust-lang/crates.io-index"
1068 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
1069 |
1070 | [[package]]
1071 | name = "syn"
1072 | version = "1.0.109"
1073 | source = "registry+https://github.com/rust-lang/crates.io-index"
1074 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1075 | dependencies = [
1076 | "proc-macro2",
1077 | "quote",
1078 | "unicode-ident",
1079 | ]
1080 |
1081 | [[package]]
1082 | name = "syn"
1083 | version = "2.0.29"
1084 | source = "registry+https://github.com/rust-lang/crates.io-index"
1085 | checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
1086 | dependencies = [
1087 | "proc-macro2",
1088 | "quote",
1089 | "unicode-ident",
1090 | ]
1091 |
1092 | [[package]]
1093 | name = "tap"
1094 | version = "1.0.1"
1095 | source = "registry+https://github.com/rust-lang/crates.io-index"
1096 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
1097 |
1098 | [[package]]
1099 | name = "thiserror"
1100 | version = "1.0.47"
1101 | source = "registry+https://github.com/rust-lang/crates.io-index"
1102 | checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
1103 | dependencies = [
1104 | "thiserror-impl",
1105 | ]
1106 |
1107 | [[package]]
1108 | name = "thiserror-impl"
1109 | version = "1.0.47"
1110 | source = "registry+https://github.com/rust-lang/crates.io-index"
1111 | checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
1112 | dependencies = [
1113 | "proc-macro2",
1114 | "quote",
1115 | "syn 2.0.29",
1116 | ]
1117 |
1118 | [[package]]
1119 | name = "threadpool"
1120 | version = "1.8.1"
1121 | source = "registry+https://github.com/rust-lang/crates.io-index"
1122 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
1123 | dependencies = [
1124 | "num_cpus",
1125 | ]
1126 |
1127 | [[package]]
1128 | name = "trait-set"
1129 | version = "0.3.0"
1130 | source = "registry+https://github.com/rust-lang/crates.io-index"
1131 | checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625"
1132 | dependencies = [
1133 | "proc-macro2",
1134 | "quote",
1135 | "syn 1.0.109",
1136 | ]
1137 |
1138 | [[package]]
1139 | name = "typenum"
1140 | version = "1.16.0"
1141 | source = "registry+https://github.com/rust-lang/crates.io-index"
1142 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
1143 |
1144 | [[package]]
1145 | name = "unicode-ident"
1146 | version = "1.0.11"
1147 | source = "registry+https://github.com/rust-lang/crates.io-index"
1148 | checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
1149 |
1150 | [[package]]
1151 | name = "version_check"
1152 | version = "0.9.4"
1153 | source = "registry+https://github.com/rust-lang/crates.io-index"
1154 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1155 |
1156 | [[package]]
1157 | name = "wasi"
1158 | version = "0.11.0+wasi-snapshot-preview1"
1159 | source = "registry+https://github.com/rust-lang/crates.io-index"
1160 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1161 |
1162 | [[package]]
1163 | name = "wasm-bindgen"
1164 | version = "0.2.87"
1165 | source = "registry+https://github.com/rust-lang/crates.io-index"
1166 | checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
1167 | dependencies = [
1168 | "cfg-if",
1169 | "serde",
1170 | "serde_json",
1171 | "wasm-bindgen-macro",
1172 | ]
1173 |
1174 | [[package]]
1175 | name = "wasm-bindgen-backend"
1176 | version = "0.2.87"
1177 | source = "registry+https://github.com/rust-lang/crates.io-index"
1178 | checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
1179 | dependencies = [
1180 | "bumpalo",
1181 | "log",
1182 | "once_cell",
1183 | "proc-macro2",
1184 | "quote",
1185 | "syn 2.0.29",
1186 | "wasm-bindgen-shared",
1187 | ]
1188 |
1189 | [[package]]
1190 | name = "wasm-bindgen-futures"
1191 | version = "0.4.37"
1192 | source = "registry+https://github.com/rust-lang/crates.io-index"
1193 | checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
1194 | dependencies = [
1195 | "cfg-if",
1196 | "js-sys",
1197 | "wasm-bindgen",
1198 | "web-sys",
1199 | ]
1200 |
1201 | [[package]]
1202 | name = "wasm-bindgen-macro"
1203 | version = "0.2.87"
1204 | source = "registry+https://github.com/rust-lang/crates.io-index"
1205 | checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
1206 | dependencies = [
1207 | "quote",
1208 | "wasm-bindgen-macro-support",
1209 | ]
1210 |
1211 | [[package]]
1212 | name = "wasm-bindgen-macro-support"
1213 | version = "0.2.87"
1214 | source = "registry+https://github.com/rust-lang/crates.io-index"
1215 | checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
1216 | dependencies = [
1217 | "proc-macro2",
1218 | "quote",
1219 | "syn 2.0.29",
1220 | "wasm-bindgen-backend",
1221 | "wasm-bindgen-shared",
1222 | ]
1223 |
1224 | [[package]]
1225 | name = "wasm-bindgen-rayon"
1226 | version = "1.0.3"
1227 | source = "registry+https://github.com/rust-lang/crates.io-index"
1228 | checksum = "df87c67450805c305d3ae44a3ac537b0253d029153c25afc3ecd2edc36ccafb1"
1229 | dependencies = [
1230 | "js-sys",
1231 | "rayon",
1232 | "spmc",
1233 | "wasm-bindgen",
1234 | ]
1235 |
1236 | [[package]]
1237 | name = "wasm-bindgen-shared"
1238 | version = "0.2.87"
1239 | source = "registry+https://github.com/rust-lang/crates.io-index"
1240 | checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
1241 |
1242 | [[package]]
1243 | name = "web-sys"
1244 | version = "0.3.64"
1245 | source = "registry+https://github.com/rust-lang/crates.io-index"
1246 | checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
1247 | dependencies = [
1248 | "js-sys",
1249 | "wasm-bindgen",
1250 | ]
1251 |
1252 | [[package]]
1253 | name = "which"
1254 | version = "4.4.0"
1255 | source = "registry+https://github.com/rust-lang/crates.io-index"
1256 | checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
1257 | dependencies = [
1258 | "either",
1259 | "libc",
1260 | "once_cell",
1261 | ]
1262 |
1263 | [[package]]
1264 | name = "wyz"
1265 | version = "0.5.1"
1266 | source = "registry+https://github.com/rust-lang/crates.io-index"
1267 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
1268 | dependencies = [
1269 | "tap",
1270 | ]
1271 |
1272 | [[package]]
1273 | name = "yastl"
1274 | version = "0.1.2"
1275 | source = "registry+https://github.com/rust-lang/crates.io-index"
1276 | checksum = "8ca6c5a4d66c1a9ea261811cf4773c27343de7e5033e1b75ea3f297dc7db3c1a"
1277 | dependencies = [
1278 | "flume",
1279 | "scopeguard",
1280 | ]
1281 |
1282 | [[package]]
1283 | name = "zeroize"
1284 | version = "1.6.0"
1285 | source = "registry+https://github.com/rust-lang/crates.io-index"
1286 | checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
1287 | dependencies = [
1288 | "zeroize_derive",
1289 | ]
1290 |
1291 | [[package]]
1292 | name = "zeroize_derive"
1293 | version = "1.4.2"
1294 | source = "registry+https://github.com/rust-lang/crates.io-index"
1295 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
1296 | dependencies = [
1297 | "proc-macro2",
1298 | "quote",
1299 | "syn 2.0.29",
1300 | ]
1301 |
--------------------------------------------------------------------------------
/nova-ecdsa-browser/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "addchain"
7 | version = "0.2.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570"
10 | dependencies = [
11 | "num-bigint 0.3.3",
12 | "num-integer",
13 | "num-traits",
14 | ]
15 |
16 | [[package]]
17 | name = "adler"
18 | version = "1.0.2"
19 | source = "registry+https://github.com/rust-lang/crates.io-index"
20 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
21 |
22 | [[package]]
23 | name = "anyhow"
24 | version = "1.0.75"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
27 |
28 | [[package]]
29 | name = "arrayref"
30 | version = "0.3.7"
31 | source = "registry+https://github.com/rust-lang/crates.io-index"
32 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
33 |
34 | [[package]]
35 | name = "arrayvec"
36 | version = "0.5.2"
37 | source = "registry+https://github.com/rust-lang/crates.io-index"
38 | checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
39 |
40 | [[package]]
41 | name = "arrayvec"
42 | version = "0.7.4"
43 | source = "registry+https://github.com/rust-lang/crates.io-index"
44 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
45 |
46 | [[package]]
47 | name = "autocfg"
48 | version = "1.1.0"
49 | source = "registry+https://github.com/rust-lang/crates.io-index"
50 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
51 |
52 | [[package]]
53 | name = "bellperson"
54 | version = "0.25.0"
55 | source = "registry+https://github.com/rust-lang/crates.io-index"
56 | checksum = "93eaee4b4753554139ae52ecf0e8b8c128cbc561b32e1bfaa32f70cba8518c1f"
57 | dependencies = [
58 | "bincode",
59 | "blake2s_simd 1.0.1",
60 | "blstrs",
61 | "byteorder",
62 | "crossbeam-channel",
63 | "digest 0.10.7",
64 | "ec-gpu",
65 | "ec-gpu-gen",
66 | "ff",
67 | "group",
68 | "log",
69 | "memmap2",
70 | "pairing",
71 | "rand",
72 | "rand_core",
73 | "rayon",
74 | "rustversion",
75 | "serde",
76 | "sha2",
77 | "thiserror",
78 | ]
79 |
80 | [[package]]
81 | name = "bincode"
82 | version = "1.3.3"
83 | source = "registry+https://github.com/rust-lang/crates.io-index"
84 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
85 | dependencies = [
86 | "serde",
87 | ]
88 |
89 | [[package]]
90 | name = "bitvec"
91 | version = "1.0.1"
92 | source = "registry+https://github.com/rust-lang/crates.io-index"
93 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
94 | dependencies = [
95 | "funty",
96 | "radium",
97 | "tap",
98 | "wyz",
99 | ]
100 |
101 | [[package]]
102 | name = "blake2b_simd"
103 | version = "1.0.1"
104 | source = "registry+https://github.com/rust-lang/crates.io-index"
105 | checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
106 | dependencies = [
107 | "arrayref",
108 | "arrayvec 0.7.4",
109 | "constant_time_eq 0.2.6",
110 | ]
111 |
112 | [[package]]
113 | name = "blake2s_simd"
114 | version = "0.5.11"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2"
117 | dependencies = [
118 | "arrayref",
119 | "arrayvec 0.5.2",
120 | "constant_time_eq 0.1.5",
121 | ]
122 |
123 | [[package]]
124 | name = "blake2s_simd"
125 | version = "1.0.1"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f"
128 | dependencies = [
129 | "arrayref",
130 | "arrayvec 0.7.4",
131 | "constant_time_eq 0.2.6",
132 | ]
133 |
134 | [[package]]
135 | name = "block-buffer"
136 | version = "0.7.3"
137 | source = "registry+https://github.com/rust-lang/crates.io-index"
138 | checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
139 | dependencies = [
140 | "block-padding",
141 | "byte-tools",
142 | "byteorder",
143 | "generic-array 0.12.4",
144 | ]
145 |
146 | [[package]]
147 | name = "block-buffer"
148 | version = "0.10.4"
149 | source = "registry+https://github.com/rust-lang/crates.io-index"
150 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
151 | dependencies = [
152 | "generic-array 0.14.7",
153 | ]
154 |
155 | [[package]]
156 | name = "block-padding"
157 | version = "0.1.5"
158 | source = "registry+https://github.com/rust-lang/crates.io-index"
159 | checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
160 | dependencies = [
161 | "byte-tools",
162 | ]
163 |
164 | [[package]]
165 | name = "blst"
166 | version = "0.3.11"
167 | source = "registry+https://github.com/rust-lang/crates.io-index"
168 | checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b"
169 | dependencies = [
170 | "cc",
171 | "glob",
172 | "threadpool",
173 | "zeroize",
174 | ]
175 |
176 | [[package]]
177 | name = "blstrs"
178 | version = "0.7.1"
179 | source = "registry+https://github.com/rust-lang/crates.io-index"
180 | checksum = "7a8a8ed6fefbeef4a8c7b460e4110e12c5e22a5b7cf32621aae6ad650c4dcf29"
181 | dependencies = [
182 | "blst",
183 | "byte-slice-cast",
184 | "ff",
185 | "group",
186 | "pairing",
187 | "rand_core",
188 | "serde",
189 | "subtle",
190 | ]
191 |
192 | [[package]]
193 | name = "bumpalo"
194 | version = "3.13.0"
195 | source = "registry+https://github.com/rust-lang/crates.io-index"
196 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
197 |
198 | [[package]]
199 | name = "byte-slice-cast"
200 | version = "1.2.2"
201 | source = "registry+https://github.com/rust-lang/crates.io-index"
202 | checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c"
203 |
204 | [[package]]
205 | name = "byte-tools"
206 | version = "0.3.1"
207 | source = "registry+https://github.com/rust-lang/crates.io-index"
208 | checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
209 |
210 | [[package]]
211 | name = "byteorder"
212 | version = "1.4.3"
213 | source = "registry+https://github.com/rust-lang/crates.io-index"
214 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
215 |
216 | [[package]]
217 | name = "cc"
218 | version = "1.0.83"
219 | source = "registry+https://github.com/rust-lang/crates.io-index"
220 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
221 | dependencies = [
222 | "libc",
223 | ]
224 |
225 | [[package]]
226 | name = "cfg-if"
227 | version = "1.0.0"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
230 |
231 | [[package]]
232 | name = "console_error_panic_hook"
233 | version = "0.1.7"
234 | source = "registry+https://github.com/rust-lang/crates.io-index"
235 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
236 | dependencies = [
237 | "cfg-if",
238 | "wasm-bindgen",
239 | ]
240 |
241 | [[package]]
242 | name = "constant_time_eq"
243 | version = "0.1.5"
244 | source = "registry+https://github.com/rust-lang/crates.io-index"
245 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
246 |
247 | [[package]]
248 | name = "constant_time_eq"
249 | version = "0.2.6"
250 | source = "registry+https://github.com/rust-lang/crates.io-index"
251 | checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6"
252 |
253 | [[package]]
254 | name = "cpufeatures"
255 | version = "0.2.9"
256 | source = "registry+https://github.com/rust-lang/crates.io-index"
257 | checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
258 | dependencies = [
259 | "libc",
260 | ]
261 |
262 | [[package]]
263 | name = "crc32fast"
264 | version = "1.3.2"
265 | source = "registry+https://github.com/rust-lang/crates.io-index"
266 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
267 | dependencies = [
268 | "cfg-if",
269 | ]
270 |
271 | [[package]]
272 | name = "crossbeam-channel"
273 | version = "0.5.8"
274 | source = "registry+https://github.com/rust-lang/crates.io-index"
275 | checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
276 | dependencies = [
277 | "cfg-if",
278 | "crossbeam-utils",
279 | ]
280 |
281 | [[package]]
282 | name = "crossbeam-deque"
283 | version = "0.8.3"
284 | source = "registry+https://github.com/rust-lang/crates.io-index"
285 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
286 | dependencies = [
287 | "cfg-if",
288 | "crossbeam-epoch",
289 | "crossbeam-utils",
290 | ]
291 |
292 | [[package]]
293 | name = "crossbeam-epoch"
294 | version = "0.9.15"
295 | source = "registry+https://github.com/rust-lang/crates.io-index"
296 | checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
297 | dependencies = [
298 | "autocfg",
299 | "cfg-if",
300 | "crossbeam-utils",
301 | "memoffset",
302 | "scopeguard",
303 | ]
304 |
305 | [[package]]
306 | name = "crossbeam-utils"
307 | version = "0.8.16"
308 | source = "registry+https://github.com/rust-lang/crates.io-index"
309 | checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
310 | dependencies = [
311 | "cfg-if",
312 | ]
313 |
314 | [[package]]
315 | name = "crypto-common"
316 | version = "0.1.6"
317 | source = "registry+https://github.com/rust-lang/crates.io-index"
318 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
319 | dependencies = [
320 | "generic-array 0.14.7",
321 | "typenum",
322 | ]
323 |
324 | [[package]]
325 | name = "digest"
326 | version = "0.8.1"
327 | source = "registry+https://github.com/rust-lang/crates.io-index"
328 | checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
329 | dependencies = [
330 | "generic-array 0.12.4",
331 | ]
332 |
333 | [[package]]
334 | name = "digest"
335 | version = "0.10.7"
336 | source = "registry+https://github.com/rust-lang/crates.io-index"
337 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
338 | dependencies = [
339 | "block-buffer 0.10.4",
340 | "crypto-common",
341 | ]
342 |
343 | [[package]]
344 | name = "ec-gpu"
345 | version = "0.2.0"
346 | source = "registry+https://github.com/rust-lang/crates.io-index"
347 | checksum = "bd63582de2b59ea1aa48d7c1941b5d87618d95484397521b3acdfa0e1e9f5e45"
348 |
349 | [[package]]
350 | name = "ec-gpu-gen"
351 | version = "0.6.0"
352 | source = "registry+https://github.com/rust-lang/crates.io-index"
353 | checksum = "892df2aa20abec5b816e15d5d6383892ca142077708efa3067dd3ac44b75c664"
354 | dependencies = [
355 | "bitvec",
356 | "crossbeam-channel",
357 | "ec-gpu",
358 | "execute",
359 | "ff",
360 | "group",
361 | "hex",
362 | "log",
363 | "num_cpus",
364 | "once_cell",
365 | "rayon",
366 | "sha2",
367 | "thiserror",
368 | "yastl",
369 | ]
370 |
371 | [[package]]
372 | name = "either"
373 | version = "1.9.0"
374 | source = "registry+https://github.com/rust-lang/crates.io-index"
375 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
376 |
377 | [[package]]
378 | name = "execute"
379 | version = "0.2.12"
380 | source = "registry+https://github.com/rust-lang/crates.io-index"
381 | checksum = "16d9a9ea4c04632c16bc5c71a2fcc63d308481f7fc67eb1a1ce6315c44a426ae"
382 | dependencies = [
383 | "execute-command-macro",
384 | "execute-command-tokens",
385 | "generic-array 0.14.7",
386 | ]
387 |
388 | [[package]]
389 | name = "execute-command-macro"
390 | version = "0.1.8"
391 | source = "registry+https://github.com/rust-lang/crates.io-index"
392 | checksum = "a5fbc65a0cf735106743f4c38c9a3671c1e734b5c2c20d21a3c93c696daa3157"
393 | dependencies = [
394 | "execute-command-macro-impl",
395 | ]
396 |
397 | [[package]]
398 | name = "execute-command-macro-impl"
399 | version = "0.1.9"
400 | source = "registry+https://github.com/rust-lang/crates.io-index"
401 | checksum = "55a9a55d1dab3b07854648d48e366f684aefe2ac78ae28cec3bf65e3cd53d9a3"
402 | dependencies = [
403 | "execute-command-tokens",
404 | "quote",
405 | "syn 2.0.29",
406 | ]
407 |
408 | [[package]]
409 | name = "execute-command-tokens"
410 | version = "0.1.6"
411 | source = "registry+https://github.com/rust-lang/crates.io-index"
412 | checksum = "8ba569491c70ec8471e34aa7e9c0b9e82bb5d2464c0398442d17d3c4af814e5a"
413 |
414 | [[package]]
415 | name = "ff"
416 | version = "0.13.0"
417 | source = "registry+https://github.com/rust-lang/crates.io-index"
418 | checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
419 | dependencies = [
420 | "bitvec",
421 | "byteorder",
422 | "ff_derive",
423 | "rand_core",
424 | "subtle",
425 | ]
426 |
427 | [[package]]
428 | name = "ff_derive"
429 | version = "0.13.0"
430 | source = "registry+https://github.com/rust-lang/crates.io-index"
431 | checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a"
432 | dependencies = [
433 | "addchain",
434 | "cfg-if",
435 | "num-bigint 0.3.3",
436 | "num-integer",
437 | "num-traits",
438 | "proc-macro2",
439 | "quote",
440 | "syn 1.0.109",
441 | ]
442 |
443 | [[package]]
444 | name = "flate2"
445 | version = "1.0.27"
446 | source = "registry+https://github.com/rust-lang/crates.io-index"
447 | checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
448 | dependencies = [
449 | "crc32fast",
450 | "miniz_oxide",
451 | ]
452 |
453 | [[package]]
454 | name = "flume"
455 | version = "0.10.14"
456 | source = "registry+https://github.com/rust-lang/crates.io-index"
457 | checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
458 | dependencies = [
459 | "spin 0.9.8",
460 | ]
461 |
462 | [[package]]
463 | name = "funty"
464 | version = "2.0.0"
465 | source = "registry+https://github.com/rust-lang/crates.io-index"
466 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
467 |
468 | [[package]]
469 | name = "generic-array"
470 | version = "0.12.4"
471 | source = "registry+https://github.com/rust-lang/crates.io-index"
472 | checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
473 | dependencies = [
474 | "typenum",
475 | ]
476 |
477 | [[package]]
478 | name = "generic-array"
479 | version = "0.14.7"
480 | source = "registry+https://github.com/rust-lang/crates.io-index"
481 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
482 | dependencies = [
483 | "typenum",
484 | "version_check",
485 | ]
486 |
487 | [[package]]
488 | name = "getrandom"
489 | version = "0.2.10"
490 | source = "registry+https://github.com/rust-lang/crates.io-index"
491 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
492 | dependencies = [
493 | "cfg-if",
494 | "js-sys",
495 | "libc",
496 | "wasi",
497 | "wasm-bindgen",
498 | ]
499 |
500 | [[package]]
501 | name = "glob"
502 | version = "0.3.1"
503 | source = "registry+https://github.com/rust-lang/crates.io-index"
504 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
505 |
506 | [[package]]
507 | name = "group"
508 | version = "0.13.0"
509 | source = "registry+https://github.com/rust-lang/crates.io-index"
510 | checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
511 | dependencies = [
512 | "ff",
513 | "rand",
514 | "rand_core",
515 | "rand_xorshift",
516 | "subtle",
517 | ]
518 |
519 | [[package]]
520 | name = "halo2curves"
521 | version = "0.4.0"
522 | source = "git+https://github.com/privacy-scaling-explorations/halo2curves#1d71d343b3764f6a819513a0cd9a855cd3f6b698"
523 | dependencies = [
524 | "blake2b_simd",
525 | "ff",
526 | "group",
527 | "lazy_static",
528 | "num-bigint 0.4.4",
529 | "num-traits",
530 | "pairing",
531 | "pasta_curves",
532 | "paste",
533 | "rand",
534 | "rand_core",
535 | "serde",
536 | "serde_arrays",
537 | "static_assertions",
538 | "subtle",
539 | ]
540 |
541 | [[package]]
542 | name = "hermit-abi"
543 | version = "0.3.2"
544 | source = "registry+https://github.com/rust-lang/crates.io-index"
545 | checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
546 |
547 | [[package]]
548 | name = "hex"
549 | version = "0.4.3"
550 | source = "registry+https://github.com/rust-lang/crates.io-index"
551 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
552 | dependencies = [
553 | "serde",
554 | ]
555 |
556 | [[package]]
557 | name = "hex-literal"
558 | version = "0.3.4"
559 | source = "registry+https://github.com/rust-lang/crates.io-index"
560 | checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
561 |
562 | [[package]]
563 | name = "itertools"
564 | version = "0.8.2"
565 | source = "registry+https://github.com/rust-lang/crates.io-index"
566 | checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
567 | dependencies = [
568 | "either",
569 | ]
570 |
571 | [[package]]
572 | name = "itertools"
573 | version = "0.9.0"
574 | source = "registry+https://github.com/rust-lang/crates.io-index"
575 | checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
576 | dependencies = [
577 | "either",
578 | ]
579 |
580 | [[package]]
581 | name = "itoa"
582 | version = "1.0.9"
583 | source = "registry+https://github.com/rust-lang/crates.io-index"
584 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
585 |
586 | [[package]]
587 | name = "js-sys"
588 | version = "0.3.64"
589 | source = "registry+https://github.com/rust-lang/crates.io-index"
590 | checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
591 | dependencies = [
592 | "wasm-bindgen",
593 | ]
594 |
595 | [[package]]
596 | name = "keccak"
597 | version = "0.1.4"
598 | source = "registry+https://github.com/rust-lang/crates.io-index"
599 | checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
600 | dependencies = [
601 | "cpufeatures",
602 | ]
603 |
604 | [[package]]
605 | name = "lazy_static"
606 | version = "1.4.0"
607 | source = "registry+https://github.com/rust-lang/crates.io-index"
608 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
609 | dependencies = [
610 | "spin 0.5.2",
611 | ]
612 |
613 | [[package]]
614 | name = "libc"
615 | version = "0.2.147"
616 | source = "registry+https://github.com/rust-lang/crates.io-index"
617 | checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
618 |
619 | [[package]]
620 | name = "lock_api"
621 | version = "0.4.10"
622 | source = "registry+https://github.com/rust-lang/crates.io-index"
623 | checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
624 | dependencies = [
625 | "autocfg",
626 | "scopeguard",
627 | ]
628 |
629 | [[package]]
630 | name = "log"
631 | version = "0.4.20"
632 | source = "registry+https://github.com/rust-lang/crates.io-index"
633 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
634 |
635 | [[package]]
636 | name = "memmap2"
637 | version = "0.5.10"
638 | source = "registry+https://github.com/rust-lang/crates.io-index"
639 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
640 | dependencies = [
641 | "libc",
642 | ]
643 |
644 | [[package]]
645 | name = "memoffset"
646 | version = "0.9.0"
647 | source = "registry+https://github.com/rust-lang/crates.io-index"
648 | checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
649 | dependencies = [
650 | "autocfg",
651 | ]
652 |
653 | [[package]]
654 | name = "miniz_oxide"
655 | version = "0.7.1"
656 | source = "registry+https://github.com/rust-lang/crates.io-index"
657 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
658 | dependencies = [
659 | "adler",
660 | ]
661 |
662 | [[package]]
663 | name = "neptune"
664 | version = "10.0.0"
665 | source = "registry+https://github.com/rust-lang/crates.io-index"
666 | checksum = "bb9a64337e6d214e2a48db5714ef18cf1e5a7bbff9043838fdf6e57ce5659335"
667 | dependencies = [
668 | "bellperson",
669 | "blake2s_simd 0.5.11",
670 | "blstrs",
671 | "byteorder",
672 | "ff",
673 | "generic-array 0.14.7",
674 | "itertools 0.8.2",
675 | "log",
676 | "pasta_curves",
677 | "serde",
678 | "trait-set",
679 | ]
680 |
681 | [[package]]
682 | name = "nova-ecdsa-browser"
683 | version = "0.1.0"
684 | dependencies = [
685 | "console_error_panic_hook",
686 | "ff",
687 | "getrandom",
688 | "js-sys",
689 | "nova-scotia",
690 | "nova-snark",
691 | "num-bigint 0.4.4",
692 | "num-traits",
693 | "rayon",
694 | "serde",
695 | "serde_json",
696 | "wasm-bindgen",
697 | "wasm-bindgen-futures",
698 | "wasm-bindgen-rayon",
699 | "web-sys",
700 | ]
701 |
702 | [[package]]
703 | name = "nova-scotia"
704 | version = "0.4.0"
705 | source = "git+https://github.com/dmpierre/Nova-Scotia.git?branch=secp_secq#a590e4572a62e8515504313f70aa9ff9be9d4298"
706 | dependencies = [
707 | "anyhow",
708 | "bellperson",
709 | "byteorder",
710 | "ff",
711 | "hex-literal",
712 | "itertools 0.9.0",
713 | "js-sys",
714 | "nova-snark",
715 | "num-bigint 0.4.4",
716 | "num-traits",
717 | "pasta_curves",
718 | "rayon",
719 | "serde",
720 | "serde_json",
721 | "wasm-bindgen",
722 | "wasm-bindgen-futures",
723 | "wasm-bindgen-rayon",
724 | ]
725 |
726 | [[package]]
727 | name = "nova-snark"
728 | version = "0.21.0"
729 | source = "git+https://github.com/dmpierre/Nova.git?branch=dev-secpsecq-031738d#1d4179cbc8e3ec9b5ef5ab3b11762990337240e0"
730 | dependencies = [
731 | "bellperson",
732 | "bincode",
733 | "bitvec",
734 | "byteorder",
735 | "digest 0.8.1",
736 | "ff",
737 | "flate2",
738 | "generic-array 0.14.7",
739 | "halo2curves",
740 | "itertools 0.9.0",
741 | "neptune",
742 | "num-bigint 0.4.4",
743 | "num-integer",
744 | "num-traits",
745 | "pasta-msm",
746 | "pasta_curves",
747 | "rand_chacha",
748 | "rand_core",
749 | "rayon",
750 | "serde",
751 | "sha3",
752 | "subtle",
753 | "thiserror",
754 | ]
755 |
756 | [[package]]
757 | name = "num-bigint"
758 | version = "0.3.3"
759 | source = "registry+https://github.com/rust-lang/crates.io-index"
760 | checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3"
761 | dependencies = [
762 | "autocfg",
763 | "num-integer",
764 | "num-traits",
765 | ]
766 |
767 | [[package]]
768 | name = "num-bigint"
769 | version = "0.4.4"
770 | source = "registry+https://github.com/rust-lang/crates.io-index"
771 | checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
772 | dependencies = [
773 | "autocfg",
774 | "num-integer",
775 | "num-traits",
776 | "rand",
777 | "serde",
778 | ]
779 |
780 | [[package]]
781 | name = "num-integer"
782 | version = "0.1.45"
783 | source = "registry+https://github.com/rust-lang/crates.io-index"
784 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
785 | dependencies = [
786 | "autocfg",
787 | "num-traits",
788 | ]
789 |
790 | [[package]]
791 | name = "num-traits"
792 | version = "0.2.16"
793 | source = "registry+https://github.com/rust-lang/crates.io-index"
794 | checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
795 | dependencies = [
796 | "autocfg",
797 | ]
798 |
799 | [[package]]
800 | name = "num_cpus"
801 | version = "1.16.0"
802 | source = "registry+https://github.com/rust-lang/crates.io-index"
803 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
804 | dependencies = [
805 | "hermit-abi",
806 | "libc",
807 | ]
808 |
809 | [[package]]
810 | name = "once_cell"
811 | version = "1.18.0"
812 | source = "registry+https://github.com/rust-lang/crates.io-index"
813 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
814 |
815 | [[package]]
816 | name = "opaque-debug"
817 | version = "0.2.3"
818 | source = "registry+https://github.com/rust-lang/crates.io-index"
819 | checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
820 |
821 | [[package]]
822 | name = "pairing"
823 | version = "0.23.0"
824 | source = "registry+https://github.com/rust-lang/crates.io-index"
825 | checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f"
826 | dependencies = [
827 | "group",
828 | ]
829 |
830 | [[package]]
831 | name = "pasta-msm"
832 | version = "0.1.4"
833 | source = "registry+https://github.com/rust-lang/crates.io-index"
834 | checksum = "9e85d75eba3e7e9ee3bd11342b669185e194dadda3557934bc1000d9b87159d3"
835 | dependencies = [
836 | "cc",
837 | "pasta_curves",
838 | "semolina",
839 | "sppark",
840 | "which",
841 | ]
842 |
843 | [[package]]
844 | name = "pasta_curves"
845 | version = "0.5.1"
846 | source = "registry+https://github.com/rust-lang/crates.io-index"
847 | checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095"
848 | dependencies = [
849 | "blake2b_simd",
850 | "ff",
851 | "group",
852 | "hex",
853 | "lazy_static",
854 | "rand",
855 | "serde",
856 | "static_assertions",
857 | "subtle",
858 | ]
859 |
860 | [[package]]
861 | name = "paste"
862 | version = "1.0.14"
863 | source = "registry+https://github.com/rust-lang/crates.io-index"
864 | checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
865 |
866 | [[package]]
867 | name = "ppv-lite86"
868 | version = "0.2.17"
869 | source = "registry+https://github.com/rust-lang/crates.io-index"
870 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
871 |
872 | [[package]]
873 | name = "proc-macro2"
874 | version = "1.0.66"
875 | source = "registry+https://github.com/rust-lang/crates.io-index"
876 | checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
877 | dependencies = [
878 | "unicode-ident",
879 | ]
880 |
881 | [[package]]
882 | name = "quote"
883 | version = "1.0.33"
884 | source = "registry+https://github.com/rust-lang/crates.io-index"
885 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
886 | dependencies = [
887 | "proc-macro2",
888 | ]
889 |
890 | [[package]]
891 | name = "radium"
892 | version = "0.7.0"
893 | source = "registry+https://github.com/rust-lang/crates.io-index"
894 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
895 |
896 | [[package]]
897 | name = "rand"
898 | version = "0.8.5"
899 | source = "registry+https://github.com/rust-lang/crates.io-index"
900 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
901 | dependencies = [
902 | "libc",
903 | "rand_chacha",
904 | "rand_core",
905 | ]
906 |
907 | [[package]]
908 | name = "rand_chacha"
909 | version = "0.3.1"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
912 | dependencies = [
913 | "ppv-lite86",
914 | "rand_core",
915 | ]
916 |
917 | [[package]]
918 | name = "rand_core"
919 | version = "0.6.4"
920 | source = "registry+https://github.com/rust-lang/crates.io-index"
921 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
922 | dependencies = [
923 | "getrandom",
924 | ]
925 |
926 | [[package]]
927 | name = "rand_xorshift"
928 | version = "0.3.0"
929 | source = "registry+https://github.com/rust-lang/crates.io-index"
930 | checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
931 | dependencies = [
932 | "rand_core",
933 | ]
934 |
935 | [[package]]
936 | name = "rayon"
937 | version = "1.7.0"
938 | source = "registry+https://github.com/rust-lang/crates.io-index"
939 | checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
940 | dependencies = [
941 | "either",
942 | "rayon-core",
943 | ]
944 |
945 | [[package]]
946 | name = "rayon-core"
947 | version = "1.11.0"
948 | source = "registry+https://github.com/rust-lang/crates.io-index"
949 | checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
950 | dependencies = [
951 | "crossbeam-channel",
952 | "crossbeam-deque",
953 | "crossbeam-utils",
954 | "num_cpus",
955 | ]
956 |
957 | [[package]]
958 | name = "rustversion"
959 | version = "1.0.14"
960 | source = "registry+https://github.com/rust-lang/crates.io-index"
961 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
962 |
963 | [[package]]
964 | name = "ryu"
965 | version = "1.0.15"
966 | source = "registry+https://github.com/rust-lang/crates.io-index"
967 | checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
968 |
969 | [[package]]
970 | name = "scopeguard"
971 | version = "1.2.0"
972 | source = "registry+https://github.com/rust-lang/crates.io-index"
973 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
974 |
975 | [[package]]
976 | name = "semolina"
977 | version = "0.1.4"
978 | source = "registry+https://github.com/rust-lang/crates.io-index"
979 | checksum = "2b0111fd4fa831becb0606b9a2285ef3bee3c6a70d690209b8ae9514e9befe23"
980 | dependencies = [
981 | "cc",
982 | "glob",
983 | ]
984 |
985 | [[package]]
986 | name = "serde"
987 | version = "1.0.185"
988 | source = "registry+https://github.com/rust-lang/crates.io-index"
989 | checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
990 | dependencies = [
991 | "serde_derive",
992 | ]
993 |
994 | [[package]]
995 | name = "serde_arrays"
996 | version = "0.1.0"
997 | source = "registry+https://github.com/rust-lang/crates.io-index"
998 | checksum = "38636132857f68ec3d5f3eb121166d2af33cb55174c4d5ff645db6165cbef0fd"
999 | dependencies = [
1000 | "serde",
1001 | ]
1002 |
1003 | [[package]]
1004 | name = "serde_derive"
1005 | version = "1.0.185"
1006 | source = "registry+https://github.com/rust-lang/crates.io-index"
1007 | checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
1008 | dependencies = [
1009 | "proc-macro2",
1010 | "quote",
1011 | "syn 2.0.29",
1012 | ]
1013 |
1014 | [[package]]
1015 | name = "serde_json"
1016 | version = "1.0.105"
1017 | source = "registry+https://github.com/rust-lang/crates.io-index"
1018 | checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
1019 | dependencies = [
1020 | "itoa",
1021 | "ryu",
1022 | "serde",
1023 | ]
1024 |
1025 | [[package]]
1026 | name = "sha2"
1027 | version = "0.10.7"
1028 | source = "registry+https://github.com/rust-lang/crates.io-index"
1029 | checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
1030 | dependencies = [
1031 | "cfg-if",
1032 | "cpufeatures",
1033 | "digest 0.10.7",
1034 | ]
1035 |
1036 | [[package]]
1037 | name = "sha3"
1038 | version = "0.8.2"
1039 | source = "registry+https://github.com/rust-lang/crates.io-index"
1040 | checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf"
1041 | dependencies = [
1042 | "block-buffer 0.7.3",
1043 | "byte-tools",
1044 | "digest 0.8.1",
1045 | "keccak",
1046 | "opaque-debug",
1047 | ]
1048 |
1049 | [[package]]
1050 | name = "spin"
1051 | version = "0.5.2"
1052 | source = "registry+https://github.com/rust-lang/crates.io-index"
1053 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
1054 |
1055 | [[package]]
1056 | name = "spin"
1057 | version = "0.9.8"
1058 | source = "registry+https://github.com/rust-lang/crates.io-index"
1059 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
1060 | dependencies = [
1061 | "lock_api",
1062 | ]
1063 |
1064 | [[package]]
1065 | name = "spmc"
1066 | version = "0.3.0"
1067 | source = "registry+https://github.com/rust-lang/crates.io-index"
1068 | checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5"
1069 |
1070 | [[package]]
1071 | name = "sppark"
1072 | version = "0.1.3"
1073 | source = "registry+https://github.com/rust-lang/crates.io-index"
1074 | checksum = "cfb9486baeb35ca1197c4df27451d4df5bd321e15da94c1ddb89670f9e94896a"
1075 | dependencies = [
1076 | "cc",
1077 | "which",
1078 | ]
1079 |
1080 | [[package]]
1081 | name = "static_assertions"
1082 | version = "1.1.0"
1083 | source = "registry+https://github.com/rust-lang/crates.io-index"
1084 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1085 |
1086 | [[package]]
1087 | name = "subtle"
1088 | version = "2.5.0"
1089 | source = "registry+https://github.com/rust-lang/crates.io-index"
1090 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
1091 |
1092 | [[package]]
1093 | name = "syn"
1094 | version = "1.0.109"
1095 | source = "registry+https://github.com/rust-lang/crates.io-index"
1096 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1097 | dependencies = [
1098 | "proc-macro2",
1099 | "quote",
1100 | "unicode-ident",
1101 | ]
1102 |
1103 | [[package]]
1104 | name = "syn"
1105 | version = "2.0.29"
1106 | source = "registry+https://github.com/rust-lang/crates.io-index"
1107 | checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
1108 | dependencies = [
1109 | "proc-macro2",
1110 | "quote",
1111 | "unicode-ident",
1112 | ]
1113 |
1114 | [[package]]
1115 | name = "tap"
1116 | version = "1.0.1"
1117 | source = "registry+https://github.com/rust-lang/crates.io-index"
1118 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
1119 |
1120 | [[package]]
1121 | name = "thiserror"
1122 | version = "1.0.47"
1123 | source = "registry+https://github.com/rust-lang/crates.io-index"
1124 | checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
1125 | dependencies = [
1126 | "thiserror-impl",
1127 | ]
1128 |
1129 | [[package]]
1130 | name = "thiserror-impl"
1131 | version = "1.0.47"
1132 | source = "registry+https://github.com/rust-lang/crates.io-index"
1133 | checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
1134 | dependencies = [
1135 | "proc-macro2",
1136 | "quote",
1137 | "syn 2.0.29",
1138 | ]
1139 |
1140 | [[package]]
1141 | name = "threadpool"
1142 | version = "1.8.1"
1143 | source = "registry+https://github.com/rust-lang/crates.io-index"
1144 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
1145 | dependencies = [
1146 | "num_cpus",
1147 | ]
1148 |
1149 | [[package]]
1150 | name = "trait-set"
1151 | version = "0.3.0"
1152 | source = "registry+https://github.com/rust-lang/crates.io-index"
1153 | checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625"
1154 | dependencies = [
1155 | "proc-macro2",
1156 | "quote",
1157 | "syn 1.0.109",
1158 | ]
1159 |
1160 | [[package]]
1161 | name = "typenum"
1162 | version = "1.16.0"
1163 | source = "registry+https://github.com/rust-lang/crates.io-index"
1164 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
1165 |
1166 | [[package]]
1167 | name = "unicode-ident"
1168 | version = "1.0.11"
1169 | source = "registry+https://github.com/rust-lang/crates.io-index"
1170 | checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
1171 |
1172 | [[package]]
1173 | name = "version_check"
1174 | version = "0.9.4"
1175 | source = "registry+https://github.com/rust-lang/crates.io-index"
1176 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1177 |
1178 | [[package]]
1179 | name = "wasi"
1180 | version = "0.11.0+wasi-snapshot-preview1"
1181 | source = "registry+https://github.com/rust-lang/crates.io-index"
1182 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1183 |
1184 | [[package]]
1185 | name = "wasm-bindgen"
1186 | version = "0.2.87"
1187 | source = "registry+https://github.com/rust-lang/crates.io-index"
1188 | checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
1189 | dependencies = [
1190 | "cfg-if",
1191 | "serde",
1192 | "serde_json",
1193 | "wasm-bindgen-macro",
1194 | ]
1195 |
1196 | [[package]]
1197 | name = "wasm-bindgen-backend"
1198 | version = "0.2.87"
1199 | source = "registry+https://github.com/rust-lang/crates.io-index"
1200 | checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
1201 | dependencies = [
1202 | "bumpalo",
1203 | "log",
1204 | "once_cell",
1205 | "proc-macro2",
1206 | "quote",
1207 | "syn 2.0.29",
1208 | "wasm-bindgen-shared",
1209 | ]
1210 |
1211 | [[package]]
1212 | name = "wasm-bindgen-futures"
1213 | version = "0.4.37"
1214 | source = "registry+https://github.com/rust-lang/crates.io-index"
1215 | checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
1216 | dependencies = [
1217 | "cfg-if",
1218 | "js-sys",
1219 | "wasm-bindgen",
1220 | "web-sys",
1221 | ]
1222 |
1223 | [[package]]
1224 | name = "wasm-bindgen-macro"
1225 | version = "0.2.87"
1226 | source = "registry+https://github.com/rust-lang/crates.io-index"
1227 | checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
1228 | dependencies = [
1229 | "quote",
1230 | "wasm-bindgen-macro-support",
1231 | ]
1232 |
1233 | [[package]]
1234 | name = "wasm-bindgen-macro-support"
1235 | version = "0.2.87"
1236 | source = "registry+https://github.com/rust-lang/crates.io-index"
1237 | checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
1238 | dependencies = [
1239 | "proc-macro2",
1240 | "quote",
1241 | "syn 2.0.29",
1242 | "wasm-bindgen-backend",
1243 | "wasm-bindgen-shared",
1244 | ]
1245 |
1246 | [[package]]
1247 | name = "wasm-bindgen-rayon"
1248 | version = "1.0.3"
1249 | source = "registry+https://github.com/rust-lang/crates.io-index"
1250 | checksum = "df87c67450805c305d3ae44a3ac537b0253d029153c25afc3ecd2edc36ccafb1"
1251 | dependencies = [
1252 | "js-sys",
1253 | "rayon",
1254 | "spmc",
1255 | "wasm-bindgen",
1256 | ]
1257 |
1258 | [[package]]
1259 | name = "wasm-bindgen-shared"
1260 | version = "0.2.87"
1261 | source = "registry+https://github.com/rust-lang/crates.io-index"
1262 | checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
1263 |
1264 | [[package]]
1265 | name = "web-sys"
1266 | version = "0.3.64"
1267 | source = "registry+https://github.com/rust-lang/crates.io-index"
1268 | checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
1269 | dependencies = [
1270 | "js-sys",
1271 | "wasm-bindgen",
1272 | ]
1273 |
1274 | [[package]]
1275 | name = "which"
1276 | version = "4.4.0"
1277 | source = "registry+https://github.com/rust-lang/crates.io-index"
1278 | checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
1279 | dependencies = [
1280 | "either",
1281 | "libc",
1282 | "once_cell",
1283 | ]
1284 |
1285 | [[package]]
1286 | name = "wyz"
1287 | version = "0.5.1"
1288 | source = "registry+https://github.com/rust-lang/crates.io-index"
1289 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
1290 | dependencies = [
1291 | "tap",
1292 | ]
1293 |
1294 | [[package]]
1295 | name = "yastl"
1296 | version = "0.1.2"
1297 | source = "registry+https://github.com/rust-lang/crates.io-index"
1298 | checksum = "8ca6c5a4d66c1a9ea261811cf4773c27343de7e5033e1b75ea3f297dc7db3c1a"
1299 | dependencies = [
1300 | "flume",
1301 | "scopeguard",
1302 | ]
1303 |
1304 | [[package]]
1305 | name = "zeroize"
1306 | version = "1.6.0"
1307 | source = "registry+https://github.com/rust-lang/crates.io-index"
1308 | checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
1309 | dependencies = [
1310 | "zeroize_derive",
1311 | ]
1312 |
1313 | [[package]]
1314 | name = "zeroize_derive"
1315 | version = "1.4.2"
1316 | source = "registry+https://github.com/rust-lang/crates.io-index"
1317 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
1318 | dependencies = [
1319 | "proc-macro2",
1320 | "quote",
1321 | "syn 2.0.29",
1322 | ]
1323 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "addchain"
7 | version = "0.2.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570"
10 | dependencies = [
11 | "num-bigint 0.3.3",
12 | "num-integer",
13 | "num-traits",
14 | ]
15 |
16 | [[package]]
17 | name = "adler"
18 | version = "1.0.2"
19 | source = "registry+https://github.com/rust-lang/crates.io-index"
20 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
21 |
22 | [[package]]
23 | name = "anyhow"
24 | version = "1.0.75"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
27 |
28 | [[package]]
29 | name = "arrayref"
30 | version = "0.3.7"
31 | source = "registry+https://github.com/rust-lang/crates.io-index"
32 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
33 |
34 | [[package]]
35 | name = "arrayvec"
36 | version = "0.5.2"
37 | source = "registry+https://github.com/rust-lang/crates.io-index"
38 | checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
39 |
40 | [[package]]
41 | name = "arrayvec"
42 | version = "0.7.4"
43 | source = "registry+https://github.com/rust-lang/crates.io-index"
44 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
45 |
46 | [[package]]
47 | name = "autocfg"
48 | version = "1.1.0"
49 | source = "registry+https://github.com/rust-lang/crates.io-index"
50 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
51 |
52 | [[package]]
53 | name = "bellperson"
54 | version = "0.25.0"
55 | source = "registry+https://github.com/rust-lang/crates.io-index"
56 | checksum = "93eaee4b4753554139ae52ecf0e8b8c128cbc561b32e1bfaa32f70cba8518c1f"
57 | dependencies = [
58 | "bincode",
59 | "blake2s_simd 1.0.1",
60 | "blstrs",
61 | "byteorder",
62 | "crossbeam-channel",
63 | "digest 0.10.7",
64 | "ec-gpu",
65 | "ec-gpu-gen",
66 | "ff",
67 | "group",
68 | "log",
69 | "memmap2",
70 | "pairing",
71 | "rand",
72 | "rand_core",
73 | "rayon",
74 | "rustversion",
75 | "serde",
76 | "sha2",
77 | "thiserror",
78 | ]
79 |
80 | [[package]]
81 | name = "bincode"
82 | version = "1.3.3"
83 | source = "registry+https://github.com/rust-lang/crates.io-index"
84 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
85 | dependencies = [
86 | "serde",
87 | ]
88 |
89 | [[package]]
90 | name = "bitvec"
91 | version = "1.0.1"
92 | source = "registry+https://github.com/rust-lang/crates.io-index"
93 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
94 | dependencies = [
95 | "funty",
96 | "radium",
97 | "tap",
98 | "wyz",
99 | ]
100 |
101 | [[package]]
102 | name = "blake2b_simd"
103 | version = "1.0.1"
104 | source = "registry+https://github.com/rust-lang/crates.io-index"
105 | checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
106 | dependencies = [
107 | "arrayref",
108 | "arrayvec 0.7.4",
109 | "constant_time_eq 0.2.6",
110 | ]
111 |
112 | [[package]]
113 | name = "blake2s_simd"
114 | version = "0.5.11"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2"
117 | dependencies = [
118 | "arrayref",
119 | "arrayvec 0.5.2",
120 | "constant_time_eq 0.1.5",
121 | ]
122 |
123 | [[package]]
124 | name = "blake2s_simd"
125 | version = "1.0.1"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | checksum = "6637f448b9e61dfadbdcbae9a885fadee1f3eaffb1f8d3c1965d3ade8bdfd44f"
128 | dependencies = [
129 | "arrayref",
130 | "arrayvec 0.7.4",
131 | "constant_time_eq 0.2.6",
132 | ]
133 |
134 | [[package]]
135 | name = "block-buffer"
136 | version = "0.7.3"
137 | source = "registry+https://github.com/rust-lang/crates.io-index"
138 | checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
139 | dependencies = [
140 | "block-padding",
141 | "byte-tools",
142 | "byteorder",
143 | "generic-array 0.12.4",
144 | ]
145 |
146 | [[package]]
147 | name = "block-buffer"
148 | version = "0.10.4"
149 | source = "registry+https://github.com/rust-lang/crates.io-index"
150 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
151 | dependencies = [
152 | "generic-array 0.14.7",
153 | ]
154 |
155 | [[package]]
156 | name = "block-padding"
157 | version = "0.1.5"
158 | source = "registry+https://github.com/rust-lang/crates.io-index"
159 | checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
160 | dependencies = [
161 | "byte-tools",
162 | ]
163 |
164 | [[package]]
165 | name = "blst"
166 | version = "0.3.11"
167 | source = "registry+https://github.com/rust-lang/crates.io-index"
168 | checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b"
169 | dependencies = [
170 | "cc",
171 | "glob",
172 | "threadpool",
173 | "zeroize",
174 | ]
175 |
176 | [[package]]
177 | name = "blstrs"
178 | version = "0.7.1"
179 | source = "registry+https://github.com/rust-lang/crates.io-index"
180 | checksum = "7a8a8ed6fefbeef4a8c7b460e4110e12c5e22a5b7cf32621aae6ad650c4dcf29"
181 | dependencies = [
182 | "blst",
183 | "byte-slice-cast",
184 | "ff",
185 | "group",
186 | "pairing",
187 | "rand_core",
188 | "serde",
189 | "subtle",
190 | ]
191 |
192 | [[package]]
193 | name = "bumpalo"
194 | version = "3.13.0"
195 | source = "registry+https://github.com/rust-lang/crates.io-index"
196 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
197 |
198 | [[package]]
199 | name = "byte-slice-cast"
200 | version = "1.2.2"
201 | source = "registry+https://github.com/rust-lang/crates.io-index"
202 | checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c"
203 |
204 | [[package]]
205 | name = "byte-tools"
206 | version = "0.3.1"
207 | source = "registry+https://github.com/rust-lang/crates.io-index"
208 | checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
209 |
210 | [[package]]
211 | name = "byteorder"
212 | version = "1.4.3"
213 | source = "registry+https://github.com/rust-lang/crates.io-index"
214 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
215 |
216 | [[package]]
217 | name = "cc"
218 | version = "1.0.83"
219 | source = "registry+https://github.com/rust-lang/crates.io-index"
220 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
221 | dependencies = [
222 | "libc",
223 | ]
224 |
225 | [[package]]
226 | name = "cfg-if"
227 | version = "1.0.0"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
230 |
231 | [[package]]
232 | name = "console_error_panic_hook"
233 | version = "0.1.7"
234 | source = "registry+https://github.com/rust-lang/crates.io-index"
235 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
236 | dependencies = [
237 | "cfg-if",
238 | "wasm-bindgen",
239 | ]
240 |
241 | [[package]]
242 | name = "constant_time_eq"
243 | version = "0.1.5"
244 | source = "registry+https://github.com/rust-lang/crates.io-index"
245 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
246 |
247 | [[package]]
248 | name = "constant_time_eq"
249 | version = "0.2.6"
250 | source = "registry+https://github.com/rust-lang/crates.io-index"
251 | checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6"
252 |
253 | [[package]]
254 | name = "cpufeatures"
255 | version = "0.2.9"
256 | source = "registry+https://github.com/rust-lang/crates.io-index"
257 | checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
258 | dependencies = [
259 | "libc",
260 | ]
261 |
262 | [[package]]
263 | name = "crc32fast"
264 | version = "1.3.2"
265 | source = "registry+https://github.com/rust-lang/crates.io-index"
266 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
267 | dependencies = [
268 | "cfg-if",
269 | ]
270 |
271 | [[package]]
272 | name = "crossbeam-channel"
273 | version = "0.5.8"
274 | source = "registry+https://github.com/rust-lang/crates.io-index"
275 | checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
276 | dependencies = [
277 | "cfg-if",
278 | "crossbeam-utils",
279 | ]
280 |
281 | [[package]]
282 | name = "crossbeam-deque"
283 | version = "0.8.3"
284 | source = "registry+https://github.com/rust-lang/crates.io-index"
285 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
286 | dependencies = [
287 | "cfg-if",
288 | "crossbeam-epoch",
289 | "crossbeam-utils",
290 | ]
291 |
292 | [[package]]
293 | name = "crossbeam-epoch"
294 | version = "0.9.15"
295 | source = "registry+https://github.com/rust-lang/crates.io-index"
296 | checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
297 | dependencies = [
298 | "autocfg",
299 | "cfg-if",
300 | "crossbeam-utils",
301 | "memoffset",
302 | "scopeguard",
303 | ]
304 |
305 | [[package]]
306 | name = "crossbeam-utils"
307 | version = "0.8.16"
308 | source = "registry+https://github.com/rust-lang/crates.io-index"
309 | checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
310 | dependencies = [
311 | "cfg-if",
312 | ]
313 |
314 | [[package]]
315 | name = "crypto-common"
316 | version = "0.1.6"
317 | source = "registry+https://github.com/rust-lang/crates.io-index"
318 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
319 | dependencies = [
320 | "generic-array 0.14.7",
321 | "typenum",
322 | ]
323 |
324 | [[package]]
325 | name = "digest"
326 | version = "0.8.1"
327 | source = "registry+https://github.com/rust-lang/crates.io-index"
328 | checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
329 | dependencies = [
330 | "generic-array 0.12.4",
331 | ]
332 |
333 | [[package]]
334 | name = "digest"
335 | version = "0.10.7"
336 | source = "registry+https://github.com/rust-lang/crates.io-index"
337 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
338 | dependencies = [
339 | "block-buffer 0.10.4",
340 | "crypto-common",
341 | ]
342 |
343 | [[package]]
344 | name = "ec-gpu"
345 | version = "0.2.0"
346 | source = "registry+https://github.com/rust-lang/crates.io-index"
347 | checksum = "bd63582de2b59ea1aa48d7c1941b5d87618d95484397521b3acdfa0e1e9f5e45"
348 |
349 | [[package]]
350 | name = "ec-gpu-gen"
351 | version = "0.6.0"
352 | source = "registry+https://github.com/rust-lang/crates.io-index"
353 | checksum = "892df2aa20abec5b816e15d5d6383892ca142077708efa3067dd3ac44b75c664"
354 | dependencies = [
355 | "bitvec",
356 | "crossbeam-channel",
357 | "ec-gpu",
358 | "execute",
359 | "ff",
360 | "group",
361 | "hex",
362 | "log",
363 | "num_cpus",
364 | "once_cell",
365 | "rayon",
366 | "sha2",
367 | "thiserror",
368 | "yastl",
369 | ]
370 |
371 | [[package]]
372 | name = "either"
373 | version = "1.9.0"
374 | source = "registry+https://github.com/rust-lang/crates.io-index"
375 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
376 |
377 | [[package]]
378 | name = "execute"
379 | version = "0.2.12"
380 | source = "registry+https://github.com/rust-lang/crates.io-index"
381 | checksum = "16d9a9ea4c04632c16bc5c71a2fcc63d308481f7fc67eb1a1ce6315c44a426ae"
382 | dependencies = [
383 | "execute-command-macro",
384 | "execute-command-tokens",
385 | "generic-array 0.14.7",
386 | ]
387 |
388 | [[package]]
389 | name = "execute-command-macro"
390 | version = "0.1.8"
391 | source = "registry+https://github.com/rust-lang/crates.io-index"
392 | checksum = "a5fbc65a0cf735106743f4c38c9a3671c1e734b5c2c20d21a3c93c696daa3157"
393 | dependencies = [
394 | "execute-command-macro-impl",
395 | ]
396 |
397 | [[package]]
398 | name = "execute-command-macro-impl"
399 | version = "0.1.9"
400 | source = "registry+https://github.com/rust-lang/crates.io-index"
401 | checksum = "55a9a55d1dab3b07854648d48e366f684aefe2ac78ae28cec3bf65e3cd53d9a3"
402 | dependencies = [
403 | "execute-command-tokens",
404 | "quote",
405 | "syn 2.0.29",
406 | ]
407 |
408 | [[package]]
409 | name = "execute-command-tokens"
410 | version = "0.1.6"
411 | source = "registry+https://github.com/rust-lang/crates.io-index"
412 | checksum = "8ba569491c70ec8471e34aa7e9c0b9e82bb5d2464c0398442d17d3c4af814e5a"
413 |
414 | [[package]]
415 | name = "ff"
416 | version = "0.13.0"
417 | source = "registry+https://github.com/rust-lang/crates.io-index"
418 | checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
419 | dependencies = [
420 | "bitvec",
421 | "byteorder",
422 | "ff_derive",
423 | "rand_core",
424 | "subtle",
425 | ]
426 |
427 | [[package]]
428 | name = "ff_derive"
429 | version = "0.13.0"
430 | source = "registry+https://github.com/rust-lang/crates.io-index"
431 | checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a"
432 | dependencies = [
433 | "addchain",
434 | "cfg-if",
435 | "num-bigint 0.3.3",
436 | "num-integer",
437 | "num-traits",
438 | "proc-macro2",
439 | "quote",
440 | "syn 1.0.109",
441 | ]
442 |
443 | [[package]]
444 | name = "flate2"
445 | version = "1.0.27"
446 | source = "registry+https://github.com/rust-lang/crates.io-index"
447 | checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
448 | dependencies = [
449 | "crc32fast",
450 | "miniz_oxide",
451 | ]
452 |
453 | [[package]]
454 | name = "flume"
455 | version = "0.10.14"
456 | source = "registry+https://github.com/rust-lang/crates.io-index"
457 | checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
458 | dependencies = [
459 | "spin 0.9.8",
460 | ]
461 |
462 | [[package]]
463 | name = "funty"
464 | version = "2.0.0"
465 | source = "registry+https://github.com/rust-lang/crates.io-index"
466 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
467 |
468 | [[package]]
469 | name = "generic-array"
470 | version = "0.12.4"
471 | source = "registry+https://github.com/rust-lang/crates.io-index"
472 | checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
473 | dependencies = [
474 | "typenum",
475 | ]
476 |
477 | [[package]]
478 | name = "generic-array"
479 | version = "0.14.7"
480 | source = "registry+https://github.com/rust-lang/crates.io-index"
481 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
482 | dependencies = [
483 | "typenum",
484 | "version_check",
485 | ]
486 |
487 | [[package]]
488 | name = "getrandom"
489 | version = "0.2.10"
490 | source = "registry+https://github.com/rust-lang/crates.io-index"
491 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
492 | dependencies = [
493 | "cfg-if",
494 | "js-sys",
495 | "libc",
496 | "wasi",
497 | "wasm-bindgen",
498 | ]
499 |
500 | [[package]]
501 | name = "glob"
502 | version = "0.3.1"
503 | source = "registry+https://github.com/rust-lang/crates.io-index"
504 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
505 |
506 | [[package]]
507 | name = "group"
508 | version = "0.13.0"
509 | source = "registry+https://github.com/rust-lang/crates.io-index"
510 | checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
511 | dependencies = [
512 | "ff",
513 | "rand",
514 | "rand_core",
515 | "rand_xorshift",
516 | "subtle",
517 | ]
518 |
519 | [[package]]
520 | name = "halo2curves"
521 | version = "0.4.0"
522 | source = "git+https://github.com/privacy-scaling-explorations/halo2curves#1d71d343b3764f6a819513a0cd9a855cd3f6b698"
523 | dependencies = [
524 | "blake2b_simd",
525 | "ff",
526 | "group",
527 | "lazy_static",
528 | "num-bigint 0.4.4",
529 | "num-traits",
530 | "pairing",
531 | "pasta_curves",
532 | "paste",
533 | "rand",
534 | "rand_core",
535 | "serde",
536 | "serde_arrays",
537 | "static_assertions",
538 | "subtle",
539 | ]
540 |
541 | [[package]]
542 | name = "hermit-abi"
543 | version = "0.3.2"
544 | source = "registry+https://github.com/rust-lang/crates.io-index"
545 | checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
546 |
547 | [[package]]
548 | name = "hex"
549 | version = "0.4.3"
550 | source = "registry+https://github.com/rust-lang/crates.io-index"
551 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
552 | dependencies = [
553 | "serde",
554 | ]
555 |
556 | [[package]]
557 | name = "hex-literal"
558 | version = "0.3.4"
559 | source = "registry+https://github.com/rust-lang/crates.io-index"
560 | checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0"
561 |
562 | [[package]]
563 | name = "itertools"
564 | version = "0.8.2"
565 | source = "registry+https://github.com/rust-lang/crates.io-index"
566 | checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
567 | dependencies = [
568 | "either",
569 | ]
570 |
571 | [[package]]
572 | name = "itertools"
573 | version = "0.9.0"
574 | source = "registry+https://github.com/rust-lang/crates.io-index"
575 | checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
576 | dependencies = [
577 | "either",
578 | ]
579 |
580 | [[package]]
581 | name = "itoa"
582 | version = "1.0.9"
583 | source = "registry+https://github.com/rust-lang/crates.io-index"
584 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
585 |
586 | [[package]]
587 | name = "js-sys"
588 | version = "0.3.64"
589 | source = "registry+https://github.com/rust-lang/crates.io-index"
590 | checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
591 | dependencies = [
592 | "wasm-bindgen",
593 | ]
594 |
595 | [[package]]
596 | name = "keccak"
597 | version = "0.1.4"
598 | source = "registry+https://github.com/rust-lang/crates.io-index"
599 | checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
600 | dependencies = [
601 | "cpufeatures",
602 | ]
603 |
604 | [[package]]
605 | name = "lazy_static"
606 | version = "1.4.0"
607 | source = "registry+https://github.com/rust-lang/crates.io-index"
608 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
609 | dependencies = [
610 | "spin 0.5.2",
611 | ]
612 |
613 | [[package]]
614 | name = "libc"
615 | version = "0.2.147"
616 | source = "registry+https://github.com/rust-lang/crates.io-index"
617 | checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
618 |
619 | [[package]]
620 | name = "lock_api"
621 | version = "0.4.10"
622 | source = "registry+https://github.com/rust-lang/crates.io-index"
623 | checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
624 | dependencies = [
625 | "autocfg",
626 | "scopeguard",
627 | ]
628 |
629 | [[package]]
630 | name = "log"
631 | version = "0.4.20"
632 | source = "registry+https://github.com/rust-lang/crates.io-index"
633 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
634 |
635 | [[package]]
636 | name = "memmap2"
637 | version = "0.5.10"
638 | source = "registry+https://github.com/rust-lang/crates.io-index"
639 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
640 | dependencies = [
641 | "libc",
642 | ]
643 |
644 | [[package]]
645 | name = "memoffset"
646 | version = "0.9.0"
647 | source = "registry+https://github.com/rust-lang/crates.io-index"
648 | checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
649 | dependencies = [
650 | "autocfg",
651 | ]
652 |
653 | [[package]]
654 | name = "miniz_oxide"
655 | version = "0.7.1"
656 | source = "registry+https://github.com/rust-lang/crates.io-index"
657 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
658 | dependencies = [
659 | "adler",
660 | ]
661 |
662 | [[package]]
663 | name = "neptune"
664 | version = "10.0.0"
665 | source = "registry+https://github.com/rust-lang/crates.io-index"
666 | checksum = "bb9a64337e6d214e2a48db5714ef18cf1e5a7bbff9043838fdf6e57ce5659335"
667 | dependencies = [
668 | "bellperson",
669 | "blake2s_simd 0.5.11",
670 | "blstrs",
671 | "byteorder",
672 | "ff",
673 | "generic-array 0.14.7",
674 | "itertools 0.8.2",
675 | "log",
676 | "pasta_curves",
677 | "serde",
678 | "trait-set",
679 | ]
680 |
681 | [[package]]
682 | name = "nova-ecdsa"
683 | version = "0.1.0"
684 | dependencies = [
685 | "ff",
686 | "nova-scotia",
687 | "nova-snark",
688 | "serde",
689 | "serde_json",
690 | ]
691 |
692 | [[package]]
693 | name = "nova-ecdsa-browser"
694 | version = "0.1.0"
695 | dependencies = [
696 | "console_error_panic_hook",
697 | "ff",
698 | "getrandom",
699 | "js-sys",
700 | "nova-scotia",
701 | "nova-snark",
702 | "num-bigint 0.4.4",
703 | "num-traits",
704 | "rayon",
705 | "serde",
706 | "serde_json",
707 | "wasm-bindgen",
708 | "wasm-bindgen-futures",
709 | "wasm-bindgen-rayon",
710 | "web-sys",
711 | ]
712 |
713 | [[package]]
714 | name = "nova-scotia"
715 | version = "0.4.0"
716 | source = "git+https://github.com/dmpierre/Nova-Scotia.git?branch=secp_secq#52dd2228909f9adb7cb407990609e64d4f79e5a4"
717 | dependencies = [
718 | "anyhow",
719 | "bellperson",
720 | "byteorder",
721 | "ff",
722 | "hex-literal",
723 | "itertools 0.9.0",
724 | "js-sys",
725 | "nova-snark",
726 | "num-bigint 0.4.4",
727 | "num-traits",
728 | "pasta_curves",
729 | "rayon",
730 | "serde",
731 | "serde_json",
732 | "wasm-bindgen",
733 | "wasm-bindgen-futures",
734 | "wasm-bindgen-rayon",
735 | ]
736 |
737 | [[package]]
738 | name = "nova-snark"
739 | version = "0.21.0"
740 | source = "git+https://github.com/dmpierre/Nova.git?branch=dev-secpsecq-031738d#1d4179cbc8e3ec9b5ef5ab3b11762990337240e0"
741 | dependencies = [
742 | "bellperson",
743 | "bincode",
744 | "bitvec",
745 | "byteorder",
746 | "digest 0.8.1",
747 | "ff",
748 | "flate2",
749 | "generic-array 0.14.7",
750 | "halo2curves",
751 | "itertools 0.9.0",
752 | "neptune",
753 | "num-bigint 0.4.4",
754 | "num-integer",
755 | "num-traits",
756 | "pasta-msm",
757 | "pasta_curves",
758 | "rand_chacha",
759 | "rand_core",
760 | "rayon",
761 | "serde",
762 | "sha3",
763 | "subtle",
764 | "thiserror",
765 | ]
766 |
767 | [[package]]
768 | name = "num-bigint"
769 | version = "0.3.3"
770 | source = "registry+https://github.com/rust-lang/crates.io-index"
771 | checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3"
772 | dependencies = [
773 | "autocfg",
774 | "num-integer",
775 | "num-traits",
776 | ]
777 |
778 | [[package]]
779 | name = "num-bigint"
780 | version = "0.4.4"
781 | source = "registry+https://github.com/rust-lang/crates.io-index"
782 | checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
783 | dependencies = [
784 | "autocfg",
785 | "num-integer",
786 | "num-traits",
787 | "rand",
788 | "serde",
789 | ]
790 |
791 | [[package]]
792 | name = "num-integer"
793 | version = "0.1.45"
794 | source = "registry+https://github.com/rust-lang/crates.io-index"
795 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
796 | dependencies = [
797 | "autocfg",
798 | "num-traits",
799 | ]
800 |
801 | [[package]]
802 | name = "num-traits"
803 | version = "0.2.16"
804 | source = "registry+https://github.com/rust-lang/crates.io-index"
805 | checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
806 | dependencies = [
807 | "autocfg",
808 | ]
809 |
810 | [[package]]
811 | name = "num_cpus"
812 | version = "1.16.0"
813 | source = "registry+https://github.com/rust-lang/crates.io-index"
814 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
815 | dependencies = [
816 | "hermit-abi",
817 | "libc",
818 | ]
819 |
820 | [[package]]
821 | name = "once_cell"
822 | version = "1.18.0"
823 | source = "registry+https://github.com/rust-lang/crates.io-index"
824 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
825 |
826 | [[package]]
827 | name = "opaque-debug"
828 | version = "0.2.3"
829 | source = "registry+https://github.com/rust-lang/crates.io-index"
830 | checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
831 |
832 | [[package]]
833 | name = "pairing"
834 | version = "0.23.0"
835 | source = "registry+https://github.com/rust-lang/crates.io-index"
836 | checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f"
837 | dependencies = [
838 | "group",
839 | ]
840 |
841 | [[package]]
842 | name = "pasta-msm"
843 | version = "0.1.4"
844 | source = "registry+https://github.com/rust-lang/crates.io-index"
845 | checksum = "9e85d75eba3e7e9ee3bd11342b669185e194dadda3557934bc1000d9b87159d3"
846 | dependencies = [
847 | "cc",
848 | "pasta_curves",
849 | "semolina",
850 | "sppark",
851 | "which",
852 | ]
853 |
854 | [[package]]
855 | name = "pasta_curves"
856 | version = "0.5.1"
857 | source = "registry+https://github.com/rust-lang/crates.io-index"
858 | checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095"
859 | dependencies = [
860 | "blake2b_simd",
861 | "ff",
862 | "group",
863 | "hex",
864 | "lazy_static",
865 | "rand",
866 | "serde",
867 | "static_assertions",
868 | "subtle",
869 | ]
870 |
871 | [[package]]
872 | name = "paste"
873 | version = "1.0.14"
874 | source = "registry+https://github.com/rust-lang/crates.io-index"
875 | checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
876 |
877 | [[package]]
878 | name = "ppv-lite86"
879 | version = "0.2.17"
880 | source = "registry+https://github.com/rust-lang/crates.io-index"
881 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
882 |
883 | [[package]]
884 | name = "proc-macro2"
885 | version = "1.0.66"
886 | source = "registry+https://github.com/rust-lang/crates.io-index"
887 | checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
888 | dependencies = [
889 | "unicode-ident",
890 | ]
891 |
892 | [[package]]
893 | name = "quote"
894 | version = "1.0.33"
895 | source = "registry+https://github.com/rust-lang/crates.io-index"
896 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
897 | dependencies = [
898 | "proc-macro2",
899 | ]
900 |
901 | [[package]]
902 | name = "radium"
903 | version = "0.7.0"
904 | source = "registry+https://github.com/rust-lang/crates.io-index"
905 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
906 |
907 | [[package]]
908 | name = "rand"
909 | version = "0.8.5"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
912 | dependencies = [
913 | "libc",
914 | "rand_chacha",
915 | "rand_core",
916 | ]
917 |
918 | [[package]]
919 | name = "rand_chacha"
920 | version = "0.3.1"
921 | source = "registry+https://github.com/rust-lang/crates.io-index"
922 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
923 | dependencies = [
924 | "ppv-lite86",
925 | "rand_core",
926 | ]
927 |
928 | [[package]]
929 | name = "rand_core"
930 | version = "0.6.4"
931 | source = "registry+https://github.com/rust-lang/crates.io-index"
932 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
933 | dependencies = [
934 | "getrandom",
935 | ]
936 |
937 | [[package]]
938 | name = "rand_xorshift"
939 | version = "0.3.0"
940 | source = "registry+https://github.com/rust-lang/crates.io-index"
941 | checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
942 | dependencies = [
943 | "rand_core",
944 | ]
945 |
946 | [[package]]
947 | name = "rayon"
948 | version = "1.7.0"
949 | source = "registry+https://github.com/rust-lang/crates.io-index"
950 | checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
951 | dependencies = [
952 | "either",
953 | "rayon-core",
954 | ]
955 |
956 | [[package]]
957 | name = "rayon-core"
958 | version = "1.11.0"
959 | source = "registry+https://github.com/rust-lang/crates.io-index"
960 | checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
961 | dependencies = [
962 | "crossbeam-channel",
963 | "crossbeam-deque",
964 | "crossbeam-utils",
965 | "num_cpus",
966 | ]
967 |
968 | [[package]]
969 | name = "rustversion"
970 | version = "1.0.14"
971 | source = "registry+https://github.com/rust-lang/crates.io-index"
972 | checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
973 |
974 | [[package]]
975 | name = "ryu"
976 | version = "1.0.15"
977 | source = "registry+https://github.com/rust-lang/crates.io-index"
978 | checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
979 |
980 | [[package]]
981 | name = "scopeguard"
982 | version = "1.2.0"
983 | source = "registry+https://github.com/rust-lang/crates.io-index"
984 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
985 |
986 | [[package]]
987 | name = "semolina"
988 | version = "0.1.4"
989 | source = "registry+https://github.com/rust-lang/crates.io-index"
990 | checksum = "2b0111fd4fa831becb0606b9a2285ef3bee3c6a70d690209b8ae9514e9befe23"
991 | dependencies = [
992 | "cc",
993 | "glob",
994 | ]
995 |
996 | [[package]]
997 | name = "serde"
998 | version = "1.0.185"
999 | source = "registry+https://github.com/rust-lang/crates.io-index"
1000 | checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
1001 | dependencies = [
1002 | "serde_derive",
1003 | ]
1004 |
1005 | [[package]]
1006 | name = "serde_arrays"
1007 | version = "0.1.0"
1008 | source = "registry+https://github.com/rust-lang/crates.io-index"
1009 | checksum = "38636132857f68ec3d5f3eb121166d2af33cb55174c4d5ff645db6165cbef0fd"
1010 | dependencies = [
1011 | "serde",
1012 | ]
1013 |
1014 | [[package]]
1015 | name = "serde_derive"
1016 | version = "1.0.185"
1017 | source = "registry+https://github.com/rust-lang/crates.io-index"
1018 | checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
1019 | dependencies = [
1020 | "proc-macro2",
1021 | "quote",
1022 | "syn 2.0.29",
1023 | ]
1024 |
1025 | [[package]]
1026 | name = "serde_json"
1027 | version = "1.0.105"
1028 | source = "registry+https://github.com/rust-lang/crates.io-index"
1029 | checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
1030 | dependencies = [
1031 | "itoa",
1032 | "ryu",
1033 | "serde",
1034 | ]
1035 |
1036 | [[package]]
1037 | name = "sha2"
1038 | version = "0.10.7"
1039 | source = "registry+https://github.com/rust-lang/crates.io-index"
1040 | checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
1041 | dependencies = [
1042 | "cfg-if",
1043 | "cpufeatures",
1044 | "digest 0.10.7",
1045 | ]
1046 |
1047 | [[package]]
1048 | name = "sha3"
1049 | version = "0.8.2"
1050 | source = "registry+https://github.com/rust-lang/crates.io-index"
1051 | checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf"
1052 | dependencies = [
1053 | "block-buffer 0.7.3",
1054 | "byte-tools",
1055 | "digest 0.8.1",
1056 | "keccak",
1057 | "opaque-debug",
1058 | ]
1059 |
1060 | [[package]]
1061 | name = "spin"
1062 | version = "0.5.2"
1063 | source = "registry+https://github.com/rust-lang/crates.io-index"
1064 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
1065 |
1066 | [[package]]
1067 | name = "spin"
1068 | version = "0.9.8"
1069 | source = "registry+https://github.com/rust-lang/crates.io-index"
1070 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
1071 | dependencies = [
1072 | "lock_api",
1073 | ]
1074 |
1075 | [[package]]
1076 | name = "spmc"
1077 | version = "0.3.0"
1078 | source = "registry+https://github.com/rust-lang/crates.io-index"
1079 | checksum = "02a8428da277a8e3a15271d79943e80ccc2ef254e78813a166a08d65e4c3ece5"
1080 |
1081 | [[package]]
1082 | name = "sppark"
1083 | version = "0.1.3"
1084 | source = "registry+https://github.com/rust-lang/crates.io-index"
1085 | checksum = "cfb9486baeb35ca1197c4df27451d4df5bd321e15da94c1ddb89670f9e94896a"
1086 | dependencies = [
1087 | "cc",
1088 | "which",
1089 | ]
1090 |
1091 | [[package]]
1092 | name = "static_assertions"
1093 | version = "1.1.0"
1094 | source = "registry+https://github.com/rust-lang/crates.io-index"
1095 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1096 |
1097 | [[package]]
1098 | name = "subtle"
1099 | version = "2.5.0"
1100 | source = "registry+https://github.com/rust-lang/crates.io-index"
1101 | checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
1102 |
1103 | [[package]]
1104 | name = "syn"
1105 | version = "1.0.109"
1106 | source = "registry+https://github.com/rust-lang/crates.io-index"
1107 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1108 | dependencies = [
1109 | "proc-macro2",
1110 | "quote",
1111 | "unicode-ident",
1112 | ]
1113 |
1114 | [[package]]
1115 | name = "syn"
1116 | version = "2.0.29"
1117 | source = "registry+https://github.com/rust-lang/crates.io-index"
1118 | checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
1119 | dependencies = [
1120 | "proc-macro2",
1121 | "quote",
1122 | "unicode-ident",
1123 | ]
1124 |
1125 | [[package]]
1126 | name = "tap"
1127 | version = "1.0.1"
1128 | source = "registry+https://github.com/rust-lang/crates.io-index"
1129 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
1130 |
1131 | [[package]]
1132 | name = "thiserror"
1133 | version = "1.0.47"
1134 | source = "registry+https://github.com/rust-lang/crates.io-index"
1135 | checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
1136 | dependencies = [
1137 | "thiserror-impl",
1138 | ]
1139 |
1140 | [[package]]
1141 | name = "thiserror-impl"
1142 | version = "1.0.47"
1143 | source = "registry+https://github.com/rust-lang/crates.io-index"
1144 | checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
1145 | dependencies = [
1146 | "proc-macro2",
1147 | "quote",
1148 | "syn 2.0.29",
1149 | ]
1150 |
1151 | [[package]]
1152 | name = "threadpool"
1153 | version = "1.8.1"
1154 | source = "registry+https://github.com/rust-lang/crates.io-index"
1155 | checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
1156 | dependencies = [
1157 | "num_cpus",
1158 | ]
1159 |
1160 | [[package]]
1161 | name = "trait-set"
1162 | version = "0.3.0"
1163 | source = "registry+https://github.com/rust-lang/crates.io-index"
1164 | checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625"
1165 | dependencies = [
1166 | "proc-macro2",
1167 | "quote",
1168 | "syn 1.0.109",
1169 | ]
1170 |
1171 | [[package]]
1172 | name = "typenum"
1173 | version = "1.16.0"
1174 | source = "registry+https://github.com/rust-lang/crates.io-index"
1175 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
1176 |
1177 | [[package]]
1178 | name = "unicode-ident"
1179 | version = "1.0.11"
1180 | source = "registry+https://github.com/rust-lang/crates.io-index"
1181 | checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
1182 |
1183 | [[package]]
1184 | name = "version_check"
1185 | version = "0.9.4"
1186 | source = "registry+https://github.com/rust-lang/crates.io-index"
1187 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1188 |
1189 | [[package]]
1190 | name = "wasi"
1191 | version = "0.11.0+wasi-snapshot-preview1"
1192 | source = "registry+https://github.com/rust-lang/crates.io-index"
1193 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1194 |
1195 | [[package]]
1196 | name = "wasm-bindgen"
1197 | version = "0.2.87"
1198 | source = "registry+https://github.com/rust-lang/crates.io-index"
1199 | checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
1200 | dependencies = [
1201 | "cfg-if",
1202 | "serde",
1203 | "serde_json",
1204 | "wasm-bindgen-macro",
1205 | ]
1206 |
1207 | [[package]]
1208 | name = "wasm-bindgen-backend"
1209 | version = "0.2.87"
1210 | source = "registry+https://github.com/rust-lang/crates.io-index"
1211 | checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
1212 | dependencies = [
1213 | "bumpalo",
1214 | "log",
1215 | "once_cell",
1216 | "proc-macro2",
1217 | "quote",
1218 | "syn 2.0.29",
1219 | "wasm-bindgen-shared",
1220 | ]
1221 |
1222 | [[package]]
1223 | name = "wasm-bindgen-futures"
1224 | version = "0.4.37"
1225 | source = "registry+https://github.com/rust-lang/crates.io-index"
1226 | checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
1227 | dependencies = [
1228 | "cfg-if",
1229 | "js-sys",
1230 | "wasm-bindgen",
1231 | "web-sys",
1232 | ]
1233 |
1234 | [[package]]
1235 | name = "wasm-bindgen-macro"
1236 | version = "0.2.87"
1237 | source = "registry+https://github.com/rust-lang/crates.io-index"
1238 | checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
1239 | dependencies = [
1240 | "quote",
1241 | "wasm-bindgen-macro-support",
1242 | ]
1243 |
1244 | [[package]]
1245 | name = "wasm-bindgen-macro-support"
1246 | version = "0.2.87"
1247 | source = "registry+https://github.com/rust-lang/crates.io-index"
1248 | checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
1249 | dependencies = [
1250 | "proc-macro2",
1251 | "quote",
1252 | "syn 2.0.29",
1253 | "wasm-bindgen-backend",
1254 | "wasm-bindgen-shared",
1255 | ]
1256 |
1257 | [[package]]
1258 | name = "wasm-bindgen-rayon"
1259 | version = "1.0.3"
1260 | source = "registry+https://github.com/rust-lang/crates.io-index"
1261 | checksum = "df87c67450805c305d3ae44a3ac537b0253d029153c25afc3ecd2edc36ccafb1"
1262 | dependencies = [
1263 | "js-sys",
1264 | "rayon",
1265 | "spmc",
1266 | "wasm-bindgen",
1267 | ]
1268 |
1269 | [[package]]
1270 | name = "wasm-bindgen-shared"
1271 | version = "0.2.87"
1272 | source = "registry+https://github.com/rust-lang/crates.io-index"
1273 | checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
1274 |
1275 | [[package]]
1276 | name = "web-sys"
1277 | version = "0.3.64"
1278 | source = "registry+https://github.com/rust-lang/crates.io-index"
1279 | checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
1280 | dependencies = [
1281 | "js-sys",
1282 | "wasm-bindgen",
1283 | ]
1284 |
1285 | [[package]]
1286 | name = "which"
1287 | version = "4.4.0"
1288 | source = "registry+https://github.com/rust-lang/crates.io-index"
1289 | checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
1290 | dependencies = [
1291 | "either",
1292 | "libc",
1293 | "once_cell",
1294 | ]
1295 |
1296 | [[package]]
1297 | name = "wyz"
1298 | version = "0.5.1"
1299 | source = "registry+https://github.com/rust-lang/crates.io-index"
1300 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
1301 | dependencies = [
1302 | "tap",
1303 | ]
1304 |
1305 | [[package]]
1306 | name = "yastl"
1307 | version = "0.1.2"
1308 | source = "registry+https://github.com/rust-lang/crates.io-index"
1309 | checksum = "8ca6c5a4d66c1a9ea261811cf4773c27343de7e5033e1b75ea3f297dc7db3c1a"
1310 | dependencies = [
1311 | "flume",
1312 | "scopeguard",
1313 | ]
1314 |
1315 | [[package]]
1316 | name = "zeroize"
1317 | version = "1.6.0"
1318 | source = "registry+https://github.com/rust-lang/crates.io-index"
1319 | checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
1320 | dependencies = [
1321 | "zeroize_derive",
1322 | ]
1323 |
1324 | [[package]]
1325 | name = "zeroize_derive"
1326 | version = "1.4.2"
1327 | source = "registry+https://github.com/rust-lang/crates.io-index"
1328 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
1329 | dependencies = [
1330 | "proc-macro2",
1331 | "quote",
1332 | "syn 2.0.29",
1333 | ]
1334 |
--------------------------------------------------------------------------------