From 9de623e4fa37804e690757e0498eaa43864b9d1b Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 23 Aug 2020 06:27:54 +0100 Subject: [PATCH 1/4] jubjub: Fix intra-doc link in SubgroupPoint::from_raw_unchecked --- jubjub/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jubjub/src/lib.rs b/jubjub/src/lib.rs index cb4699bdab..d55dd6c9b1 100644 --- a/jubjub/src/lib.rs +++ b/jubjub/src/lib.rs @@ -1030,6 +1030,8 @@ impl SubgroupPoint { /// /// This should only be used for hard-coding constants (e.g. fixed generators); in all /// other cases, use [`SubgroupPoint::from_bytes`] instead. + /// + /// [`SubgroupPoint::from_bytes`]: SubgroupPoint#impl-GroupEncoding pub const fn from_raw_unchecked(u: Fq, v: Fq) -> Self { SubgroupPoint(AffinePoint::from_raw_unchecked(u, v).to_extended()) } From c3d36c94bf4e956af7707771dc93eede6999981c Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 23 Aug 2020 06:47:06 +0100 Subject: [PATCH 2/4] bls12_381: Add feature flags to docs.rs documentation --- bls12_381/src/g1.rs | 2 ++ bls12_381/src/g2.rs | 2 ++ bls12_381/src/lib.rs | 1 + bls12_381/src/pairings.rs | 6 ++++++ 4 files changed, 11 insertions(+) diff --git a/bls12_381/src/g1.rs b/bls12_381/src/g1.rs index 7328c3d3cc..d30f882401 100644 --- a/bls12_381/src/g1.rs +++ b/bls12_381/src/g1.rs @@ -20,6 +20,7 @@ use crate::Scalar; /// /// Values of `G1Affine` are guaranteed to be in the $q$-order subgroup unless an /// "unchecked" API was misused. +#[cfg_attr(docsrs, doc(cfg(feature = "groups")))] #[derive(Copy, Clone, Debug)] pub struct G1Affine { pub(crate) x: Fp, @@ -414,6 +415,7 @@ impl G1Affine { } /// This is an element of $\mathbb{G}_1$ represented in the projective coordinate space. +#[cfg_attr(docsrs, doc(cfg(feature = "groups")))] #[derive(Copy, Clone, Debug)] pub struct G1Projective { x: Fp, diff --git a/bls12_381/src/g2.rs b/bls12_381/src/g2.rs index ce59b89d46..b0e7a87638 100644 --- a/bls12_381/src/g2.rs +++ b/bls12_381/src/g2.rs @@ -21,6 +21,7 @@ use crate::Scalar; /// /// Values of `G2Affine` are guaranteed to be in the $q$-order subgroup unless an /// "unchecked" API was misused. +#[cfg_attr(docsrs, doc(cfg(feature = "groups")))] #[derive(Copy, Clone, Debug)] pub struct G2Affine { pub(crate) x: Fp2, @@ -486,6 +487,7 @@ impl G2Affine { } /// This is an element of $\mathbb{G}_2$ represented in the projective coordinate space. +#[cfg_attr(docsrs, doc(cfg(feature = "groups")))] #[derive(Copy, Clone, Debug)] pub struct G2Projective { pub(crate) x: Fp2, diff --git a/bls12_381/src/lib.rs b/bls12_381/src/lib.rs index 5e8a7db290..7f16f1b472 100644 --- a/bls12_381/src/lib.rs +++ b/bls12_381/src/lib.rs @@ -9,6 +9,7 @@ //! * All operations are constant time unless explicitly noted. #![no_std] +#![cfg_attr(docsrs, feature(doc_cfg))] // Catch documentation errors caused by code changes. #![deny(intra_doc_link_resolution_failure)] #![deny(missing_debug_implementations)] diff --git a/bls12_381/src/pairings.rs b/bls12_381/src/pairings.rs index 440d3038fb..6e9cd4b89c 100644 --- a/bls12_381/src/pairings.rs +++ b/bls12_381/src/pairings.rs @@ -19,6 +19,7 @@ use alloc::vec::Vec; /// Represents results of a Miller loop, one of the most expensive portions /// of the pairing function. `MillerLoopResult`s cannot be compared with each /// other until `.final_exponentiation()` is called, which is also expensive. +#[cfg_attr(docsrs, doc(cfg(feature = "pairings")))] #[derive(Copy, Clone, Debug)] pub struct MillerLoopResult(pub(crate) Fp12); @@ -180,6 +181,7 @@ impl_add_binop_specify_output!(MillerLoopResult, MillerLoopResult, MillerLoopRes /// /// Typically, $\mathbb{G}_T$ is written multiplicatively but we will write it additively to /// keep code and abstractions consistent. +#[cfg_attr(docsrs, doc(cfg(feature = "pairings")))] #[derive(Copy, Clone, Debug, Default)] pub struct Gt(pub(crate) Fp12); @@ -449,6 +451,7 @@ impl Group for Gt { } #[cfg(feature = "alloc")] +#[cfg_attr(docsrs, doc(cfg(all(feature = "pairings", feature = "alloc"))))] #[derive(Clone, Debug)] /// This structure contains cached computations pertaining to a $\mathbb{G}_2$ /// element as part of the pairing function (specifically, the Miller loop) and @@ -509,6 +512,7 @@ impl From for G2Prepared { } #[cfg(feature = "alloc")] +#[cfg_attr(docsrs, doc(cfg(all(feature = "pairings", feature = "alloc"))))] /// Computes $$\sum_{i=1}^n \textbf{ML}(a_i, b_i)$$ given a series of terms /// $$(a_1, b_1), (a_2, b_2), ..., (a_n, b_n).$$ /// @@ -565,6 +569,7 @@ pub fn multi_miller_loop(terms: &[(&G1Affine, &G2Prepared)]) -> MillerLoopResult } /// Invoke the pairing function without the use of precomputation and other optimizations. +#[cfg_attr(docsrs, doc(cfg(feature = "pairings")))] pub fn pairing(p: &G1Affine, q: &G2Affine) -> Gt { struct Adder { cur: G2Projective, @@ -749,6 +754,7 @@ impl PairingCurveAffine for G2Affine { } /// A [`pairing::Engine`] for BLS12-381 pairing operations. +#[cfg_attr(docsrs, doc(cfg(feature = "pairings")))] #[derive(Clone, Debug)] pub struct Bls12; From a3cb89dff9d806ebb03a0ba03e6cdf430374519e Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 23 Aug 2020 06:56:03 +0100 Subject: [PATCH 3/4] zcash_primitives: Add feature flags to docs.rs documentation --- zcash_primitives/Cargo.toml | 3 +++ zcash_primitives/src/lib.rs | 1 + zcash_primitives/src/transaction/builder.rs | 1 + zcash_primitives/src/transaction/components.rs | 1 + 4 files changed, 6 insertions(+) diff --git a/zcash_primitives/Cargo.toml b/zcash_primitives/Cargo.toml index 0aedae3609..bef7f4edc1 100644 --- a/zcash_primitives/Cargo.toml +++ b/zcash_primitives/Cargo.toml @@ -11,6 +11,9 @@ readme = "README.md" license = "MIT OR Apache-2.0" edition = "2018" +[package.metadata.docs.rs] +all-features = true + [dependencies] aes = "0.5" blake2b_simd = "0.5" diff --git a/zcash_primitives/src/lib.rs b/zcash_primitives/src/lib.rs index d20a4ace9d..b4908b578d 100644 --- a/zcash_primitives/src/lib.rs +++ b/zcash_primitives/src/lib.rs @@ -3,6 +3,7 @@ //! `zcash_primitives` is a library that provides the core structs and functions necessary //! for working with Zcash. +#![cfg_attr(docsrs, feature(doc_cfg))] // Catch documentation errors caused by code changes. #![deny(intra_doc_link_resolution_failure)] diff --git a/zcash_primitives/src/transaction/builder.rs b/zcash_primitives/src/transaction/builder.rs index d6c2ea5965..302656edfd 100644 --- a/zcash_primitives/src/transaction/builder.rs +++ b/zcash_primitives/src/transaction/builder.rs @@ -412,6 +412,7 @@ impl Builder { /// Adds a transparent coin to be spent in this transaction. #[cfg(feature = "transparent-inputs")] + #[cfg_attr(docsrs, doc(cfg(feature = "transparent-inputs")))] pub fn add_transparent_input( &mut self, sk: secp256k1::SecretKey, diff --git a/zcash_primitives/src/transaction/components.rs b/zcash_primitives/src/transaction/components.rs index 60a7dc8949..0929eda51f 100644 --- a/zcash_primitives/src/transaction/components.rs +++ b/zcash_primitives/src/transaction/components.rs @@ -60,6 +60,7 @@ pub struct TxIn { impl TxIn { #[cfg(feature = "transparent-inputs")] + #[cfg_attr(docsrs, doc(cfg(feature = "transparent-inputs")))] pub fn new(prevout: OutPoint) -> Self { TxIn { prevout, From cda56ef862e5292417f5897900e11588cb1e1004 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Sun, 23 Aug 2020 10:54:32 +0100 Subject: [PATCH 4/4] zcash_proofs: Add feature flags to docs.rs documentation --- zcash_proofs/Cargo.toml | 3 +++ zcash_proofs/src/lib.rs | 7 +++++++ zcash_proofs/src/prover.rs | 3 +++ 3 files changed, 13 insertions(+) diff --git a/zcash_proofs/Cargo.toml b/zcash_proofs/Cargo.toml index 8a917e2f85..74567b4600 100644 --- a/zcash_proofs/Cargo.toml +++ b/zcash_proofs/Cargo.toml @@ -11,6 +11,9 @@ readme = "README.md" license = "MIT OR Apache-2.0" edition = "2018" +[package.metadata.docs.rs] +all-features = true + [dependencies] bellman = { version = "0.6", path = "../bellman", default-features = false, features = ["groth16"] } blake2b_simd = "0.5" diff --git a/zcash_proofs/src/lib.rs b/zcash_proofs/src/lib.rs index ecbb34c0bf..6d0476c578 100644 --- a/zcash_proofs/src/lib.rs +++ b/zcash_proofs/src/lib.rs @@ -3,6 +3,7 @@ //! `zcash_proofs` contains the zk-SNARK circuits used by Zcash, and the APIs for creating //! and verifying proofs. +#![cfg_attr(docsrs, feature(doc_cfg))] // Catch documentation errors caused by code changes. #![deny(intra_doc_link_resolution_failure)] @@ -24,6 +25,10 @@ pub mod sapling; pub mod sprout; #[cfg(any(feature = "local-prover", feature = "bundled-prover"))] +#[cfg_attr( + docsrs, + doc(cfg(any(feature = "local-prover", feature = "bundled-prover"))) +)] pub mod prover; // Circuit names @@ -42,6 +47,7 @@ const DOWNLOAD_URL: &str = "https://download.z.cash/downloads"; /// Returns the default folder that the Zcash proving parameters are located in. #[cfg(feature = "directories")] +#[cfg_attr(docsrs, doc(cfg(feature = "directories")))] pub fn default_params_folder() -> Option { BaseDirs::new().map(|base_dirs| { if cfg!(any(windows, target_os = "macos")) { @@ -56,6 +62,7 @@ pub fn default_params_folder() -> Option { /// /// This mirrors the behaviour of the `fetch-params.sh` script from `zcashd`. #[cfg(feature = "download-params")] +#[cfg_attr(docsrs, doc(cfg(feature = "download-params")))] pub fn download_parameters() -> Result<(), minreq::Error> { // Ensure that the default Zcash parameters location exists. let params_dir = default_params_folder().ok_or(io::Error::new( diff --git a/zcash_proofs/src/prover.rs b/zcash_proofs/src/prover.rs index 5373bc3f9f..f84b22279a 100644 --- a/zcash_proofs/src/prover.rs +++ b/zcash_proofs/src/prover.rs @@ -49,6 +49,7 @@ impl LocalTxProver { /// This function will panic if the paths do not point to valid parameter files with /// the expected hashes. #[cfg(feature = "local-prover")] + #[cfg_attr(docsrs, doc(cfg(feature = "local-prover")))] pub fn new(spend_path: &Path, output_path: &Path) -> Self { let (spend_params, spend_vk, output_params, _, _) = load_parameters(spend_path, output_path, None); @@ -81,6 +82,7 @@ impl LocalTxProver { /// This function will panic if the parameters in the default local location do not /// have the expected hashes. #[cfg(feature = "local-prover")] + #[cfg_attr(docsrs, doc(cfg(feature = "local-prover")))] pub fn with_default_location() -> Option { let params_dir = default_params_folder()?; let (spend_path, output_path) = if params_dir.exists() { @@ -103,6 +105,7 @@ impl LocalTxProver { /// This requires the `bundled-prover` feature, which will increase the binary size by /// around 50 MiB. #[cfg(feature = "bundled-prover")] + #[cfg_attr(docsrs, doc(cfg(feature = "bundled-prover")))] pub fn bundled() -> Self { let (spend_buf, output_buf) = wagyu_zcash_parameters::load_sapling_parameters(); let (spend_params, spend_vk, output_params, _, _) =