Files
p256k1/signer/signer.go
mleku 3966183137 Add benchmark results and performance analysis for ECDSA and ECDH operations
This commit introduces two new files: `BENCHMARK_RESULTS.md` and `benchmark_results.txt`, which document the performance metrics of various cryptographic operations, including ECDSA signing, verification, and ECDH key exchange. The results provide insights into operation times, memory allocations, and comparisons with C implementations. Additionally, new test files for ECDSA and ECDH functionalities have been added, ensuring comprehensive coverage and validation of the implemented algorithms. This enhances the overall robustness and performance understanding of the secp256k1 implementation.
2025-11-01 20:17:24 +00:00

43 lines
1.8 KiB
Go

// Package signer defines server for management of signatures, used to
// abstract the signature algorithm from the usage.
package signer
// I is an interface for a key pair for signing, created to abstract between a CGO fast BIP-340
// signature library and the slower btcec library.
type I interface {
// Generate creates a fresh new key pair from system entropy, and ensures it is even (so
// ECDH works).
Generate() (err error)
// InitSec initialises the secret (signing) key from the raw bytes, and also
// derives the public key because it can.
InitSec(sec []byte) (err error)
// InitPub initializes the public (verification) key from raw bytes, this is
// expected to be an x-only 32 byte pubkey.
InitPub(pub []byte) (err error)
// Sec returns the secret key bytes.
Sec() []byte
// Pub returns the public key bytes (x-only schnorr pubkey).
Pub() []byte
// Sign creates a signature using the stored secret key.
Sign(msg []byte) (sig []byte, err error)
// Verify checks a message hash and signature match the stored public key.
Verify(msg, sig []byte) (valid bool, err error)
// Zero wipes the secret key to prevent memory leaks.
Zero()
// ECDH returns a shared secret derived using Elliptic Curve Diffie-Hellman on
// the I secret and provided pubkey.
ECDH(pub []byte) (secret []byte, err error)
}
// Gen is an interface for nostr BIP-340 key generation.
type Gen interface {
// Generate gathers entropy and derives pubkey bytes for matching, this returns the 33 byte
// compressed form for checking the oddness of the Y coordinate.
Generate() (pubBytes []byte, err error)
// Negate flips the public key Y coordinate between odd and even.
Negate()
// KeyPairBytes returns the raw bytes of the secret and public key, this returns the 32 byte
// X-only pubkey.
KeyPairBytes() (secBytes, cmprPubBytes []byte)
}