[openssh-commits] [openssh] branch master updated: Require NISTP521 in libcrypto.

git+noreply at mindrot.org git+noreply at mindrot.org
Sat Aug 1 12:34:51 AEST 2026


This is an automated email from the git hooks/post-receive script.

dtucker pushed a commit to branch master
in repository openssh.

The following commit(s) were added to refs/heads/master by this push:
     new ec0485632 Require NISTP521 in libcrypto.
ec0485632 is described below

commit ec0485632885e0c533b35e5970e4b583781db83f
Author: Darren Tucker <dtucker at dtucker.net>
AuthorDate: Sat Aug 1 12:10:40 2026 +1000

    Require NISTP521 in libcrypto.
    
    Previously we supported building without NISTP521 in libcrypto since
    some vendors shipped without it, but this now seems uncommon. This
    removes that support, requiring a fully functional libcrypto.
    
    This removes another set of diffs vs upstream and should reduce the
    maintenance burden.  ok djm@
---
 configure.ac                                       | 97 ++--------------------
 kex-names.c                                        |  2 -
 .../unittests/sshbuf/test_sshbuf_getput_crypto.c   | 11 +--
 regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c |  8 +-
 regress/unittests/sshkey/common.c                  |  4 +-
 ssh-ecdsa.c                                        |  6 --
 ssh-keygen.c                                       |  5 --
 sshkey.c                                           | 12 ---
 8 files changed, 11 insertions(+), 134 deletions(-)

diff --git a/configure.ac b/configure.ac
index d1f64cd62..c4fdd5d19 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3300,101 +3300,16 @@ if test "x$openssl" = "xyes" ; then
 	#include <openssl/opensslv.h>
 		]], [[
 		EC_KEY *e = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+		EC_KEY *f = EC_KEY_new_by_curve_name(NID_secp384r1);
+		EC_KEY *g = EC_KEY_new_by_curve_name(NID_secp521r1);
+		/* Also require EC_KEY_METHOD support for ECDSA PKCS#11 */
+		void *h = EC_KEY_METHOD_new(NULL);
 		const EVP_MD *m = EVP_sha256(); /* We need this too */
 		]])],
-		[ AC_MSG_RESULT([yes])
-		  enable_nistp256=1 ],
-		[ AC_MSG_RESULT([no]) ]
-	)
-
-	AC_MSG_CHECKING([whether OpenSSL has NID_secp384r1])
-	AC_LINK_IFELSE(
-		[AC_LANG_PROGRAM([[
-	#include <openssl/ec.h>
-	#include <openssl/ecdh.h>
-	#include <openssl/ecdsa.h>
-	#include <openssl/evp.h>
-	#include <openssl/objects.h>
-	#include <openssl/opensslv.h>
-		]], [[
-		EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp384r1);
-		const EVP_MD *m = EVP_sha384(); /* We need this too */
-		]])],
-		[ AC_MSG_RESULT([yes])
-		  enable_nistp384=1 ],
-		[ AC_MSG_RESULT([no]) ]
-	)
-
-	AC_MSG_CHECKING([whether OpenSSL has NID_secp521r1])
-	AC_LINK_IFELSE(
-		[AC_LANG_PROGRAM([[
-	#include <openssl/ec.h>
-	#include <openssl/ecdh.h>
-	#include <openssl/ecdsa.h>
-	#include <openssl/evp.h>
-	#include <openssl/objects.h>
-	#include <openssl/opensslv.h>
-		]], [[
-		EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp521r1);
-		const EVP_MD *m = EVP_sha512(); /* We need this too */
-		]])],
-		[ AC_MSG_RESULT([yes])
-		  AC_MSG_CHECKING([if OpenSSL's NID_secp521r1 is functional])
-		  AC_RUN_IFELSE(
-			[AC_LANG_PROGRAM([[
-	#include <stdlib.h>
-	#include <openssl/ec.h>
-	#include <openssl/ecdh.h>
-	#include <openssl/ecdsa.h>
-	#include <openssl/evp.h>
-	#include <openssl/objects.h>
-	#include <openssl/opensslv.h>
-			]],[[
-			EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp521r1);
-			const EVP_MD *m = EVP_sha512(); /* We need this too */
-			exit(e == NULL || m == NULL);
-			]])],
-			[ AC_MSG_RESULT([yes])
-			  enable_nistp521=1 ],
-			[ AC_MSG_RESULT([no]) ],
-			[ AC_MSG_WARN([cross-compiling: assuming yes])
-			  enable_nistp521=1 ]
-		  )],
-		AC_MSG_RESULT([no])
+		[ AC_MSG_RESULT([yes]) ],
+		[ AC_MSG_ERROR([libcrypto does not have required ECC support]) ]
 	)
 
