@plumaa/signer
v1.3.4
Published
RSA signature and verification utilities for signing Ethereum operations with an RSA keypair
Downloads
42
Readme
@plumaa/signer
A Javascript library with Ethereum operations signing utilities for RSA keypairs
Quick Start
npm install @plumaa/signer
RSASHA256Signer
The RSASHA256Signer
is an implementation of the permissionless's SmartAccountSigner interface that uses node-forge for operating with RSA keypairs.
Usage
To create a signer:
import { RSASHA256Signer } from "@plumaa/signer";
import { pki, md } from "node-forge";
// 1. Generate a new RSA keypair or load an existing one
const keypair = pki.rsa.generateKeyPair(2048);
// 2. Create a signer with the keypair
const signer = new RSASHA256Signer(keypair);
/// ...
For signing raw messages:
// 3. Sign a message
const message = "Hello, world!";
const signature = await signer.signMessage({ message });
// 4. Verify the signature
const isValid = keypair.publicKey.verify(
signature,
md.create().update(message).digest().bytes()
);
assert(isValid); // true
Alternatively, for EIP-712 messages:
const domain = {
// ...
};
const types = {
Example: [
// ...
],
};
const message = {
// ...
};
// 3. Sign a typed message
const signature = await signer.signTypedData({
domain,
types,
message,
primaryType: "Example",
});
// 4. Verify the signature
const isValid = keypair.publicKey.verify(
signature,
md.create().update(message).digest().bytes()
);
assert(isValid); // true
RSASHA256SafeSigner
A variant of RSASHA256Signer
that signs messages as a Safe owner, which has a different signature format with a static prefix followed by a dynamic part where the signature is stored.
Usage
Creating and using a Safe signer works the same as if making a regular signer, but the signature format follows the Safe's signature encoding
import { RSASHA256SafeSigner } from "@plumaa/signer";
import { pki, md } from "node-forge";
// 1. Generate a new RSA keypair or load an existing one
const keypair = pki.rsa.generateKeyPair(2048);
// 2. Create a signer with the keypair
const signer = new RSASHA256SafeSigner(keypair);
// 3. Sign a message
const message = "Hello, world!";
const signature = await signer.signMessage({ message });
// 4. Verify the signature
const isValid = keypair.publicKey.verify(
signature,
md.create().update(message).digest().bytes()
);
assert(isValid); // true