@plumaa/signer
TypeScript icon, indicating that this package has built-in type declarations

1.1.2 • Public • Published

@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

Readme

Keywords

none

Package Sidebar

Install

npm i @plumaa/signer

Weekly Downloads

23

Version

1.1.2

License

MIT

Unpacked Size

338 kB

Total Files

55

Last publish

Collaborators

  • ernestognw