Audited & minimal JS implementation of elliptic curve cryptography.
Go to file
2022-12-04 18:19:01 +01:00
.github Initial commit 2022-12-04 18:19:01 +01:00
curve-definitions Initial commit 2022-12-04 18:19:01 +01:00
lib/esm Initial commit 2022-12-04 18:19:01 +01:00
src Initial commit 2022-12-04 18:19:01 +01:00
.gitignore Initial commit 2022-12-04 18:19:01 +01:00
.prettierrc.json Initial commit 2022-12-04 18:19:01 +01:00
index.js Initial commit 2022-12-04 18:19:01 +01:00
LICENSE Initial commit 2022-12-04 18:19:01 +01:00
package.json Initial commit 2022-12-04 18:19:01 +01:00
README.md Initial commit 2022-12-04 18:19:01 +01:00
tsconfig.esm.json Initial commit 2022-12-04 18:19:01 +01:00
tsconfig.json Initial commit 2022-12-04 18:19:01 +01:00

noble-curves

Minimal, zero-dependency JS implementation of elliptic curve cryptography.

Implements Short Weierstrass curves with ECDSA signature scheme.

To keep the package minimal, no curve definitions are provided out-of-box. Main reason for that is the fact hashing library is usually required for full functionality. Use separate package that defines popular curves: micro-curve-definitions for P192, P224, P256, P384, P521, secp256k1, stark curve, bn254, pasta (pallas/vesta) - it depends on @noble/hashes.

Future plans:

  • Edwards, Twisted Edwards & Montgomery curves
  • hash-to-curve standard
  • pairings

This library belongs to noble crypto

noble-crypto — high-security, easily auditable set of contained cryptographic libraries and tools.

  • No dependencies, small files
  • Easily auditable TypeScript/JS code
  • Supported in all major browsers and stable node.js versions
  • All releases are signed with PGP keys
  • Check out homepage & all libraries: secp256k1, ed25519, bls12-381, hashes, curves

Usage

Use NPM in node.js / browser, or include single file from GitHub's releases page:

Usage

npm install @noble/curves
// Short Weierstrass curve
import shortw from '@noble/curves/shortw';
import { sha256 } from '@noble/hashes/sha256';
import { hmac } from '@noble/hashes/hmac';
import { concatBytes, randomBytes } from '@noble/hashes/utils';

export const secp256k1 = shortw({
  a: 0n,
  b: 7n,
  // Field over which we'll do calculations
  P: 2n ** 256n - 2n ** 32n - 2n ** 9n - 2n ** 8n - 2n ** 7n - 2n ** 6n - 2n ** 4n - 1n,
  // Curve order, total count of valid points in the field
  n: 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,
  // Base point (x, y) aka generator point
  Gx: 55066263022277343669578718895168534326250603453777594175500187360389116729240n,
  Gy: 32670510020758816978083085130507043184471273380659243275938904335757337482424n,
  hash: sha256,
  hmac: (k: Uint8Array, ...msgs: Uint8Array[]) => hmac(sha256, key, concatBytes(...msgs)),
  randomBytes: randomBytes
});

// secp256k1.getPublicKey(priv)
// secp256k1.sign(msg, priv)
// secp256k1.verify(sig, msg, pub)

License

MIT (c) Paul Miller (https://paulmillr.com), see LICENSE file.