arcanum_signatures/lib.rs
1//! # Arcanum Digital Signatures
2//!
3//! High-performance digital signature algorithms with a unified interface.
4//!
5//! ## Supported Algorithms
6//!
7//! ### Edwards Curves
8//!
9//! - **Ed25519**: Fast, secure, widely used. Recommended default.
10//!
11//! ### ECDSA (Elliptic Curve Digital Signature Algorithm)
12//!
13//! - **ECDSA-P256**: NIST P-256 curve, widely supported
14//! - **ECDSA-P384**: NIST P-384 curve, higher security level
15//! - **ECDSA-secp256k1**: Bitcoin/Ethereum curve
16//!
17//! ### Schnorr Signatures
18//!
19//! - **Schnorr-secp256k1**: BIP-340 compatible (Bitcoin Taproot)
20//!
21//! ## Example
22//!
23//! ```ignore
24//! use arcanum_signatures::{Ed25519, SigningKey};
25//!
26//! // Generate a new key pair
27//! let signing_key = Ed25519::generate();
28//! let verifying_key = signing_key.verifying_key();
29//!
30//! // Sign a message
31//! let message = b"Hello, Arcanum!";
32//! let signature = signing_key.sign(message);
33//!
34//! // Verify
35//! assert!(verifying_key.verify(message, &signature).is_ok());
36//! ```
37//!
38//! ## Security Considerations
39//!
40//! - Always use fresh randomness for key generation
41//! - Protect signing keys from exposure
42//! - Ed25519 provides deterministic signatures (no additional randomness needed)
43//! - ECDSA requires secure random nonces (use deterministic RFC 6979 variant)
44
45#![deny(unsafe_code)]
46#![warn(missing_docs, rust_2018_idioms)]
47#![allow(unused_imports, dead_code, clippy::needless_borrows_for_generic_args)]
48
49#[cfg(feature = "ed25519")]
50pub mod ed25519;
51
52#[cfg(feature = "ecdsa")]
53pub mod ecdsa_impl;
54
55#[cfg(feature = "schnorr")]
56pub mod schnorr;
57
58mod traits;
59
60pub use traits::{BatchVerifier, Signature, SigningKey, VerifyingKey};
61
62#[cfg(feature = "ed25519")]
63pub use ed25519::{Ed25519Signature, Ed25519SigningKey, Ed25519VerifyingKey};
64
65#[cfg(feature = "ecdsa")]
66pub use ecdsa_impl::{
67 P256Signature, P256SigningKey, P256VerifyingKey, P384Signature, P384SigningKey,
68 P384VerifyingKey, Secp256k1Signature, Secp256k1SigningKey, Secp256k1VerifyingKey,
69};
70
71#[cfg(feature = "schnorr")]
72pub use schnorr::{SchnorrSignature, SchnorrSigningKey, SchnorrVerifyingKey};
73
74/// Prelude for convenient imports.
75pub mod prelude {
76 pub use crate::traits::{Signature, SigningKey, VerifyingKey};
77
78 #[cfg(feature = "ed25519")]
79 pub use crate::ed25519::{Ed25519Signature, Ed25519SigningKey, Ed25519VerifyingKey};
80
81 #[cfg(feature = "ecdsa")]
82 pub use crate::ecdsa_impl::{
83 P256Signature, P256SigningKey, P256VerifyingKey, Secp256k1Signature, Secp256k1SigningKey,
84 Secp256k1VerifyingKey,
85 };
86
87 #[cfg(feature = "schnorr")]
88 pub use crate::schnorr::{SchnorrSignature, SchnorrSigningKey, SchnorrVerifyingKey};
89}