rust_sign/
lib.rs

1//! # rust-sign
2//!
3//! A document signing library using BLAKE3 hashing and Ed25519 signatures.
4//!
5//! ## Features
6//!
7//! - **BLAKE3 hashing** for fast, secure document fingerprinting
8//! - **Ed25519 signatures** for compact, secure digital signatures
9//! - **Multiple signatures** support for multi-party signing
10//! - **JSON output** with timestamps and metadata
11//! - **Streaming** support for large files
12//!
13//! ## Quick Start
14//!
15//! ### Generate a Keypair
16//!
17//! ```rust
18//! use rust_sign::KeyPair;
19//!
20//! let keypair = KeyPair::generate();
21//! // Save to file (optional)
22//! // keypair.save_to_file("my_key.pem").unwrap();
23//! ```
24//!
25//! ### Sign a Document
26//!
27//! ```rust
28//! use rust_sign::{KeyPair, Signer};
29//!
30//! let keypair = KeyPair::generate();
31//! let document = b"Important document content";
32//!
33//! let signature = Signer::new(&keypair)
34//!     .with_signer_id("alice@example.com")
35//!     .with_metadata("purpose", "contract")
36//!     .sign_bytes(document)
37//!     .unwrap();
38//!
39//! // Save signature to file
40//! // signature.save("document.sig").unwrap();
41//! println!("{}", signature.to_json().unwrap());
42//! ```
43//!
44//! ### Verify a Signature
45//!
46//! ```rust
47//! use rust_sign::{KeyPair, Signer, Verifier};
48//!
49//! let keypair = KeyPair::generate();
50//! let document = b"Important document content";
51//!
52//! let signature = Signer::new(&keypair).sign_bytes(document).unwrap();
53//!
54//! let result = Verifier::verify_bytes(document, &signature).unwrap();
55//! assert!(result.all_valid);
56//! println!("All {} signatures valid!", result.valid_count());
57//! ```
58//!
59//! ### Multiple Signatures
60//!
61//! ```rust
62//! use rust_sign::{KeyPair, Signer, Verifier};
63//!
64//! let alice = KeyPair::generate();
65//! let bob = KeyPair::generate();
66//! let document = b"Contract requiring multiple signatures";
67//!
68//! // Alice signs first
69//! let mut signature = Signer::new(&alice)
70//!     .with_signer_id("alice@example.com")
71//!     .sign_bytes(document)
72//!     .unwrap();
73//!
74//! // Bob co-signs
75//! Signer::new(&bob)
76//!     .with_signer_id("bob@example.com")
77//!     .cosign(&mut signature)
78//!     .unwrap();
79//!
80//! // Verify all signatures
81//! let result = Verifier::verify_bytes(document, &signature).unwrap();
82//! assert!(result.all_valid);
83//! assert_eq!(result.valid_count(), 2);
84//! ```
85
86pub mod error;
87pub mod hash;
88pub mod keys;
89pub mod signature;
90pub mod signer;
91pub mod verifier;
92
93// Re-export main types for convenience
94pub use error::{Result, SignError};
95pub use hash::{hash_bytes, hash_file, hash_reader, DocumentHash};
96pub use keys::{KeyPair, PublicKey};
97pub use signature::{DocumentSignature, SignatureEntry};
98pub use signer::{sign_bytes, sign_file, Signer};
99pub use verifier::{verify_bytes, verify_file, SignatureResult, VerificationResult, Verifier};
100