diff options
Diffstat (limited to 'dev-libs/libsecp256k1/files/20141212-fixes.patch')
-rw-r--r-- | dev-libs/libsecp256k1/files/20141212-fixes.patch | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/dev-libs/libsecp256k1/files/20141212-fixes.patch b/dev-libs/libsecp256k1/files/20141212-fixes.patch new file mode 100644 index 0000000..f8cb274 --- /dev/null +++ b/dev-libs/libsecp256k1/files/20141212-fixes.patch @@ -0,0 +1,289 @@ +diff --git a/build-aux/m4/bitcoin_secp.m4 b/build-aux/m4/bitcoin_secp.m4 +index 1373478..4a398d6 100644 +--- a/build-aux/m4/bitcoin_secp.m4 ++++ b/build-aux/m4/bitcoin_secp.m4 +@@ -1,12 +1,6 @@ + dnl libsecp25k1 helper checks + AC_DEFUN([SECP_INT128_CHECK],[ + has_int128=$ac_cv_type___int128 +-if test x"$has_int128" != x"yes" && test x"$set_field" = x"64bit"; then +- AC_MSG_ERROR([$set_field field support explicitly requested but is not compatible with this host]) +-fi +-if test x"$has_int128" != x"yes" && test x"$set_scalar" = x"64bit"; then +- AC_MSG_ERROR([$set_scalar scalar support explicitly requested but is not compatible with this host]) +-fi + ]) + + dnl +@@ -18,11 +12,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + __asm__ __volatile__("movq $0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx"); + ]])],[has_64bit_asm=yes],[has_64bit_asm=no]) + AC_MSG_RESULT([$has_64bit_asm]) +-if test x"$set_field" == x"64bit_asm"; then +- if test x"$has_64bit_asm" == x"no"; then +- AC_MSG_ERROR([$set_field field support explicitly requested but no x86_64 assembly available]) +- fi +-fi + ]) + + dnl +@@ -43,7 +32,7 @@ else + )]) + LIBS= + fi +-if test x"$has_libcrypto" == x"yes" && test x"$has_openssl_ec" = x; then ++if test x"$has_libcrypto" = x"yes" && test x"$has_openssl_ec" = x; then + AC_MSG_CHECKING(for EC functions in libcrypto) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include <openssl/ec.h> +@@ -69,11 +58,4 @@ if test x"$has_gmp" != x"yes"; then + CPPFLAGS="$CPPFLAGS_TEMP" + LIBS="$LIBS_TEMP" + fi +-if test x"$set_field" = x"gmp" && test x"$has_gmp" != x"yes"; then +- AC_MSG_ERROR([$set_field field support explicitly requested but libgmp was not found]) +-fi +-if test x"$set_bignum" = x"gmp" && test x"$has_gmp" != x"yes"; then +- AC_MSG_ERROR([$set_bignum field support explicitly requested but libgmp was not found]) +-fi + ]) +- +diff --git a/configure.ac b/configure.ac +index 40e121e..bd99013 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -23,7 +23,7 @@ if test "x$CFLAGS" = "x"; then + fi + + AC_PROG_CC_C99 +-if test x"$ac_cv_prog_cc_c99" == x"no"; then ++if test x"$ac_cv_prog_cc_c99" = x"no"; then + AC_MSG_ERROR([c99 compiler support required]) + fi + +@@ -96,15 +96,18 @@ AC_ARG_ENABLE(endomorphism, + [use_endomorphism=$enableval], + [use_endomorphism=no]) + +-AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=gmp|64bit|64bit_asm|32bit|auto], ++AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=gmp|64bit|32bit|auto], + [Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto]) + +-AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|none|auto], ++AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto], + [Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto]) + + AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto], + [Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto]) + ++AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|no|auto] ++[Specify assembly optimizations to use. Default is auto])],[req_asm=$withval], [req_asm=auto]) ++ + AC_CHECK_TYPES([__int128]) + + AC_MSG_CHECKING([for __builtin_expect]) +@@ -113,40 +116,66 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])], + [ AC_MSG_RESULT([no]) + ]) + +-if test x"$req_field" = x"auto"; then ++if test x"$req_asm" = x"auto"; then + SECP_64BIT_ASM_CHECK + if test x"$has_64bit_asm" = x"yes"; then +- set_field=64bit_asm ++ set_asm=x86_64 ++ fi ++ if test x"$set_asm" = x; then ++ set_asm=no + fi ++else ++ set_asm=$req_asm ++ case $set_asm in ++ x86_64) ++ SECP_64BIT_ASM_CHECK ++ if test x"$has_64bit_asm" != x"yes"; then ++ AC_MSG_ERROR([x86_64 assembly optimization requested but not available]) ++ fi ++ ;; ++ no) ++ ;; ++ *) ++ AC_MSG_ERROR([invalid assembly optimization selection]) ++ ;; ++ esac ++fi + ++if test x"$req_field" = x"auto"; then ++ if test x"set_asm" = x"x86_64"; then ++ set_field=64bit ++ fi + if test x"$set_field" = x; then + SECP_INT128_CHECK + if test x"$has_int128" = x"yes"; then + set_field=64bit + fi + fi +- + if test x"$set_field" = x; then + SECP_GMP_CHECK + if test x"$has_gmp" = x"yes"; then + set_field=gmp + fi + fi +- + if test x"$set_field" = x; then + set_field=32bit + fi + else + set_field=$req_field + case $set_field in +- 64bit_asm) +- SECP_64BIT_ASM_CHECK +- ;; + 64bit) +- SECP_INT128_CHECK ++ if test x"$set_asm" != x"x86_64"; then ++ SECP_INT128_CHECK ++ if test x"$has_int128" != x"yes"; then ++ AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available]) ++ fi ++ fi + ;; + gmp) + SECP_GMP_CHECK ++ if test x"$has_gmp" != x"yes"; then ++ AC_MSG_ERROR([gmp field explicitly requested but libgmp not available]) ++ fi + ;; + 32bit) + ;; +@@ -157,11 +186,9 @@ else + fi + + if test x"$req_scalar" = x"auto"; then +- if test x"$set_scalar" = x; then +- SECP_INT128_CHECK +- if test x"$has_int128" = x"yes"; then +- set_scalar=64bit +- fi ++ SECP_INT128_CHECK ++ if test x"$has_int128" = x"yes"; then ++ set_scalar=64bit + fi + if test x"$set_scalar" = x; then + set_scalar=32bit +@@ -171,6 +198,9 @@ else + case $set_scalar in + 64bit) + SECP_INT128_CHECK ++ if test x"$has_int128" != x"yes"; then ++ AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available]) ++ fi + ;; + 32bit) + ;; +@@ -187,15 +217,18 @@ if test x"$req_bignum" = x"auto"; then + fi + + if test x"$set_bignum" = x; then +- set_bignum=none ++ set_bignum=no + fi + else + set_bignum=$req_bignum + case $set_bignum in + gmp) + SECP_GMP_CHECK ++ if test x"$has_gmp" != x"yes"; then ++ AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available]) ++ fi + ;; +- none) ++ no) + ;; + *) + AC_MSG_ERROR([invalid bignum implementation selection]) +@@ -203,14 +236,21 @@ else + esac + fi + ++# select assembly optimization ++case $set_asm in ++x86_64) ++ AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations]) ++ ;; ++no) ++ ;; ++*) ++ AC_MSG_ERROR([invalid assembly optimizations]) ++ ;; ++esac ++ + # select field implementation + case $set_field in +-64bit_asm) +- AC_DEFINE(USE_FIELD_5X52_ASM, 1, [Define this symbol to use the assembly version for the 5x52 field implementation]) +- AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation]) +- ;; + 64bit) +- AC_DEFINE(USE_FIELD_5X52_INT128, 1, [Define this symbol to use the __int128 version for the 5x52 field implementation]) + AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation]) + ;; + gmp) +@@ -233,7 +273,7 @@ gmp) + AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation]) + AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation]) + ;; +-none) ++no) + AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation]) + AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation]) + AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation]) +@@ -258,7 +298,7 @@ esac + + if test x"$use_tests" = x"yes"; then + SECP_OPENSSL_CHECK +- if test x"$has_openssl_ec" == x"yes"; then ++ if test x"$has_openssl_ec" = x"yes"; then + AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available]) + SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS" + SECP_TEST_LIBS="$CRYPTO_LIBS" +@@ -281,9 +321,11 @@ if test x"$use_endomorphism" = x"yes"; then + AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization]) + fi + ++AC_MSG_NOTICE([Using assembly optimizations: $set_asm]) + AC_MSG_NOTICE([Using field implementation: $set_field]) + AC_MSG_NOTICE([Using bignum implementation: $set_bignum]) + AC_MSG_NOTICE([Using scalar implementation: $set_scalar]) ++AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism]) + + AC_CONFIG_HEADERS([src/libsecp256k1-config.h]) + AC_CONFIG_FILES([Makefile libsecp256k1.pc]) +@@ -291,7 +333,6 @@ AC_SUBST(SECP_INCLUDES) + AC_SUBST(SECP_LIBS) + AC_SUBST(SECP_TEST_LIBS) + AC_SUBST(SECP_TEST_INCLUDES) +-AM_CONDITIONAL([USE_ASM], [test x"$set_field" == x"64bit_asm"]) + AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"]) + AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" != x"no"]) + +diff --git a/src/field_5x52_impl.h b/src/field_5x52_impl.h +index 63176d6..a045db3 100644 +--- a/src/field_5x52_impl.h ++++ b/src/field_5x52_impl.h +@@ -16,12 +16,10 @@ + #include "num.h" + #include "field.h" + +-#if defined(USE_FIELD_5X52_ASM) ++#if defined(USE_ASM_X86_64) + #include "field_5x52_asm_impl.h" +-#elif defined(USE_FIELD_5X52_INT128) +-#include "field_5x52_int128_impl.h" + #else +-#error "Please select field_5x52 implementation" ++#include "field_5x52_int128_impl.h" + #endif + + /** Implements arithmetic modulo FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F, |