Skip to content
A minimal RedJubjub implementation for use in Zebra.
Rust Dockerfile
Branch: main
Clone or download
Latest commit 18dfb01 Jan 17, 2020
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/workflows use plain actions-rs for CI Jan 17, 2020
.gitignore cargo new --lib Dec 2, 2019 Bump version and update changelog. Jan 17, 2020
cloudbuild.yaml Add GitHub Actions workflow which runs Google Cloudbuild jobs Dec 9, 2019

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 std::convert::TryFrom;
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();
        .and_then(|pk| pk.verify(msg, &sig))


cargo doc --features "nightly" --open
You can’t perform that action at this time.