Skip to content

Commit

Permalink
Merge pull request #33 from NilFoundation/20-plonk-impl
Browse files Browse the repository at this point in the history
  • Loading branch information
nemothenoone committed Mar 10, 2022
2 parents c96686b + ddafb98 commit cbdb904
Show file tree
Hide file tree
Showing 151 changed files with 8,030 additions and 1,628 deletions.
56 changes: 29 additions & 27 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,41 +60,41 @@ list(APPEND ${CURRENT_PROJECT_NAME}_PUBLIC_HEADERS
include/nil/crypto3/zk/snark/commitments/knowledge_commitment_multiexp.hpp
include/nil/crypto3/zk/snark/commitments/knowledge_commitment.hpp

include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/compliance_predicate/compliance_predicate.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/compliance_predicate/cp_handler.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/compliance_predicate/compliance_predicate.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/compliance_predicate/cp_handler.hpp

include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_mp_ppzkpcd/mp_pcd_circuits.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_mp_ppzkpcd/r1cs_mp_ppzkpcd.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_mp_ppzkpcd/r1cs_mp_ppzkpcd_params.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_mp_ppzkpcd/mp_pcd_circuits.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_mp_ppzkpcd/r1cs_mp_ppzkpcd.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_mp_ppzkpcd/r1cs_mp_ppzkpcd_params.hpp

include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_sp_ppzkpcd/r1cs_sp_ppzkpcd.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_sp_ppzkpcd/r1cs_sp_ppzkpcd_params.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_sp_ppzkpcd/sp_pcd_circuits.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/ppzkpcd_compliance_predicate.hpp
include/nil/crypto3/zk/snark/schemes/pcd/r1cs_pcd/r1cs_pcd_params.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_sp_ppzkpcd/r1cs_sp_ppzkpcd.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_sp_ppzkpcd/r1cs_sp_ppzkpcd_params.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_sp_ppzkpcd/sp_pcd_circuits.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/ppzkpcd_compliance_predicate.hpp
include/nil/crypto3/zk/snark/systems/pcd/r1cs_pcd/r1cs_pcd_params.hpp

include/nil/crypto3/zk/snark/schemes/ppzkadsnark/r1cs_ppzkadsnark/r1cs_ppzkadsnark.hpp
include/nil/crypto3/zk/snark/schemes/ppzkadsnark/r1cs_ppzkadsnark/prf.hpp
include/nil/crypto3/zk/snark/schemes/ppzkadsnark/r1cs_ppzkadsnark/signature.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzkadsnark/r1cs_ppzkadsnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzkadsnark/r1cs_ppzkadsnark/r1cs_ppzkadsnark.hpp
include/nil/crypto3/zk/snark/systems/ppzkadsnark/r1cs_ppzkadsnark/prf.hpp
include/nil/crypto3/zk/snark/systems/ppzkadsnark/r1cs_ppzkadsnark/signature.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzkadsnark/r1cs_ppzkadsnark/basic_policy.hpp

include/nil/crypto3/zk/snark/schemes/ppzksnark/bacs_ppzksnark.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzksnark/bacs_ppzksnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzksnark/bacs_ppzksnark.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzksnark/bacs_ppzksnark/basic_policy.hpp

include/nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_gg_ppzksnark.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzksnark/r1cs_gg_ppzksnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzksnark/r1cs_gg_ppzksnark/basic_policy.hpp

include/nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_ppzksnark.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzksnark/r1cs_ppzksnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_ppzksnark.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzksnark/r1cs_ppzksnark/basic_policy.hpp

include/nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_se_ppzksnark.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzksnark/r1cs_se_ppzksnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzksnark/r1cs_se_ppzksnark/basic_policy.hpp

include/nil/crypto3/zk/snark/schemes/ppzksnark/tbcs_ppzksnark.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzksnark/tbcs_ppzksnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzksnark/tbcs_ppzksnark.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzksnark/tbcs_ppzksnark/basic_policy.hpp

include/nil/crypto3/zk/snark/schemes/ppzksnark/uscs_ppzksnark.hpp
include/nil/crypto3/zk/snark/schemes/detail/ppzksnark/uscs_ppzksnark/basic_policy.hpp
include/nil/crypto3/zk/snark/systems/ppzksnark/uscs_ppzksnark.hpp
include/nil/crypto3/zk/snark/systems/detail/ppzksnark/uscs_ppzksnark/basic_policy.hpp

include/nil/crypto3/zk/snark/reductions/bacs_to_r1cs.hpp

Expand Down Expand Up @@ -164,7 +164,9 @@ target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE
${CMAKE_WORKSPACE_NAME}::algebra
${CMAKE_WORKSPACE_NAME}::math
${CMAKE_WORKSPACE_NAME}::hash
${CMAKE_WORKSPACE_NAME}::multiprecision)
${CMAKE_WORKSPACE_NAME}::multiprecision
${CMAKE_WORKSPACE_NAME}::containers
)

cm_deploy(TARGETS ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}
INCLUDE include
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,21 @@
// SOFTWARE.
//---------------------------------------------------------------------------//

#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_ACCUMULATE_HPP
#define CRYPTO3_ZK_SNARK_ALGORITHMS_ACCUMULATE_HPP
#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP
#define CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP

namespace nil {
namespace crypto3 {
namespace zk {
namespace snark {
template<typename ProofSystemType, template<typename T> class ProofRange>
bool aggregate(const typename ProofSystemType::processed_verification_key_type &pvk,
const typename ProofSystemType::primary_input_type &primary_input,
const typename ProofSystemType::proof_type &proof) {
template<typename ProofSystemType, template<typename T> class ProofRange>
bool aggregate(const typename ProofSystemType::processed_verification_key_type &pvk,
const typename ProofSystemType::primary_input_type &primary_input,
const typename ProofSystemType::proof_type &proof) {

return ProofSystemType::verify(pvk, primary_input, proof);
}
} // namespace snark
return ProofSystemType::verify(pvk, primary_input, proof);
}
} // namespace zk
} // namespace crypto3
} // namespace nil

