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.
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::
// Types can be converted to raw byte arrays using From/Into let sigbytes: [u8; 64] = sig.into(); let pkbytes: [u8; 32] = PublicKey::from(&sk).into();
// Deserialize and verify the signature.
let sig: Signature
shell,no_run
cargo doc --features "nightly" --open