From 6cda3fc885dde8be1a89c19edf5b64e0d0726508 Mon Sep 17 00:00:00 2001 From: cedoor Date: Thu, 21 Oct 2021 11:29:33 +0200 Subject: [PATCH] style: reformat code with prettier --- README.md | 1 - jest.config.json | 16 +- packages/identity/README.md | 16 +- packages/identity/jest.config.json | 16 +- packages/identity/rollup.config.ts | 14 +- packages/identity/src/identity.ts | 46 +- packages/identity/src/index.ts | 9 +- packages/identity/src/strategies.ts | 50 +- packages/identity/tests/identity.test.ts | 94 +- packages/protocols/README.md | 36 +- packages/protocols/jest.config.json | 16 +- packages/protocols/rollup.config.ts | 6 +- packages/protocols/src/index.ts | 23 +- packages/protocols/src/nRln.ts | 57 +- packages/protocols/src/rln.ts | 122 +-- packages/protocols/src/semaphore.ts | 15 +- packages/protocols/src/utils.ts | 61 +- packages/protocols/src/zk-protocol.ts | 23 +- .../protocols/tests/field-arithmetics.test.ts | 110 +- packages/protocols/tests/rln.test.ts | 168 ++-- packages/protocols/tests/semaphore.test.ts | 117 +-- packages/types/README.md | 2 +- packages/types/package-lock.json | 946 +++++++++--------- packages/types/src/index.ts | 16 +- 24 files changed, 989 insertions(+), 991 deletions(-) diff --git a/README.md b/README.md index 6f433f7..9d9ebe2 100644 --- a/README.md +++ b/README.md @@ -141,4 +141,3 @@ $ npm run publish # Publish packages on npm. ``` You can see the other npm scripts in the `package.json` file. - diff --git a/jest.config.json b/jest.config.json index 6b23806..8ad786d 100644 --- a/jest.config.json +++ b/jest.config.json @@ -1,11 +1,11 @@ { - "projects": ["/packages/*"], - "coverageThreshold": { - "global": { - "branches": 30, - "functions": 30, - "lines": 30, - "statements": 30 - } + "projects": ["/packages/*"], + "coverageThreshold": { + "global": { + "branches": 30, + "functions": 30, + "lines": 30, + "statements": 30 } + } } diff --git a/packages/identity/README.md b/packages/identity/README.md index 8b42f49..97f9f05 100644 --- a/packages/identity/README.md +++ b/packages/identity/README.md @@ -49,22 +49,24 @@ yarn add @libsem/identity **Import** ```typescript -import { ZkIdentity, Identity } from "@libsem/identity"; +import { ZkIdentity, Identity } from "@libsem/identity" ``` + ```javascript -const { ZkIdentity } = require("@libsem/identity"); +const { ZkIdentity } = require("@libsem/identity") ``` **Mainpulation** ```typescript -const identity: Identity = ZkIdentity.genIdentity(); -const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity); +const identity: Identity = ZkIdentity.genIdentity() +const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity) ``` + **Serialization** ```typescript -const identity: Identity = ZkIdentity.genIdentity(); -const serialized: string = ZkIdentity.serializeIdentity(identity); -const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized); +const identity: Identity = ZkIdentity.genIdentity() +const serialized: string = ZkIdentity.serializeIdentity(identity) +const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized) ``` diff --git a/packages/identity/jest.config.json b/packages/identity/jest.config.json index 07490f1..b0e9a2e 100644 --- a/packages/identity/jest.config.json +++ b/packages/identity/jest.config.json @@ -1,9 +1,9 @@ { - "transform": { - "\\.(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": ["ts", "js"], - "coveragePathIgnorePatterns": ["/node_modules/", "/test/"], - "collectCoverageFrom": ["src/**/*.{js,ts}"] -} \ No newline at end of file + "transform": { + "\\.(ts|tsx)": "ts-jest" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": ["ts", "js"], + "coveragePathIgnorePatterns": ["/node_modules/", "/test/"], + "collectCoverageFrom": ["src/**/*.{js,ts}"] +} diff --git a/packages/identity/rollup.config.ts b/packages/identity/rollup.config.ts index 1674348..f54203d 100644 --- a/packages/identity/rollup.config.ts +++ b/packages/identity/rollup.config.ts @@ -1,6 +1,6 @@ -import typescript from "rollup-plugin-typescript2"; -import * as fs from "fs"; -const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")); +import typescript from "rollup-plugin-typescript2" +import * as fs from "fs" +const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")) const banner = `/** * @module ${pkg.name} @@ -9,14 +9,14 @@ const banner = `/** * @copyright ${pkg.author.name} ${new Date().getFullYear()} * @license ${pkg.license} * @see [Github]{@link ${pkg.homepage}} -*/`; +*/` export default { input: "src/index.ts", output: [ { file: pkg.exports.require, format: "cjs", banner, exports: "auto" }, - { file: pkg.exports.import, format: "es", banner }, + { file: pkg.exports.import, format: "es", banner } ], external: Object.keys(pkg.dependencies), - plugins: [typescript({ useTsconfigDeclarationDir: true })], -}; + plugins: [typescript({ useTsconfigDeclarationDir: true })] +} diff --git a/packages/identity/src/identity.ts b/packages/identity/src/identity.ts index 9ba9e0e..e536415 100644 --- a/packages/identity/src/identity.ts +++ b/packages/identity/src/identity.ts @@ -1,11 +1,11 @@ -import { genRandomIdentity, genIdentityFromSignedMessage, genRandomNumber } from "./strategies"; -import * as bigintConversion from "bigint-conversion"; -import * as ciromlibjs from "circomlibjs"; -import { Identity } from "@libsem/types"; +import { genRandomIdentity, genIdentityFromSignedMessage, genRandomNumber } from "./strategies" +import * as bigintConversion from "bigint-conversion" +import * as ciromlibjs from "circomlibjs" +import { Identity } from "@libsem/types" const poseidonHash = (data: Array): bigint => { - return ciromlibjs.poseidon(data); -}; + return ciromlibjs.poseidon(data) +} class ZkIdentity { /** @@ -15,10 +15,10 @@ class ZkIdentity { * @returns Identity */ genIdentity(strategy: "random" | "signedMessage" = "random", metadata: any = {}): Identity { - if (strategy === "random") return genRandomIdentity(); - else if (strategy === "signedMessage") return genIdentityFromSignedMessage(metadata); + if (strategy === "random") return genRandomIdentity() + else if (strategy === "signedMessage") return genIdentityFromSignedMessage(metadata) - throw new Error("provided strategy is not supported"); + throw new Error("provided strategy is not supported") } /** @@ -27,7 +27,7 @@ class ZkIdentity { * @returns secret */ genSecretFromIdentity(identity: Identity): bigint[] { - return [identity.identityNullifier, identity.identityTrapdoor]; + return [identity.identityNullifier, identity.identityTrapdoor] } /** @@ -36,11 +36,11 @@ class ZkIdentity { * @returns secret */ genRandomSecret(parts = 2): bigint[] { - const secret: bigint[] = []; + const secret: bigint[] = [] for (let i = 0; i < parts; i++) { - secret.push(genRandomNumber()); + secret.push(genRandomNumber()) } - return secret; + return secret } /** @@ -49,8 +49,8 @@ class ZkIdentity { * @returns identity commitment */ genIdentityCommitmentFromSecret(secret: bigint[]): bigint { - const secretHash = poseidonHash(secret); - return poseidonHash([secretHash]); + const secretHash = poseidonHash(secret) + return poseidonHash([secretHash]) } /** @@ -59,8 +59,8 @@ class ZkIdentity { * @returns identity commitment */ genIdentityCommitment(identity: Identity): bigint { - const secretHash = poseidonHash([identity.identityNullifier, identity.identityTrapdoor]); - return poseidonHash([secretHash]); + const secretHash = poseidonHash([identity.identityNullifier, identity.identityTrapdoor]) + return poseidonHash([secretHash]) } /** @@ -69,8 +69,8 @@ class ZkIdentity { * @returns serialized identity */ serializeIdentity(identity: Identity): string { - const data = [identity.identityNullifier.toString(16), identity.identityTrapdoor.toString(16)]; - return JSON.stringify(data); + const data = [identity.identityNullifier.toString(16), identity.identityTrapdoor.toString(16)] + return JSON.stringify(data) } /** @@ -79,12 +79,12 @@ class ZkIdentity { * @returns ZkIdentity */ unSerializeIdentity(serialisedIdentity: string): Identity { - const data = JSON.parse(serialisedIdentity); + const data = JSON.parse(serialisedIdentity) return { identityNullifier: bigintConversion.hexToBigint(data[0]), - identityTrapdoor: bigintConversion.hexToBigint(data[1]), - }; + identityTrapdoor: bigintConversion.hexToBigint(data[1]) + } } } -export default new ZkIdentity(); +export default new ZkIdentity() diff --git a/packages/identity/src/index.ts b/packages/identity/src/index.ts index b655921..50f7887 100644 --- a/packages/identity/src/index.ts +++ b/packages/identity/src/index.ts @@ -1,7 +1,4 @@ -import ZkIdentity from './identity'; -import { Identity } from "@libsem/types"; +import ZkIdentity from "./identity" +import { Identity } from "@libsem/types" -export { - ZkIdentity, - Identity -} +export { ZkIdentity, Identity } diff --git a/packages/identity/src/strategies.ts b/packages/identity/src/strategies.ts index 8b7d3f1..b59c995 100644 --- a/packages/identity/src/strategies.ts +++ b/packages/identity/src/strategies.ts @@ -1,10 +1,10 @@ -import * as crypto from 'crypto'; -import * as bigintConversion from 'bigint-conversion'; -import { sha256 as _sha256 } from "js-sha256"; -import { Identity } from '@libsem/types'; +import * as crypto from "crypto" +import * as bigintConversion from "bigint-conversion" +import { sha256 as _sha256 } from "js-sha256" +import { Identity } from "@libsem/types" const genRandomNumber = (numBytes = 31): bigint => { - return bigintConversion.bufToBigint(crypto.randomBytes(numBytes)) + return bigintConversion.bufToBigint(crypto.randomBytes(numBytes)) } /** @@ -12,10 +12,10 @@ const genRandomNumber = (numBytes = 31): bigint => { * @returns Identity */ const genRandomIdentity = (): Identity => { - return { - identityNullifier: genRandomNumber(31), - identityTrapdoor: genRandomNumber(31) - } + return { + identityNullifier: genRandomNumber(31), + identityTrapdoor: genRandomNumber(31) + } } /** @@ -24,26 +24,22 @@ const genRandomIdentity = (): Identity => { * @returns Identity */ const genIdentityFromSignedMessage = (metadata: any): Identity => { - const sha256 = (message: string): string => { - const hash = _sha256.create() - hash.update(message) - return hash.hex() - } + const sha256 = (message: string): string => { + const hash = _sha256.create() + hash.update(message) + return hash.hex() + } - const { signedMessage } = metadata; + const { signedMessage } = metadata - const messageHash = sha256(signedMessage) - const identityNullifier = bigintConversion.hexToBigint(sha256(`${messageHash}identity_nullifier`)) - const identityTrapdoor = bigintConversion.hexToBigint(sha256(`${messageHash}identity_trapdoor`)) + const messageHash = sha256(signedMessage) + const identityNullifier = bigintConversion.hexToBigint(sha256(`${messageHash}identity_nullifier`)) + const identityTrapdoor = bigintConversion.hexToBigint(sha256(`${messageHash}identity_trapdoor`)) - return { - identityTrapdoor, - identityNullifier - } + return { + identityTrapdoor, + identityNullifier + } } -export { - genRandomIdentity, - genIdentityFromSignedMessage, - genRandomNumber -} +export { genRandomIdentity, genIdentityFromSignedMessage, genRandomNumber } diff --git a/packages/identity/tests/identity.test.ts b/packages/identity/tests/identity.test.ts index 4a28b8f..47954c0 100644 --- a/packages/identity/tests/identity.test.ts +++ b/packages/identity/tests/identity.test.ts @@ -1,51 +1,51 @@ -import { ZkIdentity } from "../src"; -import { Identity } from "../../types"; +import { ZkIdentity } from "../src" +import { Identity } from "../../types" describe("Semaphore identity", () => { - describe("Create identity", () => { - it("Should create a Semaphore identity", async () => { - const identity: Identity = ZkIdentity.genIdentity(); - expect(typeof identity).toEqual("object") - }) - it("Should generate secret from identity", async () => { - const identity: Identity = ZkIdentity.genIdentity(); - const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity); - expect(identitySecret.length).toEqual(2); - expect(identitySecret[0]).toEqual(identity.identityNullifier); - expect(identitySecret[1]).toEqual(identity.identityTrapdoor); - expect(typeof identitySecret).toEqual("object") - }) - - it("Should generate random secret", async () => { - const secretParts = 5; - const identitySecret: bigint[] = ZkIdentity.genRandomSecret(secretParts); - expect(identitySecret.length).toEqual(5); - expect(typeof identitySecret).toEqual("object") - }) - - it("Should generate identity commitment from identity", async () => { - const identity: Identity = ZkIdentity.genIdentity(); - const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity); - expect(typeof identityCommitment).toEqual("bigint") - }) - - it("Should generate identity commitment from random secret", async () => { - const secretParts = 5; - const identitySecret: bigint[] = ZkIdentity.genRandomSecret(secretParts); - const identityCommitment: bigint = ZkIdentity.genIdentityCommitmentFromSecret(identitySecret); - expect(typeof identityCommitment).toEqual("bigint") - }) - - it("Should serialize identity", async () => { - const identity: Identity = ZkIdentity.genIdentity(); - const serialized: string = ZkIdentity.serializeIdentity(identity); - expect(typeof serialized).toEqual("string") - }) - it("Should unserialize identity", async () => { - const identity: Identity = ZkIdentity.genIdentity(); - const serialized: string = ZkIdentity.serializeIdentity(identity); - const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized); - expect(unserialized).toStrictEqual(identity) - }) + describe("Create identity", () => { + it("Should create a Semaphore identity", async () => { + const identity: Identity = ZkIdentity.genIdentity() + expect(typeof identity).toEqual("object") }) + it("Should generate secret from identity", async () => { + const identity: Identity = ZkIdentity.genIdentity() + const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity) + expect(identitySecret.length).toEqual(2) + expect(identitySecret[0]).toEqual(identity.identityNullifier) + expect(identitySecret[1]).toEqual(identity.identityTrapdoor) + expect(typeof identitySecret).toEqual("object") + }) + + it("Should generate random secret", async () => { + const secretParts = 5 + const identitySecret: bigint[] = ZkIdentity.genRandomSecret(secretParts) + expect(identitySecret.length).toEqual(5) + expect(typeof identitySecret).toEqual("object") + }) + + it("Should generate identity commitment from identity", async () => { + const identity: Identity = ZkIdentity.genIdentity() + const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity) + expect(typeof identityCommitment).toEqual("bigint") + }) + + it("Should generate identity commitment from random secret", async () => { + const secretParts = 5 + const identitySecret: bigint[] = ZkIdentity.genRandomSecret(secretParts) + const identityCommitment: bigint = ZkIdentity.genIdentityCommitmentFromSecret(identitySecret) + expect(typeof identityCommitment).toEqual("bigint") + }) + + it("Should serialize identity", async () => { + const identity: Identity = ZkIdentity.genIdentity() + const serialized: string = ZkIdentity.serializeIdentity(identity) + expect(typeof serialized).toEqual("string") + }) + it("Should unserialize identity", async () => { + const identity: Identity = ZkIdentity.genIdentity() + const serialized: string = ZkIdentity.serializeIdentity(identity) + const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized) + expect(unserialized).toStrictEqual(identity) + }) + }) }) diff --git a/packages/protocols/README.md b/packages/protocols/README.md index e5e65a2..0e47ed0 100644 --- a/packages/protocols/README.md +++ b/packages/protocols/README.md @@ -49,19 +49,24 @@ yarn add @libsem/protocols **Import** ```typescript -import { ZkIdentity, Identity } from '@libsem/identity'; -import { Semaphore, MerkleProof, IProof, generateMerkleProof, genExternalNullifier, genSignalHash } from '@libsem/protocols'; - - +import { ZkIdentity, Identity } from "@libsem/identity" +import { + Semaphore, + MerkleProof, + IProof, + generateMerkleProof, + genExternalNullifier, + genSignalHash +} from "@libsem/protocols" ``` -```javascript -const { ZkIdentity } = require('@libsem/identity'); -const { Semaphore, Rln, NRln, generateMerkleProof, genExternalNullifier, genSignalHash } = require('@libsem/protocols'); +```javascript +const { ZkIdentity } = require("@libsem/identity") +const { Semaphore, Rln, NRln, generateMerkleProof, genExternalNullifier, genSignalHash } = require("@libsem/protocols") ``` **Merkle Proofs** -Generate merkle proof for your identity given the array of registered identity commitments +Generate merkle proof for your identity given the array of registered identity commitments ```typescript const identityCommitments: Array = [...]; @@ -72,20 +77,21 @@ const merkleProof: MerkleProof = generateMerkleProof(TREE_DEPTH, ZERO_VALUE, NUM **Semaphore** -In order to create semaphore proof, make sure to +In order to create semaphore proof, make sure to ```typescript -const witness = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal); -const fullProof = await Semaphore.genProof(witness, wasmFilePath, finalZkeyPath); +const witness = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal) +const fullProof = await Semaphore.genProof(witness, wasmFilePath, finalZkeyPath) ``` + **Serialization** ```typescript -const identity: Identity = ZkIdentity.genIdentity(); -const serialized: string = ZkIdentity.serializeIdentity(identity); -const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized); - +const identity: Identity = ZkIdentity.genIdentity() +const serialized: string = ZkIdentity.serializeIdentity(identity) +const unserialized: Identity = ZkIdentity.unSerializeIdentity(serialized) ``` + ## 📜 Final Note For full examples of how to integrate with contracts check https://github.com/appliedzkp/semaphore repository. diff --git a/packages/protocols/jest.config.json b/packages/protocols/jest.config.json index 07490f1..b0e9a2e 100644 --- a/packages/protocols/jest.config.json +++ b/packages/protocols/jest.config.json @@ -1,9 +1,9 @@ { - "transform": { - "\\.(ts|tsx)": "ts-jest" - }, - "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "moduleFileExtensions": ["ts", "js"], - "coveragePathIgnorePatterns": ["/node_modules/", "/test/"], - "collectCoverageFrom": ["src/**/*.{js,ts}"] -} \ No newline at end of file + "transform": { + "\\.(ts|tsx)": "ts-jest" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": ["ts", "js"], + "coveragePathIgnorePatterns": ["/node_modules/", "/test/"], + "collectCoverageFrom": ["src/**/*.{js,ts}"] +} diff --git a/packages/protocols/rollup.config.ts b/packages/protocols/rollup.config.ts index 935c02f..f54203d 100644 --- a/packages/protocols/rollup.config.ts +++ b/packages/protocols/rollup.config.ts @@ -1,6 +1,6 @@ import typescript from "rollup-plugin-typescript2" -import * as fs from 'fs'; -const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")); +import * as fs from "fs" +const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")) const banner = `/** * @module ${pkg.name} @@ -9,7 +9,7 @@ const banner = `/** * @copyright ${pkg.author.name} ${new Date().getFullYear()} * @license ${pkg.license} * @see [Github]{@link ${pkg.homepage}} -*/`; +*/` export default { input: "src/index.ts", diff --git a/packages/protocols/src/index.ts b/packages/protocols/src/index.ts index 3305e8d..3d3b818 100644 --- a/packages/protocols/src/index.ts +++ b/packages/protocols/src/index.ts @@ -1,18 +1,7 @@ -import Semaphore from './semaphore'; -import Rln from './rln'; -import NRln from './nRln'; -import { generateMerkleProof, genExternalNullifier, genSignalHash } from './utils'; -import { Identity, MerkleProof, IProof } from "@libsem/types"; +import Semaphore from "./semaphore" +import Rln from "./rln" +import NRln from "./nRln" +import { generateMerkleProof, genExternalNullifier, genSignalHash } from "./utils" +import { Identity, MerkleProof, IProof } from "@libsem/types" - -export { - Semaphore, - Rln, - NRln, - generateMerkleProof, - genExternalNullifier, - genSignalHash, - Identity, - MerkleProof, - IProof -} +export { Semaphore, Rln, NRln, generateMerkleProof, genExternalNullifier, genSignalHash, Identity, MerkleProof, IProof } diff --git a/packages/protocols/src/nRln.ts b/packages/protocols/src/nRln.ts index 440a121..8e02dac 100644 --- a/packages/protocols/src/nRln.ts +++ b/packages/protocols/src/nRln.ts @@ -1,6 +1,6 @@ -import { ZkProtocol } from "./zk-protocol"; -import { genSignalHash, poseidonHash } from "./utils"; -import { Fq } from "./utils"; +import { ZkProtocol } from "./zk-protocol" +import { genSignalHash, poseidonHash } from "./utils" +import { Fq } from "./utils" class NRln extends ZkProtocol { /** @@ -12,14 +12,20 @@ class NRln extends ZkProtocol { * @param shouldHash should signal be hashed before broadcast * @returns rln witness */ - genWitness(identitySecret: Array, merkleProof: any, epoch: string | bigint, signal: string, shouldHash = true): any { + genWitness( + identitySecret: Array, + merkleProof: any, + epoch: string | bigint, + signal: string, + shouldHash = true + ): any { return { identity_secret: identitySecret, path_elements: merkleProof.pathElements, identity_path_index: merkleProof.indices, x: shouldHash ? genSignalHash(signal) : signal, - epoch, - }; + epoch + } } /** @@ -31,23 +37,23 @@ class NRln extends ZkProtocol { * @returns */ calculateOutput(identitySecret: Array, epoch: bigint, x: bigint, limit: number): Array { - const a0 = poseidonHash(identitySecret); + const a0 = poseidonHash(identitySecret) - const coeffs: Array = []; - let tmpX = x; + const coeffs: Array = [] + let tmpX = x - coeffs.push(poseidonHash([identitySecret[0], epoch])); - let y: bigint = Fq.add(Fq.mul(coeffs[0], tmpX), a0); + coeffs.push(poseidonHash([identitySecret[0], epoch])) + let y: bigint = Fq.add(Fq.mul(coeffs[0], tmpX), a0) for (let i = 1; i < limit; i++) { - tmpX = Fq.mul(x, tmpX); + tmpX = Fq.mul(x, tmpX) - coeffs.push(poseidonHash([identitySecret[i], epoch])); - y = Fq.add(y, Fq.mul(coeffs[i], tmpX)); + coeffs.push(poseidonHash([identitySecret[i], epoch])) + y = Fq.add(y, Fq.mul(coeffs[i], tmpX)) } - const nullifier: bigint = this.genNullifier(coeffs); - return [y, nullifier]; + const nullifier: bigint = this.genNullifier(coeffs) + return [y, nullifier] } /** @@ -56,7 +62,7 @@ class NRln extends ZkProtocol { * @returns slashing nullifier */ genNullifier(coeffs: Array): bigint { - return poseidonHash(coeffs); + return poseidonHash(coeffs) } /** @@ -66,21 +72,20 @@ class NRln extends ZkProtocol { * @returns identity secret */ retrieveSecret(xs: Array, ys: Array): bigint { - if (xs.length !== ys.length) throw new Error("x and y arrays must be of same size"); - const numOfPoints: number = xs.length; - let f0 = BigInt(0); + if (xs.length !== ys.length) throw new Error("x and y arrays must be of same size") + const numOfPoints: number = xs.length + let f0 = BigInt(0) for (let i = 0; i < numOfPoints; i++) { - let p = BigInt(1); + let p = BigInt(1) for (let j = 0; j < numOfPoints; j++) { if (j !== i) { - p = Fq.mul(p, Fq.div(xs[j], Fq.sub(xs[j], xs[i]))); + p = Fq.mul(p, Fq.div(xs[j], Fq.sub(xs[j], xs[i]))) } } - f0 = Fq.add(f0, Fq.mul(ys[i], p)); + f0 = Fq.add(f0, Fq.mul(ys[i], p)) } - return f0; + return f0 } } -export default new NRln(); - +export default new NRln() diff --git a/packages/protocols/src/rln.ts b/packages/protocols/src/rln.ts index 40c4f0b..6357d00 100644 --- a/packages/protocols/src/rln.ts +++ b/packages/protocols/src/rln.ts @@ -1,10 +1,8 @@ -import { ZkProtocol } from "./zk-protocol"; -import { genSignalHash, poseidonHash } from "./utils"; -import { Fq } from "./utils"; - +import { ZkProtocol } from "./zk-protocol" +import { genSignalHash, poseidonHash } from "./utils" +import { Fq } from "./utils" class Rln extends ZkProtocol { - /** * Creates witness for rln proof * @param identitySecret identity secret @@ -15,65 +13,71 @@ class Rln extends ZkProtocol { * @param shouldHash should signal be hashed before broadcast * @returns rln witness */ - genWitness(identitySecret: bigint, merkleProof: any, epoch: string | bigint, signal: string, rlnIdentifier: bigint, shouldHash = true): any { - return { - identity_secret: identitySecret, - path_elements: merkleProof.pathElements, - identity_path_index: merkleProof.indices, - x: shouldHash ? genSignalHash(signal): signal, - epoch, - rln_identifier: rlnIdentifier, - } + genWitness( + identitySecret: bigint, + merkleProof: any, + epoch: string | bigint, + signal: string, + rlnIdentifier: bigint, + shouldHash = true + ): any { + return { + identity_secret: identitySecret, + path_elements: merkleProof.pathElements, + identity_path_index: merkleProof.indices, + x: shouldHash ? genSignalHash(signal) : signal, + epoch, + rln_identifier: rlnIdentifier } + } - /** - * Calculates - * @param identitySecret identity secret - * @param epoch epoch on which signal is broadcasted - * @param rlnIdentifier unique identifier of rln dapp - * @param x signal hash - * @returns y & slashing nullfier - */ - calculateOutput(identitySecret: bigint, epoch: bigint, rlnIdentifier: bigint, x: bigint): Array { - const a1: bigint = poseidonHash([identitySecret, epoch, rlnIdentifier]); - const y: bigint = Fq.normalize(a1 * x + identitySecret); - const nullifier = this.genNullifier(a1, rlnIdentifier); - return [y, nullifier] - } + /** + * Calculates + * @param identitySecret identity secret + * @param epoch epoch on which signal is broadcasted + * @param rlnIdentifier unique identifier of rln dapp + * @param x signal hash + * @returns y & slashing nullfier + */ + calculateOutput(identitySecret: bigint, epoch: bigint, rlnIdentifier: bigint, x: bigint): Array { + const a1: bigint = poseidonHash([identitySecret, epoch, rlnIdentifier]) + const y: bigint = Fq.normalize(a1 * x + identitySecret) + const nullifier = this.genNullifier(a1, rlnIdentifier) + return [y, nullifier] + } - /** - * - * @param a1 y = a1 * x + a0 (a1 = poseidonHash(identity secret, epoch, rlnIdentifier)) - * @param rlnIdentifier unique identifier of rln dapp - * @returns rln slashing nullifier - */ - genNullifier(a1: bigint, rlnIdentifier: bigint): bigint { - return poseidonHash([a1, rlnIdentifier]); - } + /** + * + * @param a1 y = a1 * x + a0 (a1 = poseidonHash(identity secret, epoch, rlnIdentifier)) + * @param rlnIdentifier unique identifier of rln dapp + * @returns rln slashing nullifier + */ + genNullifier(a1: bigint, rlnIdentifier: bigint): bigint { + return poseidonHash([a1, rlnIdentifier]) + } - /** - * When spam occurs, identity secret can be retrieved - * @param x1 x1 - * @param x2 x2 - * @param y1 y1 - * @param y2 y2 - * @returns identity secret - */ - retrieveSecret(x1: bigint, x2:bigint, y1:bigint, y2:bigint): bigint { - const slope = Fq.div(Fq.sub(y2, y1), Fq.sub(x2, x1)) - const privateKey = Fq.sub(y1, Fq.mul(slope, x1)); - return Fq.normalize(privateKey); - } + /** + * When spam occurs, identity secret can be retrieved + * @param x1 x1 + * @param x2 x2 + * @param y1 y1 + * @param y2 y2 + * @returns identity secret + */ + retrieveSecret(x1: bigint, x2: bigint, y1: bigint, y2: bigint): bigint { + const slope = Fq.div(Fq.sub(y2, y1), Fq.sub(x2, x1)) + const privateKey = Fq.sub(y1, Fq.mul(slope, x1)) + return Fq.normalize(privateKey) + } - /** - * - * @returns unique identifier of rln dapp - */ - - genIdentifier(): bigint { - return Fq.random(); - } + /** + * + * @returns unique identifier of rln dapp + */ + genIdentifier(): bigint { + return Fq.random() + } } -export default new Rln(); +export default new Rln() diff --git a/packages/protocols/src/semaphore.ts b/packages/protocols/src/semaphore.ts index dfba136..b37aded 100644 --- a/packages/protocols/src/semaphore.ts +++ b/packages/protocols/src/semaphore.ts @@ -1,6 +1,6 @@ -import { ZkProtocol } from "./zk-protocol"; -import { genSignalHash, poseidonHash } from "./utils"; -import { Identity, MerkleProof } from "@libsem/types"; +import { ZkProtocol } from "./zk-protocol" +import { genSignalHash, poseidonHash } from "./utils" +import { Identity, MerkleProof } from "@libsem/types" class Semaphore extends ZkProtocol { /** @@ -25,8 +25,8 @@ class Semaphore extends ZkProtocol { identity_path_index: merkleProof.indices, path_elements: merkleProof.pathElements, external_nullifier: externalNullifier, - signal_hash: shouldHash ? genSignalHash(signal) : signal, - }; + signal_hash: shouldHash ? genSignalHash(signal) : signal + } } /** @@ -37,9 +37,8 @@ class Semaphore extends ZkProtocol { * @returns */ genNullifierHash(externalNullifier: string | bigint, identityNullifier: string | bigint, nLevels: number): bigint { - return poseidonHash([BigInt(externalNullifier), BigInt(identityNullifier), BigInt(nLevels)]); + return poseidonHash([BigInt(externalNullifier), BigInt(identityNullifier), BigInt(nLevels)]) } } -export default new Semaphore(); - +export default new Semaphore() diff --git a/packages/protocols/src/utils.ts b/packages/protocols/src/utils.ts index 5266dcd..3949458 100644 --- a/packages/protocols/src/utils.ts +++ b/packages/protocols/src/utils.ts @@ -1,40 +1,40 @@ /* eslint @typescript-eslint/no-var-requires: "off" */ -const Tree = require("incrementalquintree/build/IncrementalQuinTree"); -import * as ciromlibjs from "circomlibjs"; -import * as ethers from "ethers"; -import { MerkleProof } from "@libsem/types"; +const Tree = require("incrementalquintree/build/IncrementalQuinTree") +import * as ciromlibjs from "circomlibjs" +import * as ethers from "ethers" +import { MerkleProof } from "@libsem/types" -export const SNARK_FIELD_SIZE = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617"); +export const SNARK_FIELD_SIZE = BigInt("21888242871839275222246405745257275088548364400416034343698204186575808495617") -const ZqField = require("ffjavascript").ZqField; -export const Fq = new ZqField(SNARK_FIELD_SIZE); +const ZqField = require("ffjavascript").ZqField +export const Fq = new ZqField(SNARK_FIELD_SIZE) -type IncrementalQuinTree = any; +type IncrementalQuinTree = any export const poseidonHash = (data: Array): bigint => { - return ciromlibjs.poseidon(data); -}; + return ciromlibjs.poseidon(data) +} export const genSignalHash = (signal: string): bigint => { - const converted = ethers.utils.hexlify(ethers.utils.toUtf8Bytes(signal)); - return BigInt(ethers.utils.solidityKeccak256(["bytes"], [converted])) >> BigInt(8); -}; + const converted = ethers.utils.hexlify(ethers.utils.toUtf8Bytes(signal)) + return BigInt(ethers.utils.solidityKeccak256(["bytes"], [converted])) >> BigInt(8) +} export const genExternalNullifier = (plaintext: string): string => { const _cutOrExpandHexToBytes = (hexStr: string, bytes: number): string => { - const len = bytes * 2; + const len = bytes * 2 - const h = hexStr.slice(2, len + 2); - return "0x" + h.padStart(len, "0"); - }; + const h = hexStr.slice(2, len + 2) + return "0x" + h.padStart(len, "0") + } - const hashed = ethers.utils.solidityKeccak256(["string"], [plaintext]); - return _cutOrExpandHexToBytes("0x" + hashed.slice(8), 32); -}; + const hashed = ethers.utils.solidityKeccak256(["string"], [plaintext]) + return _cutOrExpandHexToBytes("0x" + hashed.slice(8), 32) +} export const createTree = (depth: number, zeroValue: number | BigInt, leavesPerNode: number): IncrementalQuinTree => { - return new Tree.IncrementalQuinTree(depth, zeroValue, leavesPerNode, poseidonHash); -}; + return new Tree.IncrementalQuinTree(depth, zeroValue, leavesPerNode, poseidonHash) +} /** * Creates merkle proof @@ -52,18 +52,17 @@ export const generateMerkleProof = ( leaves: Array, leaf: bigint | string ): MerkleProof => { - const tree: IncrementalQuinTree = new Tree.IncrementalQuinTree(depth, zeroValue, leavesPerNode, poseidonHash); - const leafIndex = leaves.indexOf(leaf); - if (leafIndex === -1) throw new Error("Leaf does not exists"); + const tree: IncrementalQuinTree = new Tree.IncrementalQuinTree(depth, zeroValue, leavesPerNode, poseidonHash) + const leafIndex = leaves.indexOf(leaf) + if (leafIndex === -1) throw new Error("Leaf does not exists") for (const leaf of leaves) { - tree.insert(leaf); + tree.insert(leaf) } - const merkleProof = tree.genMerklePath(leafIndex); + const merkleProof = tree.genMerklePath(leafIndex) return { root: tree.root, - ...merkleProof, - }; -}; - + ...merkleProof + } +} diff --git a/packages/protocols/src/zk-protocol.ts b/packages/protocols/src/zk-protocol.ts index 764f9eb..a28a26e 100644 --- a/packages/protocols/src/zk-protocol.ts +++ b/packages/protocols/src/zk-protocol.ts @@ -1,7 +1,7 @@ /* eslint @typescript-eslint/no-var-requires: "off" */ -const { groth16 } = require("snarkjs"); -import { SNARK_FIELD_SIZE } from "./utils"; -import { IProof } from "@libsem/types"; +const { groth16 } = require("snarkjs") +import { SNARK_FIELD_SIZE } from "./utils" +import { IProof } from "@libsem/types" export class ZkProtocol { /** @@ -12,7 +12,7 @@ export class ZkProtocol { * @returns zero knowledge proof */ genProof(grothInput: any, wasmFilePath: string, finalZkeyPath: string): Promise { - return groth16.fullProve(grothInput, wasmFilePath, finalZkeyPath); + return groth16.fullProve(grothInput, wasmFilePath, finalZkeyPath) } /** @@ -22,8 +22,8 @@ export class ZkProtocol { * @returns Is provided proof valid */ verifyProof(vKey: string, fullProof: IProof): Promise { - const { proof, publicSignals } = fullProof; - return groth16.verify(vKey, publicSignals, proof); + const { proof, publicSignals } = fullProof + return groth16.verify(vKey, publicSignals, proof) } /** @@ -32,17 +32,16 @@ export class ZkProtocol { * @returns Proof */ packToSolidityProof(fullProof: IProof) { - const { proof, publicSignals } = fullProof; + const { proof, publicSignals } = fullProof return { a: proof.pi_a.slice(0, 2), b: proof.pi_b.map((x: any) => x.reverse()).slice(0, 2), c: proof.pi_c.slice(0, 2), inputs: publicSignals.map((x: any) => { - x = BigInt(x); - return (x % SNARK_FIELD_SIZE).toString(); - }), - }; + x = BigInt(x) + return (x % SNARK_FIELD_SIZE).toString() + }) + } } } - diff --git a/packages/protocols/tests/field-arithmetics.test.ts b/packages/protocols/tests/field-arithmetics.test.ts index 6dcbb92..10de0ca 100644 --- a/packages/protocols/tests/field-arithmetics.test.ts +++ b/packages/protocols/tests/field-arithmetics.test.ts @@ -1,59 +1,59 @@ -import { Fq } from "../src/utils"; +import { Fq } from "../src/utils" describe("Field arithmetics", () => { - describe("Test bunch of calculations in Fq", () => { - it("Retrieve n from y = kx + n", () => { - const k = Fq.random(); - const n = Fq.random(); - - const x1 = Fq.random(); - const y1 = Fq.add(Fq.mul(k, x1), n); - - const x2 = Fq.random(); - const y2 = Fq.add(Fq.mul(k, x2), n); - - const ydiff = Fq.sub(y2, y1); - const xdiff = Fq.sub(x2, x1); - - const slope = Fq.div(ydiff, xdiff); - const retrieved = Fq.sub(y1, Fq.mul(x1, slope)); - - expect(retrieved).toEqual(n) - }) - it("Lagrange in Fq", () => { - const degree = 4; + describe("Test bunch of calculations in Fq", () => { + it("Retrieve n from y = kx + n", () => { + const k = Fq.random() + const n = Fq.random() - const coeffs: Array = [BigInt(7), BigInt(6), BigInt(9), BigInt(1), BigInt(7)]; - const xs: Array = []; - - for(let i=0;i = []; - for (let i=0;i { + const degree = 4 + + const coeffs: Array = [BigInt(7), BigInt(6), BigInt(9), BigInt(1), BigInt(7)] + const xs: Array = [] + + for (let i = 0; i < degree; i++) { + xs.push(BigInt(i)) + } + + const ys: Array = [] + for (let i = 0; i < degree; i++) { + const x: bigint = xs[i] + let tmpX: bigint = x + let y: bigint = coeffs[0] + for (let j = 1; j < degree + 1; j++) { + y = Fq.add(y, Fq.mul(tmpX, coeffs[j])) + tmpX = Fq.mul(tmpX, x) + } + ys.push(y) + } + + let f0 = BigInt(0) + for (let i = 0; i < degree; i++) { + let p = BigInt(1) + for (let j = 0; j < degree; j++) { + if (j !== i) { + p = Fq.mul(p, Fq.div(xs[j], Fq.sub(xs[j], xs[i]))) + } + } + f0 = Fq.add(f0, Fq.mul(ys[i], p)) + } + + expect(Fq.eq(f0, coeffs[0])).toBe(true) + }) + }) +}) diff --git a/packages/protocols/tests/rln.test.ts b/packages/protocols/tests/rln.test.ts index 36b01d2..56ee79d 100644 --- a/packages/protocols/tests/rln.test.ts +++ b/packages/protocols/tests/rln.test.ts @@ -1,98 +1,96 @@ -import { Rln } from "../src"; -import { ZkIdentity } from "../../identity/src"; -import { Identity, MerkleProof, IProof } from "../../types"; -import { genSignalHash, genExternalNullifier, generateMerkleProof, poseidonHash } from "../src/utils"; -import * as path from "path"; -import * as fs from "fs"; +import { Rln } from "../src" +import { ZkIdentity } from "../../identity/src" +import { Identity, MerkleProof, IProof } from "../../types" +import { genSignalHash, genExternalNullifier, generateMerkleProof, poseidonHash } from "../src/utils" +import * as path from "path" +import * as fs from "fs" -const identityCommitments: Array = []; +const identityCommitments: Array = [] beforeAll(() => { - const leafIndex = 3; + const leafIndex = 3 - for (let i=0; i { - describe("Rln functionalities", () => { - it("Generate rln witness", () => { - const identity: Identity = ZkIdentity.genIdentity(); - const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity); - const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity); - const secretHash: bigint = poseidonHash(identitySecret); + describe("Rln functionalities", () => { + it("Generate rln witness", () => { + const identity: Identity = ZkIdentity.genIdentity() + const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity) + const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity) + const secretHash: bigint = poseidonHash(identitySecret) - const commitments: Array = Object.assign([], identityCommitments); - commitments.push(identityCommitment); + const commitments: Array = Object.assign([], identityCommitments) + commitments.push(identityCommitment) - const signal = 'hey hey'; - const epoch: string = genExternalNullifier('test-epoch'); - const rlnIdentifier: bigint = Rln.genIdentifier(); + const signal = "hey hey" + const epoch: string = genExternalNullifier("test-epoch") + const rlnIdentifier: bigint = Rln.genIdentifier() - const merkleProof: MerkleProof = generateMerkleProof(15, BigInt(0), 5, commitments, identityCommitment); - const witness: IProof = Rln.genWitness(secretHash, merkleProof, epoch, signal, rlnIdentifier); + const merkleProof: MerkleProof = generateMerkleProof(15, BigInt(0), 5, commitments, identityCommitment) + const witness: IProof = Rln.genWitness(secretHash, merkleProof, epoch, signal, rlnIdentifier) - expect(typeof witness).toBe("object"); - }) - it.skip("Generate rln proof and verify it", async () => { - /** - * Compiled RLN circuits are needed to run this test so it's being skipped in hooks - */ - const identity: Identity = ZkIdentity.genIdentity(); - const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity); - const secretHash: bigint = poseidonHash(identitySecret); - - const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity); - - const commitments: Array = Object.assign([], identityCommitments); - commitments.push(identityCommitment); - - const signal = 'hey hey'; - const signalHash = genSignalHash(signal); - const epoch: string = genExternalNullifier('test-epoch'); - const rlnIdentifier: bigint = Rln.genIdentifier(); - - - const merkleProof: MerkleProof = generateMerkleProof(15, BigInt(0), 2, commitments, identityCommitment); - const witness: IProof = Rln.genWitness(secretHash, merkleProof, epoch, signal, rlnIdentifier); - - const [y, nullifier] = Rln.calculateOutput(secretHash, BigInt(epoch), rlnIdentifier, signalHash); - const publicSignals = [y, merkleProof.root, nullifier, signalHash, epoch, rlnIdentifier]; - - const vkeyPath: string = path.join('./zkeyFiles', 'rln', 'verification_key.json'); - const vKey = JSON.parse(fs.readFileSync(vkeyPath, 'utf-8')); - - const wasmFilePath: string = path.join('./zkeyFiles', 'rln', 'rln.wasm'); - const finalZkeyPath: string = path.join('./zkeyFiles', 'rln', 'rln_final.zkey'); - - const fullProof: IProof = await Rln.genProof(witness, wasmFilePath, finalZkeyPath); - const res: boolean = await Rln.verifyProof(vKey, { proof: fullProof.proof, publicSignals }); - - expect(res).toBe(true); - }) - it("Should retrieve user secret after spaming", () => { - const identity: Identity = ZkIdentity.genIdentity(); - const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity); - const secretHash: bigint = poseidonHash(identitySecret); - - const signal1 = 'hey hey'; - const signalHash1 = genSignalHash(signal1); - const signal2 = 'hey hey again'; - const signalHash2 = genSignalHash(signal2); - - const epoch: string = genExternalNullifier('test-epoch'); - const rlnIdentifier: bigint = Rln.genIdentifier(); - - const [y1] = Rln.calculateOutput(secretHash, BigInt(epoch), rlnIdentifier, signalHash1); - const [y2] = Rln.calculateOutput(secretHash, BigInt(epoch), rlnIdentifier, signalHash2); - - const retrievedSecret: bigint = Rln.retrieveSecret(signalHash1, signalHash2, y1, y2); - - expect(retrievedSecret).toEqual(secretHash); - - }) + expect(typeof witness).toBe("object") }) + it.skip("Generate rln proof and verify it", async () => { + /** + * Compiled RLN circuits are needed to run this test so it's being skipped in hooks + */ + const identity: Identity = ZkIdentity.genIdentity() + const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity) + const secretHash: bigint = poseidonHash(identitySecret) + + const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity) + + const commitments: Array = Object.assign([], identityCommitments) + commitments.push(identityCommitment) + + const signal = "hey hey" + const signalHash = genSignalHash(signal) + const epoch: string = genExternalNullifier("test-epoch") + const rlnIdentifier: bigint = Rln.genIdentifier() + + const merkleProof: MerkleProof = generateMerkleProof(15, BigInt(0), 2, commitments, identityCommitment) + const witness: IProof = Rln.genWitness(secretHash, merkleProof, epoch, signal, rlnIdentifier) + + const [y, nullifier] = Rln.calculateOutput(secretHash, BigInt(epoch), rlnIdentifier, signalHash) + const publicSignals = [y, merkleProof.root, nullifier, signalHash, epoch, rlnIdentifier] + + const vkeyPath: string = path.join("./zkeyFiles", "rln", "verification_key.json") + const vKey = JSON.parse(fs.readFileSync(vkeyPath, "utf-8")) + + const wasmFilePath: string = path.join("./zkeyFiles", "rln", "rln.wasm") + const finalZkeyPath: string = path.join("./zkeyFiles", "rln", "rln_final.zkey") + + const fullProof: IProof = await Rln.genProof(witness, wasmFilePath, finalZkeyPath) + const res: boolean = await Rln.verifyProof(vKey, { proof: fullProof.proof, publicSignals }) + + expect(res).toBe(true) + }) + it("Should retrieve user secret after spaming", () => { + const identity: Identity = ZkIdentity.genIdentity() + const identitySecret: bigint[] = ZkIdentity.genSecretFromIdentity(identity) + const secretHash: bigint = poseidonHash(identitySecret) + + const signal1 = "hey hey" + const signalHash1 = genSignalHash(signal1) + const signal2 = "hey hey again" + const signalHash2 = genSignalHash(signal2) + + const epoch: string = genExternalNullifier("test-epoch") + const rlnIdentifier: bigint = Rln.genIdentifier() + + const [y1] = Rln.calculateOutput(secretHash, BigInt(epoch), rlnIdentifier, signalHash1) + const [y2] = Rln.calculateOutput(secretHash, BigInt(epoch), rlnIdentifier, signalHash2) + + const retrievedSecret: bigint = Rln.retrieveSecret(signalHash1, signalHash2, y1, y2) + + expect(retrievedSecret).toEqual(secretHash) + }) + }) }) diff --git a/packages/protocols/tests/semaphore.test.ts b/packages/protocols/tests/semaphore.test.ts index 6681d14..536bac8 100644 --- a/packages/protocols/tests/semaphore.test.ts +++ b/packages/protocols/tests/semaphore.test.ts @@ -1,69 +1,74 @@ -import { ZkIdentity } from "../../identity/src"; -import { Identity, MerkleProof, IProof } from "../../types"; -import { genSignalHash, genExternalNullifier, generateMerkleProof } from "../src/utils"; -import * as path from "path"; -import * as fs from "fs"; +import { ZkIdentity } from "../../identity/src" +import { Identity, MerkleProof, IProof } from "../../types" +import { genSignalHash, genExternalNullifier, generateMerkleProof } from "../src/utils" +import * as path from "path" +import * as fs from "fs" -import { Semaphore } from "../src"; +import { Semaphore } from "../src" -const identityCommitments: Array = []; +const identityCommitments: Array = [] beforeAll(() => { - jest.useFakeTimers('legacy') - jest.setTimeout(90 * 1000); - const leafIndex = 3; + jest.useFakeTimers("legacy") + jest.setTimeout(90 * 1000) + const leafIndex = 3 - for (let i=0; i { - describe("Generate and verify proof", () => { - it("Should generate semaphore witness", async () => { - const identity: Identity = ZkIdentity.genIdentity(); - const externalNullifier: string = genExternalNullifier("voting_1"); - const signal = '0x111'; - const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity); + describe("Generate and verify proof", () => { + it("Should generate semaphore witness", async () => { + const identity: Identity = ZkIdentity.genIdentity() + const externalNullifier: string = genExternalNullifier("voting_1") + const signal = "0x111" + const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity) - const commitments: Array = Object.assign([], identityCommitments); - commitments.push(identityCommitment); + const commitments: Array = Object.assign([], identityCommitments) + commitments.push(identityCommitment) - const merkleProof: MerkleProof = generateMerkleProof(20, BigInt(0), 5, commitments, identityCommitment); - const witness: IProof = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal); + const merkleProof: MerkleProof = generateMerkleProof(20, BigInt(0), 5, commitments, identityCommitment) + const witness: IProof = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal) - expect(typeof witness).toBe("object"); - }) - it.skip("Should generate semaphore full proof", async () => { - /** - * Compiled semaphore circuits are needed to run this test, so it's being skipped in hooks - */ - const identity: Identity = ZkIdentity.genIdentity(); - const externalNullifier: string = genExternalNullifier("voting_1"); - const signal = '0x111'; - const nullifierHash: bigint = Semaphore.genNullifierHash(externalNullifier, identity.identityNullifier, 20); - const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity); - - const commitments: Array = Object.assign([], identityCommitments); - commitments.push(identityCommitment); - - const merkleProof: MerkleProof = generateMerkleProof(20, BigInt(0), 5, commitments, identityCommitment); - const witness: IProof = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal); - - const publicSignals: Array = [merkleProof.root, nullifierHash, genSignalHash(signal), externalNullifier]; - - const vkeyPath: string = path.join('./zkeyFiles', 'semaphore', 'verification_key.json'); - const vKey = JSON.parse(fs.readFileSync(vkeyPath, 'utf-8')); - - const wasmFilePath: string = path.join('./zkeyFiles', 'semaphore', 'semaphore.wasm'); - const finalZkeyPath: string = path.join('./zkeyFiles', 'semaphore', 'semaphore_final.zkey'); - - const fullProof: IProof = await Semaphore.genProof(witness, wasmFilePath, finalZkeyPath); - const res: boolean = await Semaphore.verifyProof(vKey, { proof: fullProof.proof, publicSignals }); - - expect(res).toBe(true); - }) + expect(typeof witness).toBe("object") }) + it.skip("Should generate semaphore full proof", async () => { + /** + * Compiled semaphore circuits are needed to run this test, so it's being skipped in hooks + */ + const identity: Identity = ZkIdentity.genIdentity() + const externalNullifier: string = genExternalNullifier("voting_1") + const signal = "0x111" + const nullifierHash: bigint = Semaphore.genNullifierHash(externalNullifier, identity.identityNullifier, 20) + const identityCommitment: bigint = ZkIdentity.genIdentityCommitment(identity) + + const commitments: Array = Object.assign([], identityCommitments) + commitments.push(identityCommitment) + + const merkleProof: MerkleProof = generateMerkleProof(20, BigInt(0), 5, commitments, identityCommitment) + const witness: IProof = Semaphore.genWitness(identity, merkleProof, externalNullifier, signal) + + const publicSignals: Array = [ + merkleProof.root, + nullifierHash, + genSignalHash(signal), + externalNullifier + ] + + const vkeyPath: string = path.join("./zkeyFiles", "semaphore", "verification_key.json") + const vKey = JSON.parse(fs.readFileSync(vkeyPath, "utf-8")) + + const wasmFilePath: string = path.join("./zkeyFiles", "semaphore", "semaphore.wasm") + const finalZkeyPath: string = path.join("./zkeyFiles", "semaphore", "semaphore_final.zkey") + + const fullProof: IProof = await Semaphore.genProof(witness, wasmFilePath, finalZkeyPath) + const res: boolean = await Semaphore.verifyProof(vKey, { proof: fullProof.proof, publicSignals }) + + expect(res).toBe(true) + }) + }) }) diff --git a/packages/types/README.md b/packages/types/README.md index b665f26..860f259 100644 --- a/packages/types/README.md +++ b/packages/types/README.md @@ -46,5 +46,5 @@ yarn add @libsem/types **Import** ```typescript -import { Identity, IProof, MerkleProof } from "@libsem/types"; +import { Identity, IProof, MerkleProof } from "@libsem/types" ``` diff --git a/packages/types/package-lock.json b/packages/types/package-lock.json index 386f922..a4bca81 100644 --- a/packages/types/package-lock.json +++ b/packages/types/package-lock.json @@ -1,475 +1,475 @@ { - "name": "@libsem/types", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@libsem/types", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "rimraf": "^3.0.2", - "ts-node": "^10.3.0" - } - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ts-node": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.0.tgz", - "integrity": "sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ts-node": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.0.tgz", - "integrity": "sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "yn": "3.1.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } + "name": "@libsem/types", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@libsem/types", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "rimraf": "^3.0.2", + "ts-node": "^10.3.0" + } + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ts-node": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.0.tgz", + "integrity": "sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ts-node": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.0.tgz", + "integrity": "sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 0e2ec16..26133a0 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,15 +1,15 @@ export interface Identity { - identityNullifier: bigint, - identityTrapdoor: bigint, + identityNullifier: bigint + identityTrapdoor: bigint } export interface IProof { - proof: any, - publicSignals: Array, + proof: any + publicSignals: Array } export interface MerkleProof { - root: bigint, - indices: Array, - pathElements: Array -} \ No newline at end of file + root: bigint + indices: Array + pathElements: Array +}