A 5KB JavaScript library for fast secp256k1 elliptic curve cryptography, including ECDSA, Schnorr signatures, and ECDH.
noble-secp256k1 is a fast, minimal JavaScript library implementing the secp256k1 elliptic curve, used for cryptographic signatures and key exchange. It provides ECDSA and Schnorr signatures, ECDH, and focuses on small bundle size and auditability to solve the need for a secure, lightweight crypto primitive in web and blockchain applications.
Developers building blockchain applications, cryptocurrency wallets, secure messaging systems, or any project requiring efficient elliptic curve cryptography in JavaScript/TypeScript environments.
Developers choose noble-secp256k1 for its exceptional combination of speed, tiny footprint (5KB), and high-security design with zero dependencies, making it ideal for environments where bundle size and auditability are critical.
Fastest 5KB JS implementation of secp256k1 signatures and ECDH
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
At only 4.94KB gzipped, it's 10-25x smaller than similar libraries, reducing load times and attack surface for web and mobile apps.
Benchmarks show keygen at 7,643 ops/sec, making it one of the fastest JavaScript implementations for secp256k1 operations.
Written in readable TypeScript with zero dependencies for async APIs, facilitating security reviews and trust in critical applications.
Includes BIP340-compliant Schnorr signatures and RFC6979 ECDSA with hedged signature options for fault attack protection.
Synchronous methods require installing and configuring @noble/hashes, adding complexity and breaking the zero-dependency promise for sync use.
React Native needs polyfills like 'react-native-get-random-values' and manual hashing setup, which isn't documented as a seamless experience.
Missing features like DER encoding and advanced point precomputes are offloaded to noble-curves, forcing a library switch for full functionality.
Upgrading from v2 to v3 involved significant API breaks, such as switching to prehashed messages and removing string hex inputs, disrupting existing codebases.