[][src]Crate schnorr_fun

SchnorrFun!

Generate and verify Schnorr signatures on secp256k1. Uses secp256kfun.

Schnorr signatures were introduced (and patented until 2008) by their namesake in Efficient Signature Generation by Smart Cards. This implementation is based on the BIP-340 specification, but is flexible enough to be used as a general purpose Schnorr signature scheme.

Use

[dependencies]
schnorr_fun = "0.1"

Should use?

This library and secp256kfun is experimental. BIP-340 is still in review so APIs are subject to change.

Synopsis

use schnorr_fun::{
    fun::{hash::Derivation, marker::*, Scalar},
    Schnorr,
};
// Create a BIP-340 compatible instance
let schnorr = Schnorr::default();
// Or create an instance for your own protocol
let schnorr = Schnorr::from_tag(b"my-domain");
// Generate your public/private key-pair
let keypair = schnorr.new_keypair(Scalar::random(&mut rand::thread_rng()));
let message = b"Chancellor on brink of second bailout for banks"
    .as_ref()
    .mark::<Public>();
// Sign the message with our keypair
let signature = schnorr.sign(&keypair, message, Derivation::rng(&mut rand::thread_rng()));
// Get the verifier's key
let verification_key = keypair.verification_key();
// Check it's valid 🍿
assert!(schnorr.verify(&verification_key, message, &signature));

Features

  • BIP-340 compliant signing and verification
  • Adaptor signatures

Re-exports

pub use secp256kfun as fun;

Modules

adaptor

Algorithms for Schnorr "adaptor signature" signature encryption.

Structs

KeyPair

A secret and public key-pair for generating Schnorr signatures.

Schnorr

An instance of a BIP-340 style Schnorr signature scheme.

Signature

A Schnorr signature.

Enums

Derivation

A choice of nonce Derivation.