or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

curves.mdecdsa.mdeddsa.mdindex.mdutils.md
tile.json

index.mddocs/

Elliptic

Elliptic 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.

Package Information

  • Package Name: elliptic
  • Package Type: npm
  • Language: JavaScript
  • Installation: npm install elliptic

Core Imports

const 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;

Basic Usage

ECDSA Example

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);

EdDSA Example

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);

Architecture

Elliptic is organized around several key components:

  • EC Module: ECDSA implementation with KeyPair and Signature classes
  • EdDSA Module: Edwards Digital Signature Algorithm implementation
  • Curves Module: Predefined curve configurations and curve management
  • Curve Implementations: Base classes for different curve types (Short Weierstrass, Montgomery, Edwards)
  • Utils Module: Cryptographic utilities and helper functions

Capabilities

ECDSA Operations

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);

ECDSA Operations

EdDSA Operations

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);

EdDSA Operations

Curve Management

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;

Curve Management

Cryptographic Utilities

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);

Utilities

Random Number Generation

Cryptographically secure random number generation for key generation and cryptographic operations.

const rand = elliptic.rand;

// Generate random bytes
rand(length);

Supported Curves

  • secp256k1: Bitcoin curve with optimized endomorphism
  • p192, p224, p256, p384, p521: NIST standard curves
  • curve25519: Montgomery curve for ECDH
  • ed25519: Edwards curve for EdDSA

Error Handling

Elliptic throws standard JavaScript errors for invalid operations:

  • Invalid curve parameters
  • Malformed keys or signatures
  • Invalid message formats
  • Cryptographic validation failures

Always wrap cryptographic operations in try-catch blocks for production applications.

Types

// 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;
}