Skip to content

A smart contract signer for RSA keypairs (e.firma) and Typescript adapters to use with ERC-4337 infrastructure to send Ethereum operations

License

Notifications You must be signed in to change notification settings

PlumaaID/signer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

03faefd · Mar 31, 2025

History

41 Commits
May 13, 2024
Mar 31, 2025
Mar 31, 2025
Jul 23, 2024
Sep 26, 2024
Apr 27, 2024
Apr 28, 2024
Apr 27, 2024
May 13, 2024
Apr 27, 2024
Jul 23, 2024
May 20, 2024
Apr 27, 2024
May 19, 2024
Apr 27, 2024
Mar 31, 2025
Sep 26, 2024
Sep 26, 2024
Jul 23, 2024
May 13, 2024

Repository files navigation

@plumaa/signer

A Javascript library with Ethereum operations signing utilities for RSA keypairs

NPM Package Coverage

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

About

A smart contract signer for RSA keypairs (e.firma) and Typescript adapters to use with ERC-4337 infrastructure to send Ethereum operations

Resources

License

Stars

Watchers

Forks

Packages

No packages published