js-ciphers

Node/Pure JavaScript symmetric ciphers adapter

View the Project on GitHub ecies/js-ciphers

@ecies/ciphers

License NPM Package NPM Downloads Install size CI Codecov

Node/Pure JavaScript symmetric ciphers adapter.

On browsers (or React Native, deno), it’ll use @noble/ciphers’s implementation for compatibility.

On node (or bun), it’ll use node:crypto’s implementation for efficiency.

[!NOTE] You may need to polyfill crypto.getRandomValues for React Native.

There are some limitations, see Known limitations below.

This library is tree-shakeable, unused code will be excluded by bundlers.

Check the example folder for bun/deno usage.

Quick start

import { aes256gcm } from "@ecies/ciphers/aes";
import { randomBytes } from "@noble/ciphers/webcrypto";

const TEXT = "hello world🌍!";
const encoder = new TextEncoder();
const decoder = new TextDecoder();
const msg = encoder.encode(TEXT);

const key = randomBytes();
const nonce = randomBytes(16);
const cipher = aes256gcm(key, nonce);
console.log("decrypted:", decoder.decode(cipher.decrypt(cipher.encrypt(msg))));

The API follows @noble/ciphers’s API for ease of use, you can check their examples as well.

Supported ciphers

If key is fixed and nonce is less than 16 bytes, avoid randomly generated nonce.

Known limitations