#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_HPP
#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,20 @@
namespace nil {
namespace crypto3 {
namespace zk {
<<<<<<< HEAD:include/nil/crypto3/zk/algorithms/generate.hpp
template<typename ProofSystemType>
typename ProofSystemType::keypair_type
generate(const typename ProofSystemType::constraint_system_type &constraint_system) {

return ProofSystemType::generate(constraint_system);
}

template<typename ProofSystemType>
typename ProofSystemType::keypair_type generate(const typename ProofSystemType::circuit_type &circuit) {

return ProofSystemType::generate(circuit);
}
=======
namespace snark {
template<typename ProofSystemType, typename KeyPairType = typename ProofSystemType::keypair_type>
KeyPairType generate(const typename ProofSystemType::constraint_system_type &constraint_system) {
Expand All @@ -42,15 +56,15 @@ namespace nil {

return ProofSystemType::template generate<KeyPairType>(circuit);
}
>>>>>>> master:include/nil/crypto3/zk/snark/algorithms/generate.hpp

template<typename ProofSystemType>
typename ProofSystemType::srs_pair_type generate(std::size_t num_proofs) {
template<typename ProofSystemType>
typename ProofSystemType::srs_pair_type generate(std::size_t num_proofs) {

return ProofSystemType::generate(num_proofs);
}
} // namespace snark
return ProofSystemType::generate(num_proofs);
}
} // namespace zk
} // namespace crypto3
} // namespace nil

#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_HPP
#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_GENERATE_HPP
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,31 @@
namespace nil {
namespace crypto3 {
namespace zk {
namespace snark {
template<typename ProofSystemType>
typename ProofSystemType::proof_type
prove(const typename ProofSystemType::proving_key_type &pk,
const typename ProofSystemType::primary_input_type &primary_input,
const typename ProofSystemType::auxiliary_input_type &auxiliary_input) {
template<typename ProofSystemType>
typename ProofSystemType::proof_type
prove(const typename ProofSystemType::proving_key_type &pk,
const typename ProofSystemType::primary_input_type &primary_input,
const typename ProofSystemType::auxiliary_input_type &auxiliary_input) {

return ProofSystemType::prove(pk, primary_input, auxiliary_input);
}
return ProofSystemType::prove(pk, primary_input, auxiliary_input);
}

<<<<<<< HEAD:include/nil/crypto3/zk/algorithms/prove.hpp
template<typename ProofSystemType,
typename Hash,
typename InputTranscriptIncludeIterator,
typename InputProofIterator>
typename ProofSystemType::aggregate_proof_type
prove(const typename ProofSystemType::proving_srs_type &srs,
InputTranscriptIncludeIterator transcript_include_first,
InputTranscriptIncludeIterator transcript_include_last,
InputProofIterator proofs_first,
InputProofIterator proofs_last) {

return ProofSystemType::template prove<Hash>(
srs, transcript_include_first, transcript_include_last, proofs_first, proofs_last);
}
=======
template<typename ProofSystemType,
typename Hash,
typename InputTranscriptIncludeIterator,
Expand All @@ -65,8 +80,9 @@ namespace nil {
return ProofSystemType::prove(pk, pubkey, primary_input, auxiliary_input, r);
}
} // namespace snark
>>>>>>> master:include/nil/crypto3/zk/snark/algorithms/prove.hpp
} // namespace zk
} // namespace crypto3
} // namespace nil

#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_HPP
#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_PROVE_HPP
69 changes: 69 additions & 0 deletions include/nil/crypto3/zk/algorithms/verify.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
//---------------------------------------------------------------------------//
// Copyright (c) 2020-2021 Mikhail Komarov <nemo@nil.foundation>
// Copyright (c) 2020-2021 Nikita Kaskov <nbering@nil.foundation>
// Copyright (c) 2020-2021 Ilias Khairullin <ilias@nil.foundation>
//
// MIT License
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//---------------------------------------------------------------------------//

#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP
#define CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP

namespace nil {
namespace crypto3 {
namespace zk {
template<typename ProofSystemType>
bool verify(const typename ProofSystemType::verification_key_type &vk,
const typename ProofSystemType::primary_input_type &primary_input,
const typename ProofSystemType::proof_type &proof) {

return ProofSystemType::verify(vk, primary_input, proof);
}

template<typename ProofSystemType>
bool verify(const typename ProofSystemType::processed_verification_key_type &pvk,
const typename ProofSystemType::primary_input_type &primary_input,
const typename ProofSystemType::proof_type &proof) {

return ProofSystemType::verify(pvk, primary_input, proof);
}

template<typename ProofSystemType,
typename DistributionType,
typename GeneratorType,
typename Hash,
typename InputPrimaryInputRange,
typename InputIterator>
bool verify(const typename ProofSystemType::verification_srs_type &ip_verifier_srs,
const typename ProofSystemType::verification_key_type &pvk,
const InputPrimaryInputRange &public_inputs,
const typename ProofSystemType::aggregate_proof_type &proof,
InputIterator transcript_include_first,
InputIterator transcript_include_last) {

return ProofSystemType::template verify<DistributionType, GeneratorType, Hash>(
ip_verifier_srs, pvk, public_inputs, proof, transcript_include_first, transcript_include_last);
}
} // namespace zk
} // namespace crypto3
} // namespace nil

#endif // CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP
Loading

0 comments on commit cbdb904

Please sign in to comment.