This commit is contained in:
motemotech
2024-12-10 18:23:26 +09:00
parent 5dd5344729
commit 7d850a2a12
2 changed files with 57 additions and 50 deletions

View File

@@ -1,10 +1,13 @@
import crypto from 'crypto';
import { splitToWords, hexToDecimal, bytesToBigDecimal, getNAndK } from '../../../common/src/utils/utils';
import {
splitToWords,
hexToDecimal,
bytesToBigDecimal,
getNAndK,
} from '../../../common/src/utils/utils';
import { SignatureAlgorithm } from '../../../common/src/utils/types';
export const generateMockRsaPkcs1v1_5Inputs = (
signatureAlgorithm: SignatureAlgorithm,
) => {
export const generateMockRsaPkcs1v1_5Inputs = (signatureAlgorithm: SignatureAlgorithm) => {
let privateKey: string;
let publicKey: string;
let signAlgorithm: string;
@@ -33,12 +36,12 @@ export const generateMockRsaPkcs1v1_5Inputs = (
publicExponent,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem'
}
format: 'pem',
},
}));
const message = Buffer.from('test message');
@@ -51,10 +54,14 @@ export const generateMockRsaPkcs1v1_5Inputs = (
const modulus = keyDetails.n!; // base64url encoded modulus
const { n, k } = getNAndK(signatureAlgorithm);
return {
signature: splitToWords(BigInt(bytesToBigDecimal(Array.from(signature))), n, k),
modulus: splitToWords(BigInt(hexToDecimal(Buffer.from(modulus, 'base64url').toString('hex'))), n, k),
message: splitToWords(BigInt(bytesToBigDecimal(Array.from(messageHash))), n, k)
modulus: splitToWords(
BigInt(hexToDecimal(Buffer.from(modulus, 'base64url').toString('hex'))),
n,
k
),
message: splitToWords(BigInt(bytesToBigDecimal(Array.from(messageHash))), n, k),
};
};
};

View File

@@ -1,47 +1,47 @@
import { wasm as wasmTester } from "circom_tester";
import { describe, it } from "mocha";
import path from "path";
import { generateMockRsaPkcs1v1_5Inputs } from "./generateMockInputsInCircuits";
import { SignatureAlgorithm } from "../../../common/src/utils/types";
import { wasm as wasmTester } from 'circom_tester';
import { describe, it } from 'mocha';
import path from 'path';
import { generateMockRsaPkcs1v1_5Inputs } from './generateMockInputsInCircuits';
import { SignatureAlgorithm } from '../../../common/src/utils/types';
describe("VerifyRsaPkcs1v1_5 Circuit Test", function() {
this.timeout(30000);
describe('VerifyRsaPkcs1v1_5 Circuit Test', function () {
this.timeout(30000);
const rsaAlgorithms: SignatureAlgorithm[] = [
'rsa_sha1_65537_2048',
'rsa_sha256_65537_2048',
'rsa_sha256_3_2048',
'rsa_sha256_65537_3072'
];
const rsaAlgorithms: SignatureAlgorithm[] = [
'rsa_sha1_65537_2048',
'rsa_sha256_65537_2048',
'rsa_sha256_3_2048',
'rsa_sha256_65537_3072',
];
rsaAlgorithms.forEach((algorithm) => {
it(`should verify RSA signature using the circuit for ${algorithm}`, async function() {
// Generate inputs using the utility function
const { signature, modulus, message } = generateMockRsaPkcs1v1_5Inputs(algorithm);
rsaAlgorithms.forEach((algorithm) => {
it(`should verify RSA signature using the circuit for ${algorithm}`, async function () {
// Generate inputs using the utility function
const { signature, modulus, message } = generateMockRsaPkcs1v1_5Inputs(algorithm);
// Run circuit with inputs
const circuit = await wasmTester(
path.join(__dirname, `../../circuits/tests/utils/test_${algorithm}.circom`),
{
include: [
'node_modules',
'./node_modules/@zk-kit/binary-merkle-root.circom/src',
'./node_modules/circomlib/circuits',
],
}
);
// Run circuit with inputs
const circuit = await wasmTester(
path.join(__dirname, `../../circuits/tests/utils/test_${algorithm}.circom`),
{
include: [
'node_modules',
'./node_modules/@zk-kit/binary-merkle-root.circom/src',
'./node_modules/circomlib/circuits',
],
}
);
// Log the inputs for debugging
console.log(`Testing algorithm: ${algorithm}`);
// Log the inputs for debugging
console.log(`Testing algorithm: ${algorithm}`);
const witness = await circuit.calculateWitness({
signature,
modulus,
message
});
const witness = await circuit.calculateWitness({
signature,
modulus,
message,
});
// Check constraints
await circuit.checkConstraints(witness);
});
// Check constraints
await circuit.checkConstraints(witness);
});
});
});
});