-	if test x$enable_nistp256 = x1 || test x$enable_nistp384 = x1 || \
-	    test x$enable_nistp521 = x1; then
-		AC_CHECK_FUNCS([EC_KEY_METHOD_new])
-	else
-		AC_MSG_ERROR([libcrypto does not have required ECC support])
-	fi
-	if test x$enable_nistp256 = x1; then
-		AC_DEFINE([OPENSSL_HAS_NISTP256], [1],
-		    [libcrypto has NID_X9_62_prime256v1])
-	else
-		unsupported_algorithms="$unsupported_algorithms \
-			ecdsa-sha2-nistp256 \
-			ecdh-sha2-nistp256 \
-			ecdsa-sha2-nistp256-cert-v01 at openssh.com"
-	fi
-	if test x$enable_nistp384 = x1; then
-		AC_DEFINE([OPENSSL_HAS_NISTP384], [1], [libcrypto has NID_secp384r1])
-	else
-		unsupported_algorithms="$unsupported_algorithms \
-			ecdsa-sha2-nistp384 \
-			ecdh-sha2-nistp384 \
-			ecdsa-sha2-nistp384-cert-v01 at openssh.com"
-	fi
-	if test x$enable_nistp521 = x1; then
-		AC_DEFINE([OPENSSL_HAS_NISTP521], [1], [libcrypto has NID_secp521r1])
-	else
-		unsupported_algorithms="$unsupported_algorithms \
-			ecdh-sha2-nistp521 \
-			ecdsa-sha2-nistp521 \
-			ecdsa-sha2-nistp521-cert-v01 at openssh.com"
-	fi
-
 	# Check libcrypto ED25519 support
 	AC_CHECK_FUNCS([EVP_PKEY_get_raw_public_key])
 	AC_CHECK_FUNCS([EVP_PKEY_get_raw_private_key])
diff --git a/kex-names.c b/kex-names.c
index f9ba49b7f..7660c2edc 100644
--- a/kex-names.c
+++ b/kex-names.c
@@ -65,10 +65,8 @@ static const struct kexalg kexalgs[] = {
 	    NID_X9_62_prime256v1, SSH_DIGEST_SHA256, KEX_NOT_PQ },
 	{ KEX_ECDH_SHA2_NISTP384, KEX_ECDH_SHA2, NID_secp384r1,
 	    SSH_DIGEST_SHA384, KEX_NOT_PQ },
-# ifdef OPENSSL_HAS_NISTP521
 	{ KEX_ECDH_SHA2_NISTP521, KEX_ECDH_SHA2, NID_secp521r1,
 	    SSH_DIGEST_SHA512, KEX_NOT_PQ },
-# endif /* OPENSSL_HAS_NISTP521 */
 	{ KEX_MLKEM768NISTP256_SHA256, KEX_KEM_MLKEM768ECDH_SHA256,
 	    NID_X9_62_prime256v1, SSH_DIGEST_SHA256, KEX_IS_PQ },
 # ifdef NID_brainpoolP256r1
diff --git a/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c b/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c
index 1ce2041c9..4bd4afa2b 100644
--- a/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c
+++ b/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c
@@ -30,7 +30,9 @@ void
 sshbuf_getput_crypto_tests(void)
 {
 	struct sshbuf *p1;
-	BIGNUM *bn, *bn2;
+	const u_char *d;
+	size_t s;
+	BIGNUM *bn, *bn2, *bn_x, *bn_y;
 	const char *hexbn1 = "0102030405060708090a0b0c0d0e0f10";
 	/* This one has MSB set to test bignum2 encoding negative-avoidance */
 	const char *hexbn2 = "f0e0d0c0b0a0908070605040302010007fff11";
@@ -43,10 +45,6 @@ sshbuf_getput_crypto_tests(void)
 		0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x10, 0x00,
 		0x7f, 0xff, 0x11
 	};
-#if defined(OPENSSL_HAS_NISTP256)
-	const u_char *d;
-	size_t s;
-	BIGNUM *bn_x, *bn_y;
 	int ec256_nid = NID_X9_62_prime256v1;
 	char *ec256_x = "0C828004839D0106AA59575216191357"
 		        "34B451459DADB586677EF9DF55784999";
