[−][src]Crate redjubjub
A minimal RedJubjub implementation for use in Zebra.
Two parameterizations of RedJubjub are used in Zcash, one for BindingSig
and one for SpendAuthSig
. This library distinguishes these in the type
system, using the sealed SigType
trait as a type-level enum.
In addition to the usual Signature
, SecretKey
, PublicKey
types, the
library also provides PublicKeyBytes
, a refinement of a [u8; 32]
indicating that bytes represent an encoding of a RedJubjub public key. This
allows the PublicKey
type to cache verification checks related to the
public key encoding.
Examples
Creating a BindingSig
, serializing and deserializing it, and verifying the
signature:
use rand::thread_rng; use redjubjub::*; let msg = b"Hello!"; // Generate a secret key and sign the message let sk = SecretKey::<Binding>::new(thread_rng()); let sig = sk.sign(thread_rng(), msg); // Types can be converted to raw byte arrays using From/Into let sig_bytes: [u8; 64] = sig.into(); let pk_bytes: [u8; 32] = PublicKey::from(&sk).into(); // Deserialize and verify the signature. let sig: Signature<Binding> = sig_bytes.into(); assert!( PublicKey::try_from(pk_bytes) .and_then(|pk| pk.verify(msg, &sig)) .is_ok() );
docs
cargo doc --features "nightly" --open
Docs require the nightly
feature until RFC 1990 lands.
Structs
PublicKey | A valid RedJubJub public key. |
PublicKeyBytes | A refinement type for |
SecretKey | A RedJubJub secret key. |
Signature | A RedJubJub signature. |
Enums
Binding | A type variable corresponding to Zcash's |
Error | An error related to RedJubJub signatures. |
SpendAuth | A type variable corresponding to Zcash's |
Traits
SigType | Abstracts over different RedJubJub parameter choices, |
Type Definitions
Randomizer | An element of the JubJub scalar field used for randomization of public and secret keys. |