Fast elliptic curve cryptography in plain JavaScript for ECDSA, EdDSA, and ECDH operations
npx @tessl/cli install tessl/npm-elliptic@6.6.0Elliptic is a fast pure JavaScript implementation of elliptic curve cryptography providing ECDSA (Elliptic Curve Digital Signature Algorithm), EdDSA (Edwards Digital Signature Algorithm), and ECDH (Elliptic Curve Diffie-Hellman) operations. It supports multiple curve types including Short Weierstrass, Montgomery, Edwards, and Twisted Edwards curves with comprehensive preset curve configurations.
npm install ellipticconst elliptic = require('elliptic');
const EC = elliptic.ec;
const EdDSA = elliptic.eddsa;
const curves = elliptic.curves;
const utils = elliptic.utils;
const rand = elliptic.rand;For individual components:
const EC = require('elliptic').ec;
const EdDSA = require('elliptic').eddsa;
const curves = require('elliptic').curves;
const utils = require('elliptic').utils;
const rand = require('elliptic').rand;const EC = require('elliptic').ec;
// Create and initialize EC context
const ec = new EC('secp256k1');
// Generate keys
const key = ec.genKeyPair();
// Sign message
const msgHash = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const signature = key.sign(msgHash);
// Verify signature
const isValid = key.verify(msgHash, signature);
console.log('Signature valid:', isValid);const EdDSA = require('elliptic').eddsa;
// Create and initialize EdDSA context
const ec = new EdDSA('ed25519');
// Create key pair from secret
const key = ec.keyFromSecret('693e3c...');
// Sign message
const msgHash = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const signature = key.sign(msgHash).toHex();
// Verify signature
const isValid = key.verify(msgHash, signature);
console.log('Signature valid:', isValid);Elliptic is organized around several key components:
Complete ECDSA implementation supporting key generation, digital signatures, signature verification, public key recovery, and ECDH key agreement across multiple elliptic curves.
function EC(options);
// EC instance methods
ec.genKeyPair(options);
ec.keyFromPrivate(priv, enc);
ec.keyFromPublic(pub, enc);
ec.sign(msg, key, enc, options);
ec.verify(msg, signature, key, enc, options);Edwards Digital Signature Algorithm implementation specifically for ed25519 curve, providing secure digital signatures with deterministic signing.
function EDDSA(curve);
// EdDSA instance methods
eddsa.sign(message, secret);
eddsa.verify(message, sig, pub);
eddsa.keyFromSecret(secret);
eddsa.keyFromPublic(pub);Access to predefined elliptic curves and curve operations, supporting multiple curve types with optimized implementations for each.
const curves = elliptic.curves;
// Available curves
curves.secp256k1;
curves.p256;
curves.p384;
curves.p521;
curves.curve25519;
curves.ed25519;Low-level utilities for elliptic curve operations, number theory functions, and cryptographic helper methods.
const utils = elliptic.utils;
// Utility functions
utils.toArray(data, enc);
utils.encode(data, enc);
utils.parseBytes(bytes);Cryptographically secure random number generation for key generation and cryptographic operations.
const rand = elliptic.rand;
// Generate random bytes
rand(length);Elliptic throws standard JavaScript errors for invalid operations:
Always wrap cryptographic operations in try-catch blocks for production applications.
// Main exports
const version: string; // Package version
const rand: function; // Random number generator
// Main constructors
function EC(options: string | object);
function EDDSA(curve: string);
// Key formats
interface KeyPairOptions {
priv?: any;
pub?: any;
privEnc?: string;
pubEnc?: string;
}
// Signature options
interface SignOptions {
pers?: any;
persEnc?: string;
entropy?: any;
entropyEnc?: string;
k?: function;
canonical?: boolean;
}