@@ -65,7 +63,6 @@ sshbuf_getput_crypto_tests(void)
 	};
 	EC_KEY *eck;
 	EC_POINT *ecp;
-#endif
 	int r;
 
 #define MKBN(b, bnn) \
@@ -219,7 +216,6 @@ sshbuf_getput_crypto_tests(void)
 	sshbuf_free(p1);
 	TEST_DONE();
 
-#if defined(OPENSSL_HAS_NISTP256)
 	TEST_START("sshbuf_put_ec");
 	eck = EC_KEY_new_by_curve_name(ec256_nid);
 	ASSERT_PTR_NE(eck, NULL);
@@ -271,7 +267,6 @@ sshbuf_getput_crypto_tests(void)
 	BN_free(bn);
 	BN_free(bn2);
 	TEST_DONE();
-#endif
 }
 
 #endif /* WITH_OPENSSL */
diff --git a/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c b/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c
index 5c53529df..9b95b60bb 100644
--- a/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c
+++ b/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c
@@ -16,9 +16,7 @@
 #ifdef WITH_OPENSSL
 #include <openssl/bn.h>
 #include <openssl/objects.h>
-#ifdef OPENSSL_HAS_NISTP256
-# include <openssl/ec.h>
-#endif
+#include <openssl/ec.h>
 #endif
 
 #include "../test_helper/test_helper.h"
@@ -33,9 +31,7 @@ attempt_parse_blob(u_char *blob, size_t len)
 	struct sshbuf *p1;
 #ifdef WITH_OPENSSL
 	BIGNUM *bn;
-#if defined(OPENSSL_HAS_NISTP256)
 	EC_KEY *eck;
-#endif /* defined(OPENSSL_HAS_NISTP256) */
 #endif /* WITH_OPENSSL */
 	u_char *s;
 	size_t l;
@@ -59,12 +55,10 @@ attempt_parse_blob(u_char *blob, size_t len)
 	bn = NULL;
 	ASSERT_INT_EQ(sshbuf_get_bignum2(p1, &bn), 0);
 	BN_clear_free(bn);
-# if defined(OPENSSL_HAS_NISTP256)
 	eck = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
 	ASSERT_PTR_NE(eck, NULL);
 	ASSERT_INT_EQ(sshbuf_get_eckey(p1, eck), 0);
 	EC_KEY_free(eck);
-# endif /* defined(OPENSSL_HAS_NISTP256) */
 #endif /* WITH_OPENSSL */
 	sshbuf_free(p1);
 }
diff --git a/regress/unittests/sshkey/common.c b/regress/unittests/sshkey/common.c
index fa68e6d5b..32144beab 100644
--- a/regress/unittests/sshkey/common.c
+++ b/regress/unittests/sshkey/common.c
@@ -18,11 +18,9 @@
 
 #ifdef WITH_OPENSSL
 #include <openssl/bn.h>
+#include <openssl/ec.h>
 #include <openssl/rsa.h>
 #include <openssl/objects.h>
-#ifdef OPENSSL_HAS_NISTP256
-# include <openssl/ec.h>
-#endif /* OPENSSL_HAS_NISTP256 */
 #endif /* WITH_OPENSSL */
 
 #include "openbsd-compat/openssl-compat.h"
diff --git a/ssh-ecdsa.c b/ssh-ecdsa.c
index 488db9c2a..54a626e3f 100644
--- a/ssh-ecdsa.c
+++ b/ssh-ecdsa.c
@@ -49,9 +49,7 @@ sshkey_ecdsa_fixup_group(EVP_PKEY *k)
 	int nids[] = {
 		NID_X9_62_prime256v1,
 		NID_secp384r1,
-#ifdef OPENSSL_HAS_NISTP521
 		NID_secp521r1,
-#endif
 		-1
 	};
 	int nid = -1;
@@ -106,10 +104,8 @@ ssh_ecdsa_size(const struct sshkey *key)
 		return 256;
 	case NID_secp384r1:
 		return 384;
-#ifdef OPENSSL_HAS_NISTP521
 	case NID_secp521r1:
 		return 521;
-#endif
 	default:
 		return 0;
 	}
@@ -556,7 +552,6 @@ const struct sshkey_impl sshkey_ecdsa_nistp384_cert_impl = {
 	/* .funcs = */		&sshkey_ecdsa_funcs,
 };
 
