| Crates.io | rust-sign |
| lib.rs | rust-sign |
| version | 0.1.0 |
| created_at | 2026-01-03 00:17:59.426855+00 |
| updated_at | 2026-01-03 00:17:59.426855+00 |
| description | Document signing library using BLAKE3 hashing and Ed25519 signatures |
| homepage | |
| repository | https://github.com/dotdon/rust-sign |
| max_upload_size | |
| id | 2019377 |
| size | 69,635 |
A Rust library for document signing using BLAKE3 hashing and Ed25519 digital signatures.
Add to your Cargo.toml:
[dependencies]
rust-sign = "0.1.0"
use rust_sign::KeyPair;
let keypair = KeyPair::generate();
// Optionally save to file
keypair.save_to_file("my_key.pem")?;
// Load later
let keypair = KeyPair::load_from_file("my_key.pem")?;
use rust_sign::{KeyPair, Signer};
let keypair = KeyPair::generate();
let document = b"Important document content";
let signature = Signer::new(&keypair)
.with_signer_id("alice@example.com")
.with_metadata("purpose", "contract")
.sign_bytes(document)?;
// Save signature to file
signature.save("document.sig")?;
// Or get as JSON string
println!("{}", signature.to_json()?);
use rust_sign::{KeyPair, Signer};
let keypair = KeyPair::generate();
let signature = Signer::new(&keypair)
.with_signer_id("alice@example.com")
.sign_file("document.pdf")?;
signature.save("document.pdf.sig")?;
use rust_sign::{Verifier, DocumentSignature};
// Verify bytes
let result = Verifier::verify_bytes(document, &signature)?;
if result.all_valid {
println!("All {} signatures verified!", result.valid_count());
for signer in result.valid_signers() {
println!(" Signed by: {:?}", signer);
}
} else {
println!("Verification failed!");
}
// Verify file against signature file
let result = Verifier::verify_file("document.pdf", "document.pdf.sig")?;
use rust_sign::{KeyPair, Signer, Verifier};
let alice = KeyPair::generate();
let bob = KeyPair::generate();
let document = b"Contract requiring multiple signatures";
// Alice signs first
let mut signature = Signer::new(&alice)
.with_signer_id("alice@example.com")
.sign_bytes(document)?;
// Bob co-signs
Signer::new(&bob)
.with_signer_id("bob@example.com")
.cosign(&mut signature)?;
// Verify all signatures
let result = Verifier::verify_bytes(document, &signature)?;
assert!(result.all_valid);
assert_eq!(result.valid_count(), 2);
Signatures are stored as JSON:
{
"version": "1.0",
"document_hash": "base64-encoded-blake3-hash",
"signatures": [
{
"signer_id": "alice@example.com",
"public_key": "base64-encoded-public-key",
"signature": "base64-encoded-ed25519-signature",
"timestamp": "2026-01-02T10:30:00Z",
"metadata": {
"purpose": "contract"
}
}
]
}
| Type | Description |
|---|---|
KeyPair |
Ed25519 signing keypair |
PublicKey |
Ed25519 public key for verification |
Signer |
Builder for creating signatures |
Verifier |
Signature verification utilities |
DocumentSignature |
Signed document container |
SignatureEntry |
Individual signature with metadata |
DocumentHash |
BLAKE3 hash wrapper |
All operations return Result<T, SignError>. Error types include:
SignError::Io - File I/O errorsSignError::Json - JSON serialization errorsSignError::Signature - Cryptographic signature errorsSignError::InvalidKey - Invalid key formatSignError::HashMismatch - Document was modifiedSignError::NoSignatures - No signatures in documentMIT