Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.3 to 4.1.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3.5.3...v4.1.1) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
---|---|---|
.github | ||
benches | ||
rfcs | ||
src | ||
tests | ||
.gitignore | ||
CHANGELOG.md | ||
Cargo.toml | ||
Dockerfile | ||
LICENCE | ||
LICENCE.MIT | ||
LICENSE.Apache-2.0 | ||
README.md | ||
cloudbuild.yaml | ||
codecov.yml | ||
zcash-frost-audit-report-20210323.pdf |
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 Signature
, SigningKey
, VerificationKey
types,
the library also provides VerificationKeyBytes
, a refinement of a
[u8; 32]
indicating that bytes represent an encoding of a RedJubjub
verification key. This allows the VerificationKey
type to cache
verification checks related to the verification key encoding.
Examples
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 = SigningKey::<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] = VerificationKey::from(&sk).into();
// Deserialize and verify the signature.
let sig: Signature<Binding> = sig_bytes.into();
assert!(
VerificationKey::try_from(pk_bytes)
.and_then(|pk| pk.verify(msg, &sig))
.is_ok()
);
docs
cargo doc --features "nightly" --open