-#ifdef OPENSSL_HAS_NISTP521
 const struct sshkey_impl sshkey_ecdsa_nistp521_impl = {
 	/* .name = */		"ecdsa-sha2-nistp521",
 	/* .shortname = */	"ECDSA",
@@ -580,6 +575,5 @@ const struct sshkey_impl sshkey_ecdsa_nistp521_cert_impl = {
 	/* .keybits = */	0,
 	/* .funcs = */		&sshkey_ecdsa_funcs,
 };
-#endif
 
 #endif /* WITH_OPENSSL */
diff --git a/ssh-keygen.c b/ssh-keygen.c
index fef27300e..e3a12bf39 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -206,13 +206,8 @@ type_bits_valid(int type, const char *name, uint32_t *bitsp)
 		break;
 	case KEY_ECDSA:
 		if (sshkey_ecdsa_bits_to_nid(*bitsp) == -1)
-#ifdef OPENSSL_HAS_NISTP521
 			fatal("Invalid ECDSA key length: valid lengths are "
 			    "256, 384 or 521 bits");
-#else
-			fatal("Invalid ECDSA key length: valid lengths are "
-			    "256 or 384 bits");
-#endif
 	}
 #endif
 }
diff --git a/sshkey.c b/sshkey.c
index 41a06dc34..a590529a0 100644
--- a/sshkey.c
+++ b/sshkey.c
@@ -105,10 +105,8 @@ extern const struct sshkey_impl sshkey_ecdsa_nistp256_impl;
 extern const struct sshkey_impl sshkey_ecdsa_nistp256_cert_impl;
 extern const struct sshkey_impl sshkey_ecdsa_nistp384_impl;
 extern const struct sshkey_impl sshkey_ecdsa_nistp384_cert_impl;
-# ifdef OPENSSL_HAS_NISTP521
 extern const struct sshkey_impl sshkey_ecdsa_nistp521_impl;
 extern const struct sshkey_impl sshkey_ecdsa_nistp521_cert_impl;
-# endif /* OPENSSL_HAS_NISTP521 */
 extern const struct sshkey_impl sshkey_rsa_impl;
 extern const struct sshkey_impl sshkey_rsa_cert_impl;
 extern const struct sshkey_impl sshkey_rsa_sha256_impl;
@@ -133,10 +131,8 @@ const struct sshkey_impl * const keyimpls[] = {
 	&sshkey_ecdsa_nistp256_cert_impl,
 	&sshkey_ecdsa_nistp384_impl,
 	&sshkey_ecdsa_nistp384_cert_impl,
-# ifdef OPENSSL_HAS_NISTP521
 	&sshkey_ecdsa_nistp521_impl,
 	&sshkey_ecdsa_nistp521_cert_impl,
-# endif /* OPENSSL_HAS_NISTP521 */
 # ifdef ENABLE_SK
 	&sshkey_ecdsa_sk_impl,
 	&sshkey_ecdsa_sk_cert_impl,
@@ -575,10 +571,8 @@ sshkey_curve_name_to_nid(const char *name)
 		return NID_X9_62_prime256v1;
 	else if (strcmp(name, "nistp384") == 0)
 		return NID_secp384r1;
-# ifdef OPENSSL_HAS_NISTP521
 	else if (strcmp(name, "nistp521") == 0)
 		return NID_secp521r1;
-# endif /* OPENSSL_HAS_NISTP521 */
 	else
 		return -1;
 }
@@ -591,10 +585,8 @@ sshkey_curve_nid_to_bits(int nid)
 		return 256;
 	case NID_secp384r1:
 		return 384;
-# ifdef OPENSSL_HAS_NISTP521
 	case NID_secp521r1:
 		return 521;
-# endif /* OPENSSL_HAS_NISTP521 */
 	default:
 		return 0;
 	}
@@ -608,10 +600,8 @@ sshkey_ecdsa_bits_to_nid(int bits)
 		return NID_X9_62_prime256v1;
 	case 384:
 		return NID_secp384r1;
-# ifdef OPENSSL_HAS_NISTP521
 	case 521:
 		return NID_secp521r1;
-# endif /* OPENSSL_HAS_NISTP521 */
 	default:
 		return -1;
 	}
@@ -625,10 +615,8 @@ sshkey_curve_nid_to_name(int nid)
 		return "nistp256";
 	case NID_secp384r1:
 		return "nistp384";
-# ifdef OPENSSL_HAS_NISTP521
 	case NID_secp521r1:
 		return "nistp521";
-# endif /* OPENSSL_HAS_NISTP521 */
 	default:
 		return NULL;
 	}

-- 
To stop receiving notification emails like this one, please contact
djm at mindrot.org.


More information about the openssh-commits mailing list