Crate nostringer

Source
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§

blsag
keys
sag
serialization
types
utils

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).