From 9cc7201c6adfc654f5d982efdf24a0ea87a6798a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Mon, 28 Aug 2017 14:40:02 +0200 Subject: [PATCH 1/6] Remove unnecessary stuff from CMake - Remove boost::program_options requirement. - Remove libcrypto requirement. --- .gitignore | 2 ++ CMakeLists.txt | 10 ---------- 2 files changed, 2 insertions(+), 10 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..add2a728 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build/ +/.idea/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index b23f9b4a..0d412d58 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,12 +117,6 @@ find_library(GMP_LIBRARIES NAMES gmp libgmp) find_library(GMPXX_LIBRARIES NAMES gmpxx libgmpxx) include(FindPkgConfig) -pkg_check_modules( - CRYPTO - REQUIRED - - libcrypto -) if("${WITH_PROCPS}") pkg_check_modules( @@ -137,10 +131,6 @@ else() ) endif() -# Enable Boost for program_options -FIND_PACKAGE( Boost 1.40 COMPONENTS program_options REQUIRED ) -INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} ) - add_definitions( -DCURVE_${CURVE} ) From 33896bdb622c2d5355253862ddf91dce33b72f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 16 Mar 2017 16:54:21 +0100 Subject: [PATCH 2/6] CMake: find only GMP header --- CMakeLists.txt | 5 +---- libff/CMakeLists.txt | 7 +++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d412d58..eb7cffbc 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,8 +113,7 @@ set( ) find_path(GMP_INCLUDE_DIR NAMES gmp.h) -find_library(GMP_LIBRARIES NAMES gmp libgmp) -find_library(GMPXX_LIBRARIES NAMES gmpxx libgmpxx) +message(STATUS "GMP include dir: ${GMP_INCLUDE_DIR}") include(FindPkgConfig) @@ -137,8 +136,6 @@ add_definitions( enable_testing() -include_directories(.) - if(${CURVE} STREQUAL "BN128") add_definitions( -DBN_SUPPORT_SNARK=1 diff --git a/libff/CMakeLists.txt b/libff/CMakeLists.txt index ace1da7b..e4ac7379 100755 --- a/libff/CMakeLists.txt +++ b/libff/CMakeLists.txt @@ -55,11 +55,14 @@ target_link_libraries( ff ${GMP_LIBRARIES} - ${GMPXX_LIBRARIES} - ${CRYPTO_LIBRARIES} ${PROCPS_LIBRARIES} ${FF_EXTRALIBS} ) +target_include_directories( + ff + PUBLIC .. + PRIVATE ${GMP_INCLUDE_DIR} +) install( DIRECTORY "" DESTINATION "include/libff" From 98653b2e7b1ac2e71776e5de358a2a8571ec900b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 20 Apr 2017 12:02:37 -0700 Subject: [PATCH 3/6] Disable profiling clock on Windows --- libff/common/profiling.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libff/common/profiling.cpp b/libff/common/profiling.cpp index 4de648f5..f2a19858 100755 --- a/libff/common/profiling.cpp +++ b/libff/common/profiling.cpp @@ -38,12 +38,16 @@ long long get_nsec_time() /* Return total CPU time consumsed by all threads of the process, in nanoseconds. */ long long get_nsec_cpu_time() { +#if _MSC_VER + return 0; +#else ::timespec ts; if ( ::clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) ) throw ::std::runtime_error("clock_gettime(CLOCK_PROCESS_CPUTIME_ID) failed"); // If we expected this to work, don't silently ignore failures, because that would hide the problem and incur an unnecessarily system-call overhead. So if we ever observe this exception, we should probably add a suitable #ifdef . //TODO: clock_gettime(CLOCK_PROCESS_CPUTIME_ID) is not supported by native Windows. What about Cygwin? Should we #ifdef on CLOCK_PROCESS_CPUTIME_ID or on __linux__? return ts.tv_sec * 1000000000ll + ts.tv_nsec; +#endif } long long start_time, last_time; From 9e0253831bb75ed14f49d168063111f175901113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Fri, 21 Apr 2017 03:10:26 -0700 Subject: [PATCH 4/6] Fix some warnings on Windows --- libff/algebra/curves/curve_utils.tcc | 2 +- libff/algebra/fields/bigint.tcc | 2 +- libff/algebra/fields/field_utils.tcc | 2 +- libff/algebra/fields/fp.tcc | 2 +- libff/algebra/fields/fp4.tcc | 2 +- libff/algebra/fields/fp6_2over3.tcc | 2 +- libff/common/utils.hpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libff/algebra/curves/curve_utils.tcc b/libff/algebra/curves/curve_utils.tcc index 8bb4509d..275c0f61 100755 --- a/libff/algebra/curves/curve_utils.tcc +++ b/libff/algebra/curves/curve_utils.tcc @@ -16,7 +16,7 @@ GroupT scalar_mul(const GroupT &base, const bigint &scalar) GroupT result = GroupT::zero(); bool found_one = false; - for (long i = scalar.max_bits() - 1; i >= 0; --i) + for (long i = static_cast(scalar.max_bits() - 1); i >= 0; --i) { if (found_one) { diff --git a/libff/algebra/fields/bigint.tcc b/libff/algebra/fields/bigint.tcc index 9824544d..620c26ec 100755 --- a/libff/algebra/fields/bigint.tcc +++ b/libff/algebra/fields/bigint.tcc @@ -158,7 +158,7 @@ bool bigint::test_bit(const std::size_t bitno) const const std::size_t part = bitno/GMP_NUMB_BITS; const std::size_t bit = bitno - (GMP_NUMB_BITS*part); const mp_limb_t one = 1; - return (this->data[part] & (one<data[part] & (one< &vec) FieldT acc_inverse = acc.inverse(); - for (long i = vec.size()-1; i >= 0; --i) + for (long i = static_cast(vec.size()-1); i >= 0; --i) { const FieldT old_el = vec[i]; vec[i] = acc_inverse * prod[i]; diff --git a/libff/algebra/fields/fp.tcc b/libff/algebra/fields/fp.tcc index 97b0fd92..17f9e7b8 100755 --- a/libff/algebra/fields/fp.tcc +++ b/libff/algebra/fields/fp.tcc @@ -196,7 +196,7 @@ Fp_model::Fp_model(const bigint &b) template& modulus> Fp_model::Fp_model(const long x, const bool is_unsigned) { - static_assert(std::numeric_limits::max() >= std::numeric_limits::max(), "long won't fit in mp_limb_t"); + static_assert(std::numeric_limits::max() >= static_cast(std::numeric_limits::max()), "long won't fit in mp_limb_t"); if (is_unsigned || x >= 0) { this->mont_repr.data[0] = (mp_limb_t)x; diff --git a/libff/algebra/fields/fp4.tcc b/libff/algebra/fields/fp4.tcc index bd2d4646..608a5844 100755 --- a/libff/algebra/fields/fp4.tcc +++ b/libff/algebra/fields/fp4.tcc @@ -189,7 +189,7 @@ Fp4_model Fp4_model::cyclotomic_exp(const bigint &expo bool found_nonzero = false; std::vector NAF = find_wnaf(1, exponent); - for (long i = NAF.size() - 1; i >= 0; --i) + for (long i = static_cast(NAF.size() - 1); i >= 0; --i) { if (found_nonzero) { diff --git a/libff/algebra/fields/fp6_2over3.tcc b/libff/algebra/fields/fp6_2over3.tcc index ea75a82a..0b671d9d 100755 --- a/libff/algebra/fields/fp6_2over3.tcc +++ b/libff/algebra/fields/fp6_2over3.tcc @@ -219,7 +219,7 @@ Fp6_2over3_model Fp6_2over3_model::cyclotomic_exp(const b bool found_nonzero = false; std::vector NAF = find_wnaf(1, exponent); - for (long i = NAF.size() - 1; i >= 0; --i) + for (long i = static_cast(NAF.size() - 1); i >= 0; --i) { if (found_nonzero) { diff --git a/libff/common/utils.hpp b/libff/common/utils.hpp index c1aba970..dc77547e 100755 --- a/libff/common/utils.hpp +++ b/libff/common/utils.hpp @@ -25,7 +25,7 @@ size_t get_power_of_two(size_t n); /// returns ceil(log2(n)), so 1ul< Date: Fri, 21 Apr 2017 03:28:14 -0700 Subject: [PATCH 5/6] bigint: replace /dev/random with std::random_device --- libff/algebra/fields/bigint.tcc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libff/algebra/fields/bigint.tcc b/libff/algebra/fields/bigint.tcc index 620c26ec..6a2b6f62 100755 --- a/libff/algebra/fields/bigint.tcc +++ b/libff/algebra/fields/bigint.tcc @@ -11,6 +11,7 @@ #define BIGINT_TCC_ #include #include +#include namespace libff { @@ -165,11 +166,14 @@ bool bigint::test_bit(const std::size_t bitno) const template bigint& bigint::randomize() { - assert(GMP_NUMB_BITS == sizeof(mp_limb_t) * 8); - FILE *fp = fopen("/dev/urandom", "r"); //TODO Remove hard-coded use of /dev/urandom. - size_t bytes_read = fread(this->data, 1, sizeof(mp_limb_t) * n, fp); - assert(bytes_read == sizeof(mp_limb_t) * n); - fclose(fp); + static_assert(GMP_NUMB_BITS == sizeof(mp_limb_t) * 8, "Wrong GMP_NUMB_BITS value"); + std::random_device rd; + constexpr size_t num_random_words = sizeof(mp_limb_t) * n / sizeof(std::random_device::result_type); + auto random_words = reinterpret_cast(this->data); + for (size_t i = 0; i < num_random_words; ++i) + { + random_words[i] = rd(); + } return (*this); } From d2d851592da33e1492ddb83195081ee50a14fba0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Wed, 6 Sep 2017 18:23:54 +0200 Subject: [PATCH 6/6] CMake: Fix linking with GMP library --- CMakeLists.txt | 14 +++++++++++++- libff/CMakeLists.txt | 3 +-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eb7cffbc..b531dab0 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,7 +113,19 @@ set( ) find_path(GMP_INCLUDE_DIR NAMES gmp.h) -message(STATUS "GMP include dir: ${GMP_INCLUDE_DIR}") +find_library(GMP_LIBRARY gmp) +if(GMP_LIBRARY MATCHES ${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(gmp_library_type SHARED) +else() + set(gmp_library_type STATIC) +endif() +message(STATUS "GMP: ${GMP_LIBRARY}, ${GMP_INCLUDE_DIR}") +add_library(GMP::gmp ${gmp_library_type} IMPORTED) +set_target_properties( + GMP::gmp PROPERTIES + IMPORTED_LOCATION ${GMP_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR} +) include(FindPkgConfig) diff --git a/libff/CMakeLists.txt b/libff/CMakeLists.txt index e4ac7379..4961c976 100755 --- a/libff/CMakeLists.txt +++ b/libff/CMakeLists.txt @@ -54,14 +54,13 @@ add_library( target_link_libraries( ff - ${GMP_LIBRARIES} + GMP::gmp ${PROCPS_LIBRARIES} ${FF_EXTRALIBS} ) target_include_directories( ff PUBLIC .. - PRIVATE ${GMP_INCLUDE_DIR} ) install(