[][src]Module rsa_fdh::blind

A blind signature scheme that that supports blind-signing to keep the message being signed secret from the signer.

The private key must not be used in any other way other than blind-signing. See the wikipedia article on blind-signing.

Example

use rsa_fdh::blind;
use rsa::{RSAPrivateKey, RSAPublicKey};
use sha2::{Sha256, Digest};

// Set up rng and message
let mut rng = rand::thread_rng();
let message = b"NEVER GOING TO GIVE YOU UP";

// Create the keys
let signer_priv_key = RSAPrivateKey::new(&mut rng, 2048).unwrap();
let signer_pub_key: RSAPublicKey = signer_priv_key.clone().into();

// Hash the contents of the message with a Full Domain Hash, getting the digest
let digest = blind::hash_message::<Sha256, _>(&signer_pub_key, message).unwrap();

// Get the blinded digest and the secret unblinder
let (blinded_digest, unblinder) = blind::blind(&mut rng, &signer_pub_key, &digest);

// Send the blinded-digest to the signer and get their signature
let blind_signature = blind::sign(&mut rng, &signer_priv_key, &blinded_digest).unwrap();

// Unblind the signature
let signature = blind::unblind(&signer_pub_key, &blind_signature, &unblinder);

// Verify the signature
let ok = blind::verify(&signer_pub_key, &digest, &signature);
assert!(ok.is_ok());

Functions

blind

Blind the given digest, returning the blinded digest and the unblinding factor.

hash_message

Hash the message as a Full Domain Hash

sign

Sign the given blinded digest.

unblind

Unblind the given signature, producing a signature that also signs the unblided digest.

verify

Verifies a signature after it has been unblinded.