@lindorm/ec
v0.4.1
Published
ECDSA signing kit built on Node's `crypto` module and [`@lindorm/kryptos`](https://www.npmjs.com/package/@lindorm/kryptos). Provides an `EcKit` class that implements the `IKeyKit` contract used across the Lindorm cryptography packages.
Readme
@lindorm/ec
ECDSA signing kit built on Node's crypto module and @lindorm/kryptos. Provides an EcKit class that implements the IKeyKit contract used across the Lindorm cryptography packages.
This package is ESM-only.
Installation
npm install @lindorm/ecEcKit accepts an IKryptos instance constructed by the consumer, so @lindorm/kryptos must also be installed in your project.
Features
- Sign, verify, and assert ECDSA signatures over
Bufferorstringinput - Supports
ES256,ES384, andES512(P-256 / P-384 / P-521 curves) - DSA encoding selectable between
derandieee-p1363 - Optional raw
r||ssignature output for JWT/JWS interop - Configurable string output encoding via Node's
BufferEncoding - Rejects non-EC keys and EC encryption algorithms at construction time
Quick Start
import { EcKit } from "@lindorm/ec";
import { KryptosKit } from "@lindorm/kryptos";
const kryptos = KryptosKit.generate.sig.ec({ algorithm: "ES512" });
const kit = new EcKit({ kryptos });
const signature = kit.sign("hello world");
kit.verify("hello world", signature); // true
kit.assert("hello world", signature); // throws EcError if invalid
kit.format(signature); // base64 stringConstructor Options
new EcKit({
kryptos, // IKryptos — must be an EC key with a signing algorithm
dsa: "der", // DsaEncoding — "der" | "ieee-p1363" (default: "der")
encoding: "base64", // BufferEncoding — string encoding for verify/format (default: "base64")
raw: false, // boolean — emit/accept raw r||s signatures (default: false)
});The constructor validates that the key is an EC key with one of the supported signing algorithms (ES256, ES384, ES512). EC encryption keys (e.g. ECDH-ES) and non-EC keys are rejected with an EcError.
API
class EcKit implements IKeyKit {
sign(data: KeyData): Buffer;
verify(data: KeyData, signature: KeyData): boolean;
assert(data: KeyData, signature: KeyData): void; // throws EcError
format(data: Buffer): string;
}KeyData is Buffer | string.
sign(data)— produces a DER-encoded signature, or rawr||sifraw: truewas passed to the constructor.verify(data, signature)— returnstrueif the signature is valid. String signatures are decoded using the configuredencoding.assert(data, signature)— same asverify, but throwsEcErrorinstead of returningfalse.format(buffer)— encodes a signatureBufferto a string using the configuredencoding.
Supported Algorithms
| Algorithm | Curve | Hash | | --------- | ----- | ------- | | ES256 | P-256 | SHA-256 | | ES384 | P-384 | SHA-384 | | ES512 | P-521 | SHA-512 |
DSA Encoding
der(default) — standard ASN.1 DER encoding produced by Node'scrypto.ieee-p1363— fixed-length encoding produced by Node'scryptowhendsaEncodingis set.
The separate raw option produces or accepts a manually built r||s concatenation (each component padded to the curve's byte size). This is useful for JWT/JWS compatibility where the wire format is raw r||s.
Error Handling
All errors thrown by this package are instances of EcError:
import { EcError } from "@lindorm/ec";License
AGPL-3.0-or-later
