Go to file
Henry de Valence 798a3e4631 Fix trait bounds on SigType.
When Rust derives Copy, Clone, Eq, PartialEq, etc. on a type with
`PhantomData<T>`, it adds a `T: Clone` etc. bound, regardless of whether `T` is
only ever used inside of the `PhantomData`.  A better fix would be to fix the
derived bounds themselves, but in the meantime this works, even if it's
slightly ugly.
2019-12-09 11:55:53 -08:00
src Fix trait bounds on SigType. 2019-12-09 11:55:53 -08:00
tests Implement randomization. 2019-12-04 17:00:55 -08:00
.gitignore cargo new --lib 2019-12-02 14:12:06 -08:00
Cargo.toml Update README, fill missing impls. 2019-12-04 17:36:01 -08:00
README.md Update README, fill missing impls. 2019-12-04 17:36:01 -08:00

README.md

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 std::convert::TryFrom;
use rand::thread_rng;
use redjubjub_zebra::*;

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