CPPFLAGS_TEMP="$CPPFLAGS"
CPPFLAGS="$CRYPTO_CPPFLAGS $CPPFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/obj_mac.h>]],[[
- EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
- ECDSA_sign(0, NULL, 0, NULL, NULL, eckey);
+ # if OPENSSL_VERSION_NUMBER < 0x10100000L
+ void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) {(void)sig->r; (void)sig->s;}
+ # endif
+
+ unsigned int zero = 0;
+ const unsigned char *zero_ptr = (unsigned char*)&zero;
+ EC_KEY_free(EC_KEY_new_by_curve_name(NID_secp256k1));
+ EC_KEY *eckey = EC_KEY_new();
+ EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp256k1);
+ EC_KEY_set_group(eckey, group);
+ ECDSA_sign(0, NULL, 0, NULL, &zero, eckey);
ECDSA_verify(0, NULL, 0, NULL, 0, eckey);
+ o2i_ECPublicKey(&eckey, &zero_ptr, 0);
+ d2i_ECPrivateKey(&eckey, &zero_ptr, 0);
+ EC_KEY_check_key(eckey);
EC_KEY_free(eckey);
+ EC_GROUP_free(group);
ECDSA_SIG *sig_openssl;
sig_openssl = ECDSA_SIG_new();
+ d2i_ECDSA_SIG(&sig_openssl, &zero_ptr, 0);
+ i2d_ECDSA_SIG(sig_openssl, NULL);
+ ECDSA_SIG_get0(sig_openssl, NULL, NULL);
ECDSA_SIG_free(sig_openssl);
+ const BIGNUM *bignum = BN_value_one();
+ BN_is_negative(bignum);
+ BN_num_bits(bignum);
+ if (sizeof(zero) >= BN_num_bytes(bignum)) {
+ BN_bn2bin(bignum, (unsigned char*)&zero);
+ }
]])],[has_openssl_ec=yes],[has_openssl_ec=no])
AC_MSG_RESULT([$has_openssl_ec])
CPPFLAGS="$CPPFLAGS_TEMP"
if test x"$use_tests" = x"yes"; then
SECP_OPENSSL_CHECK
- if test x"$has_openssl_ec" = x"yes"; then
- if test x"$enable_openssl_tests" != x"no"; then
+ if test x"$enable_openssl_tests" != x"no" && test x"$has_openssl_ec" = x"yes"; then
+ enable_openssl_tests=yes
AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS $CRYPTO_CPPFLAGS"
SECP_TEST_LIBS="$CRYPTO_LIBS"
SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
;;
esac
- fi
else
if test x"$enable_openssl_tests" = x"yes"; then
AC_MSG_ERROR([OpenSSL tests requested but OpenSSL with EC support is not available])
fi
+ enable_openssl_tests=no
fi
else
if test x"$enable_openssl_tests" = x"yes"; then
AC_MSG_ERROR([OpenSSL tests requested but tests are not enabled])
fi
+ enable_openssl_tests=no
fi
if test x"$set_bignum" = x"gmp"; then
echo " with ecmult precomp = $set_precomp"
echo " with external callbacks = $use_external_default_callbacks"
echo " with benchmarks = $use_benchmark"
+echo " with tests = $use_tests"
+echo " with openssl tests = $enable_openssl_tests"
echo " with coverage = $enable_coverage"
echo " module ecdh = $enable_module_ecdh"
echo " module recovery = $enable_module_recovery"
struct secp256k1_strauss_point_state* ps;
};
-static void secp256k1_ecmult_strauss_wnaf(const secp256k1_ecmult_context *ctx, const struct secp256k1_strauss_state *state, secp256k1_gej *r, int num, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) {
+static void secp256k1_ecmult_strauss_wnaf(const secp256k1_ecmult_context *ctx, const struct secp256k1_strauss_state *state, secp256k1_gej *r, size_t num, const secp256k1_gej *a, const secp256k1_scalar *na, const secp256k1_scalar *ng) {
secp256k1_ge tmpa;
secp256k1_fe Z;
/* Splitted G factors. */
int bits_ng_128 = 0;
int i;
int bits = 0;
- int np;
- int no = 0;
+ size_t np;
+ size_t no = 0;
for (np = 0; np < num; ++np) {
if (secp256k1_scalar_is_zero(&na[np]) || secp256k1_gej_is_infinity(&a[np])) {