1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
// Copyright (C) 2019-2021 Aleo Systems Inc. // This file is part of the snarkVM library. // The snarkVM library is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // The snarkVM library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with the snarkVM library. If not, see <https://www.gnu.org/licenses/>. #![cfg_attr(not(feature = "std"), no_std)] //! A crate for the Marlin preprocessing zkSNARK for R1CS. //! //! # Note //! //! Currently, Marlin only supports R1CS instances where the number of inputs //! is the same as the number of constraints (i.e., where the constraint //! matrices are square). Furthermore, Marlin only supports instances where the //! public inputs are of size one less than a power of 2 (i.e., 2^n - 1). #![allow(clippy::module_inception)] #![deny(unused_import_braces, unused_qualifications, trivial_casts)] #![deny(trivial_numeric_casts, private_in_public)] #![deny(stable_features, unreachable_pub, non_shorthand_field_patterns)] #![deny(unused_attributes, unused_imports, unused_mut, missing_docs)] #![deny(renamed_and_removed_lints, stable_features, unused_allocation)] #![deny(unused_comparisons, bare_trait_objects, unused_must_use, const_err)] #![forbid(unsafe_code)] #[macro_use] extern crate snarkvm_profiler; #[cfg(not(feature = "std"))] #[macro_use] extern crate alloc; #[rustfmt::skip] #[cfg(not(feature = "std"))] use alloc::{ collections::BTreeMap, marker::PhantomData, string::{String, ToString}, vec::Vec, }; #[rustfmt::skip] #[cfg(feature = "std")] use std::{ collections::BTreeMap, marker::PhantomData, string::{String, ToString}, vec::Vec, }; #[cfg(not(feature = "std"))] macro_rules! eprintln { () => {}; ($($arg: tt)*) => {}; } /// Implements an Algebraic Holographic Proof (AHP) for the R1CS indexed relation. pub mod ahp; pub use ahp::*; /// Implements the Marlin verification gadget. pub mod constraints; /// Implements the base Marlin zkSNARK proof system. pub mod marlin; /// The Marlin public parameters for a given circuit. pub mod parameters; pub use parameters::*; /// Implements the snarkVM-compatible Marlin SNARK interface. pub mod snark; pub use snark::*; /// RNGs for the Marlin SNARK. pub mod fiat_shamir; pub use fiat_shamir::*;