npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ecies-parity

v0.1.1

Published

JavaScript Elliptic Curve Integrated Encryption Scheme Library - Based of Parity's implementation

Downloads

671

Readme

ecies-parity

This is a javaScript Elliptic curve Integrated Encryption Scheme (ECIES) library for both browserify and node.js. This implementation mimics parity's rust implementation to allow dapps to encrypt/decrypt messages from parity's extended JSON RPC API.

This module is a modified version of the eccrypto javascript library.

Motivation

Parity has implemented ECIES encryption and decryption for arbitrary messages through its extended JSON RPC API. Other Ethereum clients, (i.e. Metamask, go-ethereum) have not implemented such encryption. Dapps wishing to utilise Parity's features but also facilitate other Ethereum clients may require encrypting and decrypting Parity's messages in the browser. This package is designed to facilitate such tasks.

Implementation details

As with eccrypto, this library provides two implementations for Browser and Node.js with the same API.

The ECIES implementation details mimic those introduced by Parity, which are

  • Implements a SHA256 Key Derivation Function (KDF).
  • Uses ECDH based only on the secp256k1 curve (To match common blockchain transaction signing).
  • AES-128-CTR based symmetric encryption (uses a 128 bit shared key derived from ECDH).

Cryptography Warning

The ECIES implementation given here is solely based off Parity's implementation. This module offers no guarantees as to the security or validity of the implementation. Furthermore, this project is being actively developed and as such should not be used for highly sensitive information.

Usage

Although this module is primarily developed for ECIES encryption/decryption extra elliptic curve functionality is given.

ECIES (Parity Encryption/Decryption)

const crypto = require("crypto");
const ecies = require("ecies-parity");

var privateKeyA = crypto.randomBytes(32);
var publicKeyA = ecies.getPublic(privateKeyA);
var privateKeyB = crypto.randomBytes(32);
var publicKeyB = ecies.getPublic(privateKeyB);

// Encrypting the message for B.
ecies.encrypt(publicKeyB, Buffer.from("msg to b")).then(function(encrypted) {
  // B decrypting the message.
  ecies.decrypt(privateKeyB, encrypted).then(function(plaintext) {
    console.log("Message to part B:", plaintext.toString());
  });
});

// Encrypting the message for A.
ecies.encrypt(publicKeyA, Buffer.from("msg to a")).then(function(encrypted) {
  // A decrypting the message.
  ecies.decrypt(privateKeyA, encrypted).then(function(plaintext) {
    console.log("Message to part A:", plaintext.toString());
  });
});

Signing

const crypto = require("crypto");
const ecies = require("ecies-parity");

// A new random 32-byte private key.
var privateKey = crypto.randomBytes(32);
// Corresponding uncompressed (65-byte) public key.
var publicKey = ecies.getPublic(privateKey);

var str = "message to sign";
// Always hash you message to sign!
var msg = crypto.createHash("sha256").update(str).digest();

ecies.sign(privateKey, msg).then(function(sig) {
  console.log("Signature in DER format:", sig);
  ecies.verify(publicKey, msg, sig).then(function() {
    console.log("Signature is OK");
  }).catch(function() {
    console.log("Signature is BAD");
  });
});

ECDH

const crypto = require("crypto");
const ecies = require("ecies-parity");

var privateKeyA = crypto.randomBytes(32);
var publicKeyA = ecies.getPublic(privateKeyA);
var privateKeyB = crypto.randomBytes(32);
var publicKeyB = ecies.getPublic(privateKeyB);

ecies.derive(privateKeyA, publicKeyB).then(function(sharedKey1) {
  ecies.derive(privateKeyB, publicKeyA).then(function(sharedKey2) {
    console.log("Both shared keys are equal:", sharedKey1, sharedKey2);
  });
});