Expand description
§Nostringer Ring Signatures (Rust)
A Rust implementation of Ring signatures (SAG, BLSAG) for Nostr.
This library provides functions to sign and verify messages using a Spontaneous Anonymous Group (SAG)-like or Back’s Linkable Spontaneous Anonymous Group (bLSAG) ring signature scheme over the secp256k1 curve.
§Modules
sag
: Implements the original Spontaneous Anonymous Group (SAG) ring signature.blsag
: Implements the Back’s Linkable Spontaneous Anonymous Group (bLSAG) ring signature.types
: Defines common types like keys, signatures, and errors.utils
: Provides utility functions for hashing, conversions, etc.wasm
: Contains bindings for WebAssembly usage.keys
: Contains key-related functions.serialization
: Implements compact signature serialization.
§Usage
use nostringer::{sign, verify, SignatureVariant, types::KeyPairHex, keys::generate_keypair_hex};
fn main() -> Result<(), nostringer::types::Error> {
// 1. Setup: Generate keys for the ring members
let keypair1 = generate_keypair_hex("xonly"); // Use "xonly", "compressed", or "uncompressed"
let keypair2 = generate_keypair_hex("xonly");
let keypair3 = generate_keypair_hex("xonly");
let ring_pubkeys_hex = vec![
keypair1.public_key_hex.clone(),
keypair2.public_key_hex.clone(),
keypair3.public_key_hex.clone(),
];
// 2. Define the message to be signed
let message = b"This is a secret message to the group.";
// 3. Signer (keypair2) signs the message using the default SAG signature variant
let signature = sign(
message,
&keypair2.private_key_hex,
&ring_pubkeys_hex,
SignatureVariant::Sag,
)?;
println!("Generated Compact Signature: {}", signature);
// 4. Verification: Anyone can verify the signature against the ring
let is_valid = verify(
&signature,
message,
&ring_pubkeys_hex,
)?;
println!("Signature valid: {}", is_valid);
assert!(is_valid);
Ok(())
}
Re-exports§
pub use types::Error;
pub use types::KeyPair;
pub use types::KeyPairHex;
pub use types::RingSignature;
pub use types::RingSignatureBinary;
pub use types::SignatureVariant;
pub use serialization::CompactSignature;
pub use serialization::SerializationError;
pub use types::hex_to_scalar;
pub use keys::generate_keypair_hex;
pub use keys::generate_keypairs;
pub use keys::get_public_keys;
Modules§
Functions§
- sign
- Signs a message with a ring signature in compact format.
- sign_
compact_ blsag - Creates a compact, serialized bLSAG ring signature (
ringA...
format). - sign_
compact_ sag - Creates a compact, serialized SAG ring signature (
ringA...
format). - verify
- Verifies a compact ring signature.
- verify_
compact - Verifies a compact, serialized ring signature (
ringA...
format).