Codebase list getdns / ab49db8
Tighten Nettle version checking, and fix build issue with Nettle >= 3.4. Nettle 3.4 introduced accessor functions for obtaining nettle_secp_256r1 and nettle_secp_384r1. Use them if present. Fixes #458 Jim Hague 4 years ago
3 changed file(s) with 18 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
364364 # handle digital signature algorithms. GnuTLS uses Nettle internally.
365365 if (USE_GNUTLS)
366366 find_package(GnuTLS "3.5.0" REQUIRED)
367 find_package(Nettle REQUIRED)
367 find_package(Nettle "3.2" REQUIRED)
368368
369369 set(tlsdir "gnutls")
370370 set(HAVE_NETTLE 1)
371371
372372 set(CMAKE_REQUIRED_INCLUDES ${NETTLE_INCLUDE_DIR})
373 set(CMAKE_REQUIRED_LIBRARIES ${NETTLE_LIBRARIES})
373374 check_include_file(nettle/dsa-compat.h HAVE_NETTLE_DSA_COMPAT_H)
374375 check_include_file(nettle/eddsa.h HAVE_NETTLE_EDDSA_H)
376
377 # API change in Nettle 3.4.
378 check_symbol_exists(nettle_get_secp_256r1 "nettle/ecc-curve.h" HAVE_NETTLE_GET_SECP_256R1)
379 check_symbol_exists(nettle_get_secp_384r1 "nettle/ecc-curve.h" HAVE_NETTLE_GET_SECP_384R1)
375380 endif()
376381
377382 # Sort out what signature algorithms can be used.
389394
390395 if (USE_ED448)
391396 if (USE_GNUTLS)
392 message(WARNING "ED448 enabled and Nettle does not support it. Disabled.")
397 message(WARNING "ED448 enabled and Nettle support not implemented. Disabled.")
393398 unset(USE_ED448)
394399 elseif (NOT HAVE_SSL_ED448)
395400 message(WARNING "ED448 enabled and OpenSSL does not support it. Disabled.")
7777 #cmakedefine HAVE_EVP_MD_CTX_NEW 1
7878
7979 #cmakedefine HAVE_HMAC_CTX_NEW 1
80
81 #cmakedefine HAVE_NETTLE_GET_SECP_256R1 1
82 #cmakedefine HAVE_NETTLE_GET_SECP_384R1 1
8083
8184 #cmakedefine HAVE_TLS_CLIENT_METHOD 1
8285
17251725 {
17261726 uint8_t digest[SHA256_DIGEST_SIZE];
17271727 mpz_t x, y;
1728 #ifdef HAVE_NETTLE_GET_SECP_256R1
1729 nettle_ecc_point_init(&pubkey, nettle_get_secp_256r1());
1730 #else
17281731 nettle_ecc_point_init(&pubkey, &nettle_secp_256r1);
1732 #endif
17291733 nettle_mpz_init_set_str_256_u(x, SHA256_DIGEST_SIZE, key);
17301734 nettle_mpz_init_set_str_256_u(y, SHA256_DIGEST_SIZE, key+SHA256_DIGEST_SIZE);
17311735 nettle_mpz_set_str_256_u(signature.r, SHA256_DIGEST_SIZE, sigblock);
17421746 {
17431747 uint8_t digest[SHA384_DIGEST_SIZE];
17441748 mpz_t x, y;
1749 #ifdef HAVE_NETTLE_GET_SECP_384R1
1750 nettle_ecc_point_init(&pubkey, nettle_get_secp_384r1());
1751 #else
17451752 nettle_ecc_point_init(&pubkey, &nettle_secp_384r1);
1753 #endif
17461754 nettle_mpz_init_set_str_256_u(x, SHA384_DIGEST_SIZE, key);
17471755 nettle_mpz_init_set_str_256_u(y, SHA384_DIGEST_SIZE, key+SHA384_DIGEST_SIZE);
17481756 nettle_mpz_set_str_256_u(signature.r, SHA384_DIGEST_SIZE, sigblock);