Module linkable_ring

Module linkable_ring 

Source
Expand description

Linkable ring signatures for double-spend prevention.

Linkable ring signatures are an extension of ring signatures that allow detection of double-signing (when the same key signs twice with the same ring). This is crucial for preventing double-spending in anonymous payment systems while preserving signer anonymity for single uses.

§Features

  • Anonymous signing within a group (like regular ring signatures)
  • Double-signing detection via key images
  • No linkability between different rings
  • Perfect for preventing double-spending of anonymous tokens

§Example

use chie_crypto::linkable_ring::{LinkableRingSignature, sign_linkable, verify_linkable, check_double_sign};
use chie_crypto::KeyPair;

let keypair1 = KeyPair::generate();
let keypair2 = KeyPair::generate();
let keypair3 = KeyPair::generate();

let ring = vec![
    keypair1.public_key(),
    keypair2.public_key(),
    keypair3.public_key(),
];

// Sign two different messages with the same key
let msg1 = b"Transaction 1";
let msg2 = b"Transaction 2";

let sig1 = sign_linkable(&keypair2, &ring, msg1).unwrap();
let sig2 = sign_linkable(&keypair2, &ring, msg2).unwrap();

// Both signatures verify
assert!(verify_linkable(&ring, msg1, &sig1).unwrap());
assert!(verify_linkable(&ring, msg2, &sig2).unwrap());

// But we can detect they were signed by the same key!
assert!(check_double_sign(&sig1, &sig2));

Structs§

KeyImageDb
Database for tracking used key images to prevent double-spending.
LinkableRingSignature
A linkable ring signature with key image for double-sign detection.

Enums§

LinkableRingError
Error types for linkable ring signature operations.

Functions§

check_double_sign
Check if two signatures were created by the same key (double-signing detection).
sign_linkable
Sign a message with a linkable ring signature.
verify_linkable
Verify a linkable ring signature.

Type Aliases§

LinkableRingResult