This repository exposes the API from the o1js RSA example, making it importable and enabling RSA65537 signature verification on the Mina blockchain across various projects that utilize o1js.
For more details on the source code, please review PR #1229.
- Install the package
npm install o1js-rsa
- Import the
Bigint2048
provable type and thersaVerify65537
function
import { Bigint2048, rsaVerify65537 } from 'o1js-rsa';
- Given a
message
,signature
, andmodulus
you can verify an RSA65537 signature in o1js as follows:
const message = Bigint2048.from(msg);
const signature = Bigint2048.from(sig);
const modulus = Bigint2048.from(pubKey); // domain public key
rsaVerify65537(message, signature, modulus);
Please refer to rsaZkProgram or this test-case for better context on how to use the package API.
-
The
Bigint2048.from()
static method takes native bigint type inputs. -
The provable type
Bigint2048
is a combination of 18 limbs, with each limb being a 116-bit field element. Therefore, it will only throw an overflow error if the input size exceeds 2088 bits. -
The
Bigint2048
provable type only supports thex*y mod p
operation, but not other operations like addition, division, etc. -
Please ensure to input the correct RSA parameters in order to receive an intuitive response from the
rsaVerify65537
function. -
For concise information on RSA theory, visit this link.
npm run build
npm run test
npm run testw # watch mode
npm run coverage
npm run summary
Summary | |
---|---|
Total rows | 12401 |
RangeCheck0 | 2488 |
Generic | 9913 |
Action | Time (s) |
---|---|
Compile | 2.103 |
Prove | 14.656 |
Verify | 1.187 |