fix(tests) generate and verify proof for /api/rooms/:idc

This commit is contained in:
Tanner Shaw
2023-10-23 19:56:17 -05:00
parent 087a6471d1
commit 026172c35d
6 changed files with 41 additions and 9 deletions

View File

@@ -1,6 +1,7 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testTimeout: 50000,
setupFiles: ["<rootDir>/tests/setEnvVars.ts"],
"transform": {
"^.+\\.test.ts$": ["ts-jest", { tsconfig: "./tsconfig.tests.json" }]

7
package-lock.json generated
View File

@@ -14,6 +14,7 @@
"@ethersproject/strings": "^5.7.0",
"@faker-js/faker": "^8.0.2",
"@prisma/client": "^5.2.0",
"@semaphore-protocol/identity": "^3.15.0",
"@socket.io/admin-ui": "^0.5.1",
"bcrypt": "^5.1.1",
"body-parser": "^1.20.2",
@@ -2010,9 +2011,9 @@
"integrity": "sha512-WnNR/GQse3lX8zOHMU8zwhgX8u3qPoul8w4GjJ0WDHq+VGJimo7EGheRZ/ILeBQabnlzAerdv3vBqYBehBeoKA=="
},
"node_modules/@semaphore-protocol/identity": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/@semaphore-protocol/identity/-/identity-3.10.1.tgz",
"integrity": "sha512-H2GUHdox393YCcA4f389za2o5tnSIaGmtlPN8LCyI/UgCG/LJxQY5dLrSNM24j+kNRaq5LXaFzJIrM+zWvqBQQ==",
"version": "3.15.0",
"resolved": "https://registry.npmjs.org/@semaphore-protocol/identity/-/identity-3.15.0.tgz",
"integrity": "sha512-X3EdkMZ/riGKAuapQaUvLeWKk5CYbvipriBXYOpnVcT6XbWMKMBPdFB5cRvW9cNyORl5nEQ6+43ejWYZYSZkYQ==",
"dependencies": {
"@ethersproject/bignumber": "^5.5.0",
"@ethersproject/keccak256": "^5.7.0",

View File

@@ -28,6 +28,7 @@
"@ethersproject/strings": "^5.7.0",
"@faker-js/faker": "^8.0.2",
"@prisma/client": "^5.2.0",
"@semaphore-protocol/identity": "^3.15.0",
"@socket.io/admin-ui": "^0.5.1",
"bcrypt": "^5.1.1",
"body-parser": "^1.20.2",

View File

@@ -1,8 +1,16 @@
import { Verifier } from 'idc-nullifier';
import { Prover, Verifier } from 'idc-nullifier';
import vkey from './vkey';
import { SNARKProof } from 'idc-nullifier/dist/types/types';
import { Identity } from '@semaphore-protocol/identity';
// import fs from 'fs';
// import path from 'path';
// const zKeyRoot = path.resolve(__dirname, '../../../node_modules/idc-nullifier/dist/zkeyFiles/idcNullifier/circuit_final.zkey')
// console.log(zKeyRoot)
// const zkey = fs.readFileSync(zKeyRoot);
// const zkeyBuffer = fs.readFileSync('../../../node_modules/idc-nullifier/dist/zkeyFiles/idcNullifier/circuit_final.zkey');
// const wasmBuffer = fs.readFileSync('../../../node_modules/idc-nullifier/dist/zkeyFiles/idcNullifier/circuit.wasm');
export async function verifyIdentityProof (proof: SNARKProof): Promise<boolean> {
const verifier = new Verifier(vkey);
@@ -10,3 +18,12 @@ export async function verifyIdentityProof (proof: SNARKProof): Promise<boolean>
const isValid = await verifier.verifyProof(proof);
return isValid
}
export async function generateIdentityProof (identity: Identity, nullifier: bigint): Promise<SNARKProof> {
const prover = new Prover();
const proof = await prover.generateProof({identity: identity, externalNullifier: nullifier});
return proof;
}

View File

@@ -117,8 +117,10 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
app.get(
['/rooms/:idc', '/api/rooms/:idc'], limiter,
asyncHandler(async (req: Request, res: Response) => {
const { proof } = req.body as { proof: SNARKProof };
const isValid = await verifyIdentityProof(proof);
// const { proof } = req.body as { proof: SNARKProof };
// console.log('PROOF', proof);
const isValid = await verifyIdentityProof(req.body as SNARKProof);
console.log('VALID?', isValid)
if (isValid) {
try {
res.status(200).json(await findRoomsByIdentity(req.params.idc));

View File

@@ -5,12 +5,18 @@ import { serverConfig } from '../src/config/serverConfig';
import { PrismaClient } from '@prisma/client';
import { beforeAll, beforeEach, afterAll, describe, expect, test } from '@jest/globals';
import { randBigint, randomRoomName } from './utils';
import { generateIdentityProof } from '../src/crypto/idcVerifier/verifier';
import { Identity } from '@semaphore-protocol/identity';
process.env.DATABASE_URL = process.env.DATABASE_URL_TEST;
process.env.PORT = '3001';
const CUSTOM_ID = '444';
const room = {
roomName: randomRoomName(),
rateLimit: 1000,
@@ -32,10 +38,11 @@ const messageTestRoom = {
let roomByIdTest: string;
let testCode: string;
const testIdentity = randBigint();
const testIdentity = new Identity();
const username = 'admin';
const password = process.env.PASSWORD;
beforeAll(async () => {
const prismaTest = new PrismaClient();
await prismaTest.messages.deleteMany();
@@ -197,7 +204,7 @@ describe('Endpoints', () => {
const joinTest = {
code: testCode,
idc: testIdentity
idc: testIdentity.getCommitment().toString(),
};
await request(_app)
@@ -218,8 +225,11 @@ describe('Endpoints', () => {
});
test('It should return all rooms associated with the given identity', async () => {
let proof = await generateIdentityProof(testIdentity, BigInt(Date.now()))
console.log("PROOF", proof);
await request(_app)
.get(`/api/rooms/${testIdentity}`)
.get(`/api/rooms/${testIdentity.getCommitment().toString()}`)
.send(proof)
.then((res) => {
try {
expect(res.statusCode).toEqual(200);