From 6de4268b22890dc8bb264102eb79cf1e3a0ebe8e Mon Sep 17 00:00:00 2001 From: root Date: Thu, 17 Oct 2019 11:38:12 +0200 Subject: [PATCH 1/3] Move non-template functions outside template files so the library can be linked properly when using both Aurora and Ligero features --- libiop/iop/utilities/batching.cpp | 20 ++++++++++++++++++++ libiop/iop/utilities/batching.tcc | 12 +----------- libiop/protocols/ldt/ldt_reducer.cpp | 21 +++++++++++++++++++++ libiop/protocols/ldt/ldt_reducer.tcc | 11 ----------- 4 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 libiop/iop/utilities/batching.cpp create mode 100644 libiop/protocols/ldt/ldt_reducer.cpp diff --git a/libiop/iop/utilities/batching.cpp b/libiop/iop/utilities/batching.cpp new file mode 100644 index 00000000..fb38260e --- /dev/null +++ b/libiop/iop/utilities/batching.cpp @@ -0,0 +1,20 @@ +#include "batching.hpp" + +namespace libiop { + + + +std::vector virtual_oracle_handles_to_handle_ptrs( + const std::vector handles) +{ + std::vector oracles; + oracles.reserve(handles.size()); + for (size_t i = 0; i < handles.size(); i++) + { + oracles.emplace_back(std::make_shared(handles[i])); + } + return oracles; +} + + +} // namespace libiop diff --git a/libiop/iop/utilities/batching.tcc b/libiop/iop/utilities/batching.tcc index 90188656..7246df9d 100644 --- a/libiop/iop/utilities/batching.tcc +++ b/libiop/iop/utilities/batching.tcc @@ -57,17 +57,7 @@ std::vector register_n_oracles( return oracles; } -std::vector virtual_oracle_handles_to_handle_ptrs( - const std::vector handles) -{ - std::vector oracles; - oracles.reserve(handles.size()); - for (size_t i = 0; i < handles.size(); i++) - { - oracles.emplace_back(std::make_shared(handles[i])); - } - return oracles; -} + template std::vector register_queries_for_same_pos( diff --git a/libiop/protocols/ldt/ldt_reducer.cpp b/libiop/protocols/ldt/ldt_reducer.cpp new file mode 100644 index 00000000..477df2e8 --- /dev/null +++ b/libiop/protocols/ldt/ldt_reducer.cpp @@ -0,0 +1,21 @@ +#include "ldt_reducer.hpp" +#include +#include + +namespace libiop { + + +const char* LDT_reducer_soundness_type_to_string(LDT_reducer_soundness_type soundness_type) +{ + if (soundness_type == LDT_reducer_soundness_type::proven) + { + return "proven"; + } else if (soundness_type == LDT_reducer_soundness_type::optimistic_heuristic) + { + return "heuristic"; + } + return "Invalid soundness type"; +} + + +} // libiop diff --git a/libiop/protocols/ldt/ldt_reducer.tcc b/libiop/protocols/ldt/ldt_reducer.tcc index 0be0d54d..794f8b31 100644 --- a/libiop/protocols/ldt/ldt_reducer.tcc +++ b/libiop/protocols/ldt/ldt_reducer.tcc @@ -107,17 +107,6 @@ size_t LDT_instance_reducer_params::num_output_LDT_instances() const return this->num_output_LDT_instances_; } -const char* LDT_reducer_soundness_type_to_string(LDT_reducer_soundness_type soundness_type) -{ - if (soundness_type == LDT_reducer_soundness_type::proven) - { - return "proven"; - } else if (soundness_type == LDT_reducer_soundness_type::optimistic_heuristic) - { - return "heuristic"; - } - return "Invalid soundness type"; -} template void LDT_instance_reducer_params::print() const From 14bc44f78f6c626855110a49119e0ba34a5b980c Mon Sep 17 00:00:00 2001 From: root Date: Thu, 17 Oct 2019 11:42:11 +0200 Subject: [PATCH 2/3] Add the new cpp to the makefile --- libiop/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libiop/CMakeLists.txt b/libiop/CMakeLists.txt index 003df21e..db6ed62b 100644 --- a/libiop/CMakeLists.txt +++ b/libiop/CMakeLists.txt @@ -9,6 +9,8 @@ add_library( algebra/fields/gf192.cpp algebra/fields/gf256.cpp snark/common/hashing.cpp + protocols/ldt/ldt_reducer.cpp + iop/utilities/batching.cpp ) target_link_libraries( From 01dc1b567bc5058cbe54d12760aa7a35e27cfba7 Mon Sep 17 00:00:00 2001 From: guipublic <47281315+guipublic@users.noreply.github.com> Date: Mon, 21 Oct 2019 16:27:48 +0200 Subject: [PATCH 3/3] Fix link issues when using Fractal Resolve link issues when linking the libiop library for using all schemes (fractal, aurora and ligero). --- libiop/CMakeLists.txt | 6 +++- libiop/algebra/utils.cpp | 11 +++++++ libiop/algebra/utils.tcc | 5 +--- libiop/common/common.cpp | 21 -------------- libiop/common/common.hpp | 26 +++++++++++++++-- libiop/protocols/ldt/fri/fri_aux.cpp | 43 ++++++++++++++++++++++++++++ libiop/protocols/ldt/fri/fri_aux.tcc | 34 ---------------------- libiop/protocols/ldt/fri/fri_ldt.cpp | 19 ++++++++++++ libiop/protocols/ldt/fri/fri_ldt.tcc | 14 +-------- libiop/protocols/ldt/ldt_reducer.cpp | 2 +- libiop/relations/sparse_matrix.cpp | 9 ++++++ libiop/relations/sparse_matrix.hpp | 3 +- 12 files changed, 115 insertions(+), 78 deletions(-) create mode 100644 libiop/algebra/utils.cpp create mode 100644 libiop/protocols/ldt/fri/fri_aux.cpp create mode 100644 libiop/protocols/ldt/fri/fri_ldt.cpp create mode 100644 libiop/relations/sparse_matrix.cpp diff --git a/libiop/CMakeLists.txt b/libiop/CMakeLists.txt index db6ed62b..1de69ac4 100644 --- a/libiop/CMakeLists.txt +++ b/libiop/CMakeLists.txt @@ -10,7 +10,11 @@ add_library( algebra/fields/gf256.cpp snark/common/hashing.cpp protocols/ldt/ldt_reducer.cpp + protocols/ldt/fri/fri_ldt.cpp + protocols/ldt/fri/fri_aux.cpp + relations/sparse_matrix.cpp iop/utilities/batching.cpp + algebra/utils.cpp ) target_link_libraries( @@ -216,7 +220,7 @@ target_link_libraries(test_bcs_transformation iop gtest_main) add_executable(test_aurora_snark tests/snark/test_aurora_snark.cpp) target_link_libraries(test_aurora_snark iop gtest_main) -add_executable(test_fractal_snark tests/snark/test_fractal_snark.cpp) +add_executable(test_fractal_snark tests/snark/test_fractal_snark.cpp ) target_link_libraries(test_fractal_snark iop gtest_main) add_executable(test_ligero_snark tests/snark/test_ligero_snark.cpp) diff --git a/libiop/algebra/utils.cpp b/libiop/algebra/utils.cpp new file mode 100644 index 00000000..507702a0 --- /dev/null +++ b/libiop/algebra/utils.cpp @@ -0,0 +1,11 @@ +#include "libiop/algebra/utils.hpp" + + +namespace libiop { + +size_t gcd(const size_t a, const size_t b) +{ + return b == 0 ? a : gcd(b, a % b); +} + +} \ No newline at end of file diff --git a/libiop/algebra/utils.tcc b/libiop/algebra/utils.tcc index a458926b..ac8eb9c2 100644 --- a/libiop/algebra/utils.tcc +++ b/libiop/algebra/utils.tcc @@ -180,9 +180,6 @@ std::vector random_FieldT_vector(const std::size_t count) return result; } -size_t gcd(const size_t a, const size_t b) -{ - return b == 0 ? a : gcd(b, a % b); -} + } // namespace libiop diff --git a/libiop/common/common.cpp b/libiop/common/common.cpp index 9132eebd..f199af8b 100644 --- a/libiop/common/common.cpp +++ b/libiop/common/common.cpp @@ -48,26 +48,5 @@ long double add_soundness_error_bits(const long double bits1, const long double return -1 * log2l(result); } -template -void print_vector(std::vector &vec) -{ - printf("{ "); - for (auto const& elem : vec) - { - std::cout << elem << " "; - } - printf("}\n"); -} - -template -void print_vector(std::vector vec) -{ - printf("{ "); - for (auto const& elem : vec) - { - std::cout << elem << " "; - } - printf("}\n"); -} } // namespace libiop diff --git a/libiop/common/common.hpp b/libiop/common/common.hpp index a9e794d5..0916c9f9 100644 --- a/libiop/common/common.hpp +++ b/libiop/common/common.hpp @@ -33,11 +33,33 @@ long double add_soundness_error_bits(const long double bits1, const long double template void UNUSED(Types&&...) {} -/* Print a vector in the form { elem0 elem1 elem2 ... }, with a newline at the end*/ +/* Print a vector in the form { elem0 elem1 elem2 ... }, with a newline at the end template void print_vector(std::vector &vec); template -void print_vector(std::vector vec); +void print_vector(std::vector vec);*/ + +template +void print_vector(std::vector &vec) +{ + printf("{ "); + for (auto const& elem : vec) + { + std::cout << elem << " "; + } + printf("}\n"); +} + +template +void print_vector(std::vector vec) +{ + printf("{ "); + for (auto const& elem : vec) + { + std::cout << elem << " "; + } + printf("}\n"); +} } // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_aux.cpp b/libiop/protocols/ldt/fri/fri_aux.cpp new file mode 100644 index 00000000..d9ef5936 --- /dev/null +++ b/libiop/protocols/ldt/fri/fri_aux.cpp @@ -0,0 +1,43 @@ +#include +#include "fri_aux.hpp" + +namespace libiop { + + +// ------------------------------------------------- +// Optimizer utils + +/** Generate all possible localization vectors that begin with starting, + * and reduce up to max_reducable_dimensions dimensions. + */ +std::vector> localization_vector_generator( + size_t max_reducable_dimensions, + std::vector starting) +{ + std::vector> options; + options.push_back(starting); + if (max_reducable_dimensions == 0) + { + return options; + } + for (size_t i = 1; i <= max_reducable_dimensions; ++i) + { + std::vector new_starting = starting; + new_starting.push_back(i); + std::vector> new_options = + localization_vector_generator(max_reducable_dimensions - i, new_starting); + options.insert(options.end(), new_options.begin(), new_options.end()); + } + return options; +} + +/* return all partitions of this number (that is, all possible FRI localization parameter vectors + for this codeword domain dimension) */ +std::vector> all_localization_vectors(size_t dimension_to_reduce) +{ + /* Fix the start as 1 */ + std::vector starting({1}); + return localization_vector_generator(dimension_to_reduce - 1, starting); +} + +} // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_aux.tcc b/libiop/protocols/ldt/fri/fri_aux.tcc index 409e584d..a2735344 100644 --- a/libiop/protocols/ldt/fri/fri_aux.tcc +++ b/libiop/protocols/ldt/fri/fri_aux.tcc @@ -386,40 +386,6 @@ std::vector calculate_next_coset_query_positions( return query_pos; } -// ------------------------------------------------- -// Optimizer utils -/** Generate all possible localization vectors that begin with starting, - * and reduce up to max_reducable_dimensions dimensions. - */ -std::vector> localization_vector_generator( - size_t max_reducable_dimensions, - std::vector starting) -{ - std::vector> options; - options.push_back(starting); - if (max_reducable_dimensions == 0) - { - return options; - } - for (size_t i = 1; i <= max_reducable_dimensions; ++i) - { - std::vector new_starting = starting; - new_starting.push_back(i); - std::vector> new_options = - localization_vector_generator(max_reducable_dimensions - i, new_starting); - options.insert(options.end(), new_options.begin(), new_options.end()); - } - return options; -} - -/* return all partitions of this number (that is, all possible FRI localization parameter vectors - for this codeword domain dimension) */ -std::vector> all_localization_vectors(size_t dimension_to_reduce) -{ - /* Fix the start as 1 */ - std::vector starting({1}); - return localization_vector_generator(dimension_to_reduce - 1, starting); -} } // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_ldt.cpp b/libiop/protocols/ldt/fri/fri_ldt.cpp new file mode 100644 index 00000000..d42ea9ad --- /dev/null +++ b/libiop/protocols/ldt/fri/fri_ldt.cpp @@ -0,0 +1,19 @@ +//#include "libiop/common/common.hpp" +#include "libiop/protocols/ldt/fri/fri_ldt.hpp" + +namespace libiop { + + +const char* FRI_soundness_type_to_string(FRI_soundness_type soundness_type) +{ + if (soundness_type == FRI_soundness_type::heuristic) + { + return "heuristic"; + } else if (soundness_type == FRI_soundness_type::proven) + { + return "proven"; + } + return "Invalid soundness type"; +} + +} // namespace libiop diff --git a/libiop/protocols/ldt/fri/fri_ldt.tcc b/libiop/protocols/ldt/fri/fri_ldt.tcc index 89fc9d99..c1580ae9 100644 --- a/libiop/protocols/ldt/fri/fri_ldt.tcc +++ b/libiop/protocols/ldt/fri/fri_ldt.tcc @@ -1,5 +1,5 @@ #include "libiop/algebra/field_subset/subgroup.hpp" -#include "libiop/common/common.cpp" +#include "libiop/common/common.hpp" #include "libiop/common/profiling.hpp" namespace libiop { @@ -231,18 +231,6 @@ long double FRI_protocol_parameters::achieved_query_soundness() const return -1.0 * (long double)(this->num_query_repetitions_) * soundness_per_query; } -const char* FRI_soundness_type_to_string(FRI_soundness_type soundness_type) -{ - if (soundness_type == FRI_soundness_type::heuristic) - { - return "heuristic"; - } else if (soundness_type == FRI_soundness_type::proven) - { - return "proven"; - } - return "Invalid soundness type"; -} - template void FRI_protocol_parameters::print() const { diff --git a/libiop/protocols/ldt/ldt_reducer.cpp b/libiop/protocols/ldt/ldt_reducer.cpp index 477df2e8..fd6e4419 100644 --- a/libiop/protocols/ldt/ldt_reducer.cpp +++ b/libiop/protocols/ldt/ldt_reducer.cpp @@ -1,4 +1,4 @@ -#include "ldt_reducer.hpp" +#include "libiop/protocols/ldt/ldt_reducer.hpp" #include #include diff --git a/libiop/relations/sparse_matrix.cpp b/libiop/relations/sparse_matrix.cpp new file mode 100644 index 00000000..fc792388 --- /dev/null +++ b/libiop/relations/sparse_matrix.cpp @@ -0,0 +1,9 @@ +#include "libiop/relations/sparse_matrix.hpp" + +namespace libiop { + + +std::vector all_r1cs_sparse_matrix_types( + {r1cs_sparse_matrix_A, r1cs_sparse_matrix_B, r1cs_sparse_matrix_C}); + +} // libiop diff --git a/libiop/relations/sparse_matrix.hpp b/libiop/relations/sparse_matrix.hpp index e6067068..d0bed9c3 100644 --- a/libiop/relations/sparse_matrix.hpp +++ b/libiop/relations/sparse_matrix.hpp @@ -36,8 +36,7 @@ enum r1cs_sparse_matrix_type { r1cs_sparse_matrix_C = 3 }; -std::vector all_r1cs_sparse_matrix_types( - {r1cs_sparse_matrix_A, r1cs_sparse_matrix_B, r1cs_sparse_matrix_C}); +extern std::vector all_r1cs_sparse_matrix_types; template class r1cs_sparse_matrix : public sparse_matrix {