Elliptic curve

@webbuf/secp256k1

Rust/wasm optimized secp256k1 ecdsa and Diffie-Hellman

Install

npm install @webbuf/secp256k1

Usage

import { publicKeyCreate, publicKeyConvert } from "@webbuf/secp256k1";
import { FixedBuf } from "@webbuf/fixedbuf";

// Public example scalar; never use this fixed key for real signatures.
const privKey = FixedBuf.fromHex(32, "01".padStart(64, "0"));
const compressed = publicKeyCreate(privKey); // FixedBuf<33>, unchanged
const uncompressed = publicKeyConvert(compressed, false); // FixedBuf<65>
const restored = publicKeyConvert(uncompressed, true); // FixedBuf<33>

API reference (13 exports)

Functions

bchSchnorrNonceX

function

Low-level x(kG). Never reuse a nonce or use this as a nonce generator.

bchSchnorrNonceX(k: FixedBuf<32>): FixedBuf<32>

bchSchnorrSignWithChallenge

function

Low-level signing of a BCH challenge, NOT a message digest. Never reuse k.

bchSchnorrSignWithChallenge(challenge: FixedBuf<32>, privateKey: FixedBuf<32>, k: FixedBuf<32>): FixedBuf<64>

bchSchnorrVerifyWithChallenge

function

Low-level equation check. This does NOT authenticate a message digest.

bchSchnorrVerifyWithChallenge(signature: FixedBuf<64>, challenge: FixedBuf<32>, publicKey: PublicKeyBuf): boolean

privateKeyAdd

function
privateKeyAdd(privKey1: FixedBuf<32>, privKey2: FixedBuf<32>): FixedBuf<32>

privateKeyVerify

function
privateKeyVerify(privateKey: FixedBuf<32>): boolean

publicKeyAdd

function
publicKeyAdd(publicKey1: PublicKeyBuf, publicKey2: PublicKeyBuf): FixedBuf<33>

publicKeyConvert

function

Validate a SEC1 point and return independent bytes in the selected encoding.

publicKeyConvert(key: PublicKeyBuf, compressed: true): FixedBuf<33>
publicKeyConvert(key: PublicKeyBuf, compressed: false): FixedBuf<65>
publicKeyConvert(key: PublicKeyBuf, compressed: boolean): PublicKeyBuf

publicKeyCreate

function
publicKeyCreate(privateKey: FixedBuf<32>): FixedBuf<33>

publicKeyVerify

function
publicKeyVerify(publicKey: PublicKeyBuf): boolean

sharedSecret

function
sharedSecret(privateKey: FixedBuf<32>, publicKey: PublicKeyBuf): FixedBuf<33>

sign

function
sign(digest: FixedBuf<32>, privateKey: FixedBuf<32>, k: FixedBuf<32>): FixedBuf<64>

verify

function
verify(signature: FixedBuf<64>, digest: FixedBuf<32>, publicKey: PublicKeyBuf): boolean

Type aliases

PublicKeyBuf

type
type PublicKeyBuf = FixedBuf<33> | FixedBuf<65>