o1js
Version:
TypeScript framework for zk-SNARKs and zkApps
35 lines (25 loc) • 1.21 kB
text/typescript
import { Performance } from '../../../lib/testing/perf-regression.js';
import { rsaZkProgram } from './program.js';
import { Bigint2048 } from './rsa.js';
import { generateRsaParams, rsaSign, sha256Bigint } from './utils.js';
let cs = await rsaZkProgram.analyzeMethods();
console.log(cs.verifyRsa65537.summary());
const forceRecompileEnabled = false;
const perfRsa = Performance.create(rsaZkProgram.name, cs);
perfRsa.start('compile');
await rsaZkProgram.compile({ forceRecompile: forceRecompileEnabled });
perfRsa.end();
console.time('generate RSA parameters and inputs (2048 bits)');
const input = await sha256Bigint('How are you!');
const params = generateRsaParams(2048);
const message = Bigint2048.from(input);
const signature = Bigint2048.from(rsaSign(input, params.d, params.n));
const modulus = Bigint2048.from(params.n);
console.timeEnd('generate RSA parameters and inputs (2048 bits)');
perfRsa.start('prove', 'verifyRsa65537');
let { proof } = await rsaZkProgram.verifyRsa65537(message, signature, modulus);
perfRsa.end();
perfRsa.start('verify', 'verifyRsa65537');
let isValid = await rsaZkProgram.verify(proof);
perfRsa.end();
if (!isValid) throw Error('proof verification failed!');