Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

isomorphic-secp256k1-js

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

isomorphic-secp256k1-js

An ultra lightweight (2 kbyte) pure JavaScript implimentation for the secp256k1 curve for node and browsers.

  • 3.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
4
Maintainers
1
Weekly downloads
 
Created
Source

secp256k1 logo

Isomorphic SEPC256K1 JS

NPM Package CI status License: MIT

An ultra lightweight (1.6kb minify + gzip) Universal JavaScript Elliptic Curve Digital Signature Algorithm (ECDSA) for the Koblitz secp256k1 curve.

Cross platform support for Node.js and Deno.

Exports

The npm package isomorphic-secp256k1-js features optimal JavaScript module design. It doesn’t have a main index module, so use deep imports from the ECMAScript modules that are exported via the package.json field exports:

Impact on your bundle

Using the esbuild minify and gzip you can generate a digital signature with less than 1.6kb impact to your bundle.

cat dist/sign.mjs | wc
  1      86    2898

cat dist/sign.mjs.zip | wc
  10      59    1604
cat dist/get_public_key.mjs | wc
  1      27    1389

cat dist/get_public_key.mjs.zip | wc
  3      29    1006
cat dist/recover_public_key.mjs | wc
  1      50    2055

cat dist/recover_public_key.mjs.zip | wc
  4      38    1360

Installation

For Node.js, to install isomorphic-secp256k1-js run:

npm i isomorphic-secp256k1-js

For Deno.js, at the root of your project add a deno.json file and include these import paths:

{
  "imports": {
    "universal-sha256-js/": "https://deno.land/x/sha256js/",
    "universal-hmac-sha256-js/": "https://deno.land/x/hmacsha256/",
    "universal-hmac-sha256-js/hmac-sha256-node.mjs": "https://deno.land/x/hmacsha256/hmac-sha256-deno.mjs"
  }
}

Then import:

import recover_public_key from "https://deno.land/x/secp256k1js/recover_public_key.mjs";
import sign from "https://deno.land/x/secp256k1js/sign.mjs";
import get_public_key from "https://deno.land/x/secp256k1js/get_public_key.mjs";

Examples

Recover public key from private key.

const private_key = new Uint8Array([
  210, 101, 63, 247, 203, 178, 216, 255, 18, 154, 194, 126, 245, 120, 28, 230,
  139, 37, 88, 196, 26, 116, 175, 31, 45, 220, 166, 53, 203, 238, 240, 125,
]);

// Compressed public key.
console.log(get_public_key(private_key));

Generate a secp25k1 digital signature.

const private_key = new Uint8Array([
  210, 101, 63, 247, 203, 178, 216, 255, 18, 154, 194, 126, 245, 120, 28, 230,
  139, 37, 88, 196, 26, 116, 175, 31, 45, 220, 166, 53, 203, 238, 240, 125,
]);

const data = Uint8Array.from([
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
  22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
]);
sign({ data, private_key }).then(console.log);

The logged output is { r: [23, …, 89], s: [111, …, 142], v: 1 }

Note

As this package is ESM if you need to require it in a Common JS package, then you can require like this:

(async function () {
  const { default: recover_public_key } = await import(
    "isomorphic-secp256k1-js/recover_public_key.mjs"
  );
  const { number_to_array } = await import("./private/utils.mjs");

  const key_pair = await recover_public_key({
    data,
    signature: {
      r: number_to_array(
        50172533143525448505731076092836454339589141171079665638497512992118311974590n
      ),
      s: number_to_array(
        3372897403575535231543296615264124933490702058654620386530787287980439847001n
      ),
      v: 0,
    },
  });
  console.log(key_pair);
})();

Logged output was Uint8Array(33) [2,192,222,210,188,31,19,5,…

Requirements

Supported runtime environments:

Keywords

FAQs

Package last updated on 05 Sep 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc