Remove support for libcrypto w/out ECC.

Since 2010, we have supported building against an OpenSSL that did not
have any ECC support, since at the time many systems still shipped with
OpenSSL versions prior to ECC being added.  We no longer support OpenSSL
versions that old, and while it's possible to build a modern libcrypto
without ECC, doing so seems very uncommon.

Having OPENSSL_HAS_ECC sprinkled throughout the code increases the
cost of syncing changes and is a maintenance burden, so this has now
outlived its usefulness and is being removed.  It is still possible to
build --without-openssl on such systems if required.

This includes a few whitespace and header order changes to bring
Portable back into sync with OpenBSD in those places, and removes the
corresponding test.

ok djm@
This commit is contained in:
Darren Tucker committed 2026-07-31 21:41:10 +10:00
1 parent 15d1832b5e
commit e416edf1b2
39 files changed
+112 -346

No files matched your search

-4
View File
@@ -156,10 +156,6 @@ for TARGET in $TARGETS; do
tcmalloc)
PACKAGES="$PACKAGES libgoogle-perftools-dev"
;;
openssl-noec)
INSTALL_OPENSSL=OpenSSL_1_1_1k
SSLCONFOPTS="no-ec"
;;
openssl-*)
INSTALL_OPENSSL=$(echo ${TARGET} | cut -f2 -d-)
case ${INSTALL_OPENSSL} in
-1
View File
@@ -86,7 +86,6 @@ jobs:
- { target: ubuntu-latest, config: libressl-4.2.0 }
- { target: ubuntu-latest, config: libressl-4.3.2 }
- { target: ubuntu-latest, config: openssl-master }
- { target: ubuntu-latest, config: openssl-noec }
- { target: ubuntu-latest, config: openssl-1.1.1 }
- { target: ubuntu-latest, config: openssl-1.1.1t }
- { target: ubuntu-latest, config: openssl-1.1.1w }
+1 -3
View File
@@ -3365,11 +3365,9 @@ if test "x$openssl" = "xyes" ; then
if test x$enable_nistp256 = x1 || test x$enable_nistp384 = x1 || \
test x$enable_nistp521 = x1; then
AC_DEFINE(OPENSSL_HAS_ECC, [1], [OpenSSL has ECC])
AC_CHECK_FUNCS([EC_KEY_METHOD_new])
openssl_ecc=yes
else
openssl_ecc=no
AC_MSG_ERROR([libcrypto does not have required ECC support])
fi
if test x$enable_nistp256 = x1; then
AC_DEFINE([OPENSSL_HAS_NISTP256], [1],
+4 -6
View File
@@ -58,10 +58,9 @@ static const struct kexalg kexalgs[] = {
{ KEX_DH16_SHA512, KEX_DH_GRP16_SHA512, 0, SSH_DIGEST_SHA512, KEX_NOT_PQ },
{ KEX_DH18_SHA512, KEX_DH_GRP18_SHA512, 0, SSH_DIGEST_SHA512, KEX_NOT_PQ },
{ KEX_DHGEX_SHA1, KEX_DH_GEX_SHA1, 0, SSH_DIGEST_SHA1, KEX_NOT_PQ },
#ifdef HAVE_EVP_SHA256
# ifdef HAVE_EVP_SHA256
{ KEX_DHGEX_SHA256, KEX_DH_GEX_SHA256, 0, SSH_DIGEST_SHA256, KEX_NOT_PQ },
#endif /* HAVE_EVP_SHA256 */
#ifdef OPENSSL_HAS_ECC
# endif /* HAVE_EVP_SHA256 */
{ KEX_ECDH_SHA2_NISTP256, KEX_ECDH_SHA2,
NID_X9_62_prime256v1, SSH_DIGEST_SHA256, KEX_NOT_PQ },
{ KEX_ECDH_SHA2_NISTP384, KEX_ECDH_SHA2, NID_secp384r1,
@@ -72,11 +71,10 @@ static const struct kexalg kexalgs[] = {
# endif /* OPENSSL_HAS_NISTP521 */
{ KEX_MLKEM768NISTP256_SHA256, KEX_KEM_MLKEM768ECDH_SHA256,
NID_X9_62_prime256v1, SSH_DIGEST_SHA256, KEX_IS_PQ },
# ifdef NID_brainpoolP256r1
# ifdef NID_brainpoolP256r1
{ KEX_MLKEM768BRAINPOOLP256R1_SHA256, KEX_KEM_MLKEM768ECDH_SHA256,
NID_brainpoolP256r1, SSH_DIGEST_SHA256, KEX_IS_PQ },
# endif /* NID_brainpoolP256r1 */
#endif /* OPENSSL_HAS_ECC */
# endif /* NID_brainpoolP256r1 */
#endif /* WITH_OPENSSL */
#if defined(HAVE_EVP_SHA256) || !defined(WITH_OPENSSL)
{ KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256, KEX_NOT_PQ },
-2
View File
@@ -732,9 +732,7 @@ kex_free(struct kex *kex)
#ifdef WITH_OPENSSL
DH_free(kex->dh);
#ifdef OPENSSL_HAS_ECC
EC_KEY_free(kex->ec_client_key);
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
for (mode = 0; mode < MODE_MAX; mode++) {
kex_free_newkeys(kex->newkeys[mode]);
+9 -22
View File
@@ -30,22 +30,15 @@
#include "crypto_api.h"
#ifdef WITH_OPENSSL
# include <openssl/bn.h>
# include <openssl/dh.h>
# include <openssl/ecdsa.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# else /* OPENSSL_HAS_ECC */
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
# endif /* OPENSSL_HAS_ECC */
#else /* WITH_OPENSSL */
# define DH void
# define BIGNUM void
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
#include <openssl/bn.h>
#include <openssl/dh.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#else /* OPENSSL */
#define BIGNUM void
#define DH void
#define EC_KEY void
#define EC_GROUP void
#endif /* WITH_OPENSSL */
#define KEX_COOKIE_LEN 16
@@ -299,10 +292,4 @@ int kexc25519_shared_key_ext(const u_char key[CURVE25519_SIZE],
void dump_digest(const char *, const u_char *, int);
#endif
#if !defined(WITH_OPENSSL) || !defined(OPENSSL_HAS_ECC)
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
#endif
#endif
+2 -29
View File
@@ -26,7 +26,7 @@
#include "includes.h"
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#if defined(WITH_OPENSSL)
#include <sys/types.h>
@@ -204,31 +204,4 @@ kex_ecdh_dec(struct kex *kex, const struct sshbuf *server_blob,
return r;
}
#else
#include "ssherr.h"
struct kex;
struct sshbuf;
struct sshkey;
int
kex_ecdh_keypair(struct kex *kex)
{
return SSH_ERR_SIGN_ALG_UNSUPPORTED;
}
int
kex_ecdh_enc(struct kex *kex, const struct sshbuf *client_blob,
struct sshbuf **server_blobp, struct sshbuf **shared_secretp)
{
return SSH_ERR_SIGN_ALG_UNSUPPORTED;
}
int
kex_ecdh_dec(struct kex *kex, const struct sshbuf *server_blob,
struct sshbuf **shared_secretp)
{
return SSH_ERR_SIGN_ALG_UNSUPPORTED;
}
#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */
#endif /* WITH_OPENSSL */
+1 -3
View File
@@ -1874,11 +1874,9 @@ monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor)
kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
# ifdef OPENSSL_HAS_ECC
kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
kex->kex[KEX_KEM_MLKEM768ECDH_SHA256] = kex_gen_server;
# endif
#endif /* WITH_OPENSSL */
#endif
kex->kex[KEX_C25519_SHA256] = kex_gen_server;
kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_server;
-2
View File
@@ -25,9 +25,7 @@
#include <openssl/evp.h>
#include <openssl/bn.h>
#include <openssl/rsa.h>
#ifdef OPENSSL_HAS_ECC
#include <openssl/ecdsa.h>
#endif
#include <openssl/dh.h>
int ssh_compatible_openssl(long, long);
+1 -7
View File
@@ -67,9 +67,7 @@
#ifdef WITH_OPENSSL
# include <openssl/bn.h>
# include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# endif
# include <openssl/ec.h>
#endif
#ifdef WITH_ZLIB
@@ -2746,7 +2744,6 @@ sshpkt_put_stringb(struct ssh *ssh, const struct sshbuf *v)
}
#ifdef WITH_OPENSSL
#ifdef OPENSSL_HAS_ECC
int
sshpkt_put_ec(struct ssh *ssh, const EC_POINT *v, const EC_GROUP *g)
{
@@ -2758,7 +2755,6 @@ sshpkt_put_ec_pkey(struct ssh *ssh, EVP_PKEY *pkey)
{
return sshbuf_put_ec_pkey(ssh->state->outgoing_packet, pkey);
}
#endif /* OPENSSL_HAS_ECC */
int
sshpkt_put_bignum2(struct ssh *ssh, const BIGNUM *v)
@@ -2824,13 +2820,11 @@ sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp)
}
#ifdef WITH_OPENSSL
#ifdef OPENSSL_HAS_ECC
int
sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g)
{
return sshbuf_get_ec(ssh->state->incoming_packet, v, g);
}
#endif /* OPENSSL_HAS_ECC */
int
sshpkt_get_bignum2(struct ssh *ssh, BIGNUM **valp)
+9 -27
View File
@@ -23,21 +23,15 @@
#include <termios.h>
#ifdef WITH_OPENSSL
# include <openssl/bn.h>
# include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# else /* OPENSSL_HAS_ECC */
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
# endif /* OPENSSL_HAS_ECC */
#else /* WITH_OPENSSL */
# define BIGNUM void
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
# define EVP_PKEY void
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
#else /* OPENSSL */
#define BIGNUM void
#define EC_GROUP void
#define EC_POINT void
#define EVP_PKEY void
#endif /* WITH_OPENSSL */
struct kex;
@@ -213,16 +207,4 @@ void sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l);
const u_char *sshpkt_ptr(struct ssh *, size_t *lenp);
char *connection_info_message(struct ssh *ssh);
#if !defined(WITH_OPENSSL)
# undef BIGNUM
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
# undef EVP_PKEY
#elif !defined(OPENSSL_HAS_ECC)
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
#endif
#endif /* PACKET_H */
-2
View File
@@ -2917,11 +2917,9 @@ fill_default_options(Options * options)
}
if (options->num_identity_files == 0) {
add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_RSA, 0);
#ifdef OPENSSL_HAS_ECC
add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_ECDSA, 0);
add_identity_file(options, "~/",
_PATH_SSH_CLIENT_ID_ECDSA_SK, 0);
#endif
add_identity_file(options, "~/",
_PATH_SSH_CLIENT_ID_ED25519, 0);
add_identity_file(options, "~/",
+2 -2
View File
@@ -89,7 +89,7 @@ sk_api_version(void)
static int
pack_key_ecdsa(struct sk_enroll_response *response)
{
#ifdef OPENSSL_HAS_ECC
#ifdef WITH_OPENSSL
EC_KEY *key = NULL;
const EC_GROUP *g;
const EC_POINT *q;
@@ -309,7 +309,7 @@ sig_ecdsa(const uint8_t *message, size_t message_len,
const uint8_t *key_handle, size_t key_handle_len,
struct sk_sign_response *response)
{
#ifdef OPENSSL_HAS_ECC
#ifdef WITH_OPENSSL
ECDSA_SIG *sig = NULL;
const BIGNUM *sig_r, *sig_s;
int ret = -1;
+1 -1
View File
@@ -138,9 +138,9 @@ tests(void)
TEST_DONE();
#endif
}
void
benchmarks(void)
{
printf("no benchmarks\n");
}
+1
View File
@@ -11,6 +11,7 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
#include "../test_helper/test_helper.h"
@@ -87,11 +87,6 @@ check(struct hostkey_foreach_line *l, void *_ctx)
expected_keytype = (parse_key || expected->no_parse_keytype < 0) ?
expected->l.keytype : expected->no_parse_keytype;
#ifndef OPENSSL_HAS_ECC
if (expected->l.keytype == KEY_ECDSA ||
expected->no_parse_keytype == KEY_ECDSA)
skip = 1;
#endif /* OPENSSL_HAS_ECC */
#ifndef WITH_OPENSSL
if (expected->l.keytype == KEY_RSA ||
expected->no_parse_keytype == KEY_RSA ||
@@ -147,10 +142,6 @@ prepare_expected(struct expected *expected, size_t n)
for (i = 0; i < n; i++) {
if (expected[i].key_file == NULL)
continue;
#ifndef OPENSSL_HAS_ECC
if (expected[i].l.keytype == KEY_ECDSA)
continue;
#endif /* OPENSSL_HAS_ECC */
#ifndef WITH_OPENSSL
switch (expected[i].l.keytype) {
case KEY_RSA:
+3 -9
View File
@@ -158,14 +158,12 @@ do_kex_with_key(char *kex, char *cipher, char *mac,
#ifdef WITH_OPENSSL
server2->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server;
server2->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server;
server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
server2->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server;
server2->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server;
server2->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
#ifdef OPENSSL_HAS_ECC
server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
server2->kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
server2->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
server2->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
@@ -183,9 +181,9 @@ do_kex_with_key(char *kex, char *cipher, char *mac,
TEST_DONE();
TEST_START("cleanup");
sshkey_free(public);
if (key == NULL)
sshkey_free(private);
sshkey_free(public);
ssh_free(client);
ssh_free(server);
ssh_free(server2);
@@ -219,9 +217,7 @@ do_kex(char *kex)
#ifdef WITH_OPENSSL
do_kex_with_key(kex, NULL, NULL, NULL, KEY_RSA, 2048);
# ifdef OPENSSL_HAS_ECC
do_kex_with_key(kex, NULL, NULL, NULL, KEY_ECDSA, 256);
# endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
do_kex_with_key(kex, NULL, NULL, NULL, KEY_ED25519, 256);
}
@@ -231,11 +227,9 @@ kex_tests(void)
{
do_kex("curve25519-sha256");
#ifdef WITH_OPENSSL
#ifdef OPENSSL_HAS_ECC
do_kex("ecdh-sha2-nistp256");
do_kex("ecdh-sha2-nistp384");
do_kex("ecdh-sha2-nistp521");
#endif /* OPENSSL_HAS_ECC */
do_kex("diffie-hellman-group-exchange-sha256");
do_kex("diffie-hellman-group-exchange-sha1");
do_kex("diffie-hellman-group14-sha1");
@@ -16,10 +16,8 @@
#include <string.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/objects.h>
#ifdef OPENSSL_HAS_NISTP256
# include <openssl/ec.h>
#endif
#include "openbsd-compat/openssl-compat.h"
#include "../test_helper/test_helper.h"
@@ -45,7 +43,7 @@ sshbuf_getput_crypto_tests(void)
0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x10, 0x00,
0x7f, 0xff, 0x11
};
#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
#if defined(OPENSSL_HAS_NISTP256)
const u_char *d;
size_t s;
BIGNUM *bn_x, *bn_y;
@@ -221,7 +219,7 @@ sshbuf_getput_crypto_tests(void)
sshbuf_free(p1);
TEST_DONE();
#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
#if defined(OPENSSL_HAS_NISTP256)
TEST_START("sshbuf_put_ec");
eck = EC_KEY_new_by_curve_name(ec256_nid);
ASSERT_PTR_NE(eck, NULL);
@@ -33,9 +33,9 @@ attempt_parse_blob(u_char *blob, size_t len)
struct sshbuf *p1;
#ifdef WITH_OPENSSL
BIGNUM *bn;
#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
#if defined(OPENSSL_HAS_NISTP256)
EC_KEY *eck;
#endif /* defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256) */
#endif /* defined(OPENSSL_HAS_NISTP256) */
#endif /* WITH_OPENSSL */
u_char *s;
size_t l;
@@ -59,12 +59,12 @@ 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_ECC) && defined(OPENSSL_HAS_NISTP256)
# 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_ECC) && defined(OPENSSL_HAS_NISTP256) */
# endif /* defined(OPENSSL_HAS_NISTP256) */
#endif /* WITH_OPENSSL */
sshbuf_free(p1);
}
+3 -6
View File
@@ -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 "../test_helper/test_helper.h"
@@ -162,7 +160,7 @@ sshkey_file_tests(void)
sshkey_free(k1);
#ifdef OPENSSL_HAS_ECC
TEST_START("parse ECDSA from private");
buf = load_file("ecdsa_1");
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
@@ -262,7 +260,6 @@ sshkey_file_tests(void)
TEST_DONE();
sshkey_free(k1);
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("parse Ed25519 from private");
@@ -396,7 +393,7 @@ sshkey_file_tests(void)
sshkey_free(k1);
#ifdef ENABLE_SK
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#if defined(WITH_OPENSSL)
TEST_START("parse ECDSA-SK from private");
buf = load_file("ecdsa_sk1");
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
+4 -9
View File
@@ -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
#endif
#include "../test_helper/test_helper.h"
@@ -160,7 +158,7 @@ sshkey_fuzz_tests(void)
fuzz_cleanup(fuzz);
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("fuzz ECDSA private");
buf = load_file("ecdsa_1");
fuzz = fuzz_begin(FUZZ_BASE64, sshbuf_mutable_ptr(buf),
@@ -204,7 +202,6 @@ sshkey_fuzz_tests(void)
sshbuf_free(fuzzed);
fuzz_cleanup(fuzz);
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("fuzz Ed25519 private");
@@ -270,7 +267,7 @@ sshkey_fuzz_tests(void)
sshkey_free(k1);
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("fuzz ECDSA public");
buf = load_file("ecdsa_1");
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
@@ -284,7 +281,6 @@ sshkey_fuzz_tests(void)
public_fuzz(k1);
sshkey_free(k1);
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("fuzz Ed25519 public");
@@ -341,7 +337,7 @@ sshkey_fuzz_tests(void)
sshkey_free(k1);
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("fuzz ECDSA sig");
buf = load_file("ecdsa_1");
ASSERT_INT_EQ(sshkey_parse_private_fileblob(buf, "", &k1, NULL), 0);
@@ -349,7 +345,6 @@ sshkey_fuzz_tests(void)
sig_fuzz(k1, NULL);
sshkey_free(k1);
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("fuzz Ed25519 sig");
+7 -32
View File
@@ -15,10 +15,8 @@
#ifdef WITH_OPENSSL
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/rsa.h>
#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
# include <openssl/ec.h>
#endif
#endif
#include "../test_helper/test_helper.h"
@@ -240,13 +238,8 @@ get_private(const char *n)
void
sshkey_tests(void)
{
struct sshkey *k1 = NULL, *k2 = NULL, *k3 = NULL, *kf = NULL;
#ifdef WITH_OPENSSL
struct sshkey *k4 = NULL, *kr = NULL, *kd = NULL;
#ifdef OPENSSL_HAS_ECC
struct sshkey *ke = NULL;
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
struct sshkey *k1 = NULL, *k2 = NULL, *k3 = NULL, *k4 = NULL;
struct sshkey *kr = NULL, *kd = NULL, *ke = NULL, *kf = NULL;
struct sshbuf *b = NULL;
TEST_START("new invalid");
@@ -270,8 +263,6 @@ sshkey_tests(void)
k1 = NULL;
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("new/free KEY_ECDSA");
k1 = sshkey_new(KEY_ECDSA);
ASSERT_PTR_NE(k1, NULL);
@@ -279,7 +270,7 @@ sshkey_tests(void)
sshkey_free(k1);
k1 = NULL;
TEST_DONE();
#endif
#endif /* WITH_OPENSSL */
TEST_START("new/free KEY_ED25519");
k1 = sshkey_new(KEY_ED25519);
@@ -300,6 +291,7 @@ sshkey_tests(void)
k1 = NULL;
TEST_DONE();
#ifdef WITH_OPENSSL
TEST_START("generate KEY_RSA too small modulus");
ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 128, &k1),
SSH_ERR_KEY_LENGTH);
@@ -313,7 +305,6 @@ sshkey_tests(void)
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("generate KEY_ECDSA wrong bits");
ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 42, &k1),
SSH_ERR_KEY_LENGTH);
@@ -321,7 +312,6 @@ sshkey_tests(void)
sshkey_free(k1);
k1 = NULL;
TEST_DONE();
#endif
TEST_START("generate KEY_RSA");
ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 767, &kr),
@@ -336,7 +326,6 @@ sshkey_tests(void)
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("generate KEY_ECDSA");
ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 256, &ke), 0);
ASSERT_PTR_NE(ke, NULL);
@@ -346,7 +335,6 @@ sshkey_tests(void)
ASSERT_PTR_NE(EC_KEY_get0_private_key(EVP_PKEY_get0_EC_KEY(ke->pkey)),
NULL);
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("generate KEY_ED25519");
@@ -386,7 +374,6 @@ sshkey_tests(void)
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("demote KEY_ECDSA");
ASSERT_INT_EQ(sshkey_from_private(ke, &k1), 0);
ASSERT_PTR_NE(k1, NULL);
@@ -405,7 +392,6 @@ sshkey_tests(void)
sshkey_free(k1);
k1 = NULL;
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("demote KEY_ED25519");
@@ -443,28 +429,21 @@ sshkey_tests(void)
#ifdef WITH_OPENSSL
TEST_START("equal mismatched key types");
ASSERT_INT_EQ(sshkey_equal(kd, kr), 0);
#ifdef OPENSSL_HAS_ECC
ASSERT_INT_EQ(sshkey_equal(kd, ke), 0);
ASSERT_INT_EQ(sshkey_equal(kr, ke), 0);
ASSERT_INT_EQ(sshkey_equal(ke, kf), 0);
#endif /* OPENSSL_HAS_ECC */
ASSERT_INT_EQ(sshkey_equal(kd, kf), 0);
TEST_DONE();
#endif /* WITH_OPENSSL */
TEST_START("equal different keys");
#ifdef WITH_OPENSSL
ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 1024, &k1), 0);
ASSERT_INT_EQ(sshkey_equal(kr, k1), 0);
sshkey_free(k1);
k1 = NULL;
#ifdef OPENSSL_HAS_ECC
ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 256, &k1), 0);
ASSERT_INT_EQ(sshkey_equal(ke, k1), 0);
sshkey_free(k1);
k1 = NULL;
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
ASSERT_INT_EQ(sshkey_generate(KEY_ED25519, 256, &k1), 0);
ASSERT_INT_EQ(sshkey_equal(kf, k1), 0);
sshkey_free(k1);
@@ -476,15 +455,13 @@ sshkey_tests(void)
sshkey_free(k2);
k1 = k2 = NULL;
TEST_DONE();
#endif /* WITH_OPENSSL */
#ifdef WITH_OPENSSL
sshkey_free(kr);
sshkey_free(kd);
#ifdef OPENSSL_HAS_ECC
sshkey_free(ke);
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
sshkey_free(kf);
kr = kd = ke = kf = NULL;
TEST_START("certify key");
ASSERT_INT_EQ(sshkey_load_public(test_data_file("ed25519_1.pub"),
@@ -611,7 +588,6 @@ sshkey_tests(void)
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("sign and verify ECDSA");
k1 = get_private("ecdsa_1");
ASSERT_INT_EQ(sshkey_load_public(test_data_file("ecdsa_2.pub"), &k2,
@@ -621,7 +597,6 @@ sshkey_tests(void)
sshkey_free(k2);
k1 = k2 = NULL;
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
TEST_START("sign and verify ED25519");
+3 -5
View File
@@ -103,11 +103,9 @@ tests(void)
TEST_DONE();
#ifdef OPENSSL_HAS_ECC
TEST_START("check ECDSA signature");
check_sig("ecdsa.pub", "ecdsa.sig", msg, namespace);
TEST_DONE();
#endif
#endif
TEST_START("check ED25519 signature");
@@ -119,7 +117,7 @@ tests(void)
TEST_DONE();
#ifdef ENABLE_SK
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#if defined(WITH_OPENSSL)
TEST_START("check ECDSA-SK signature");
check_sig("ecdsa_sk.pub", "ecdsa_sk.sig", msg, namespace);
TEST_DONE();
@@ -129,11 +127,11 @@ tests(void)
check_sig("ed25519_sk.pub", "ed25519_sk.sig", msg, namespace);
TEST_DONE();
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#if defined(WITH_OPENSSL)
TEST_START("check ECDSA-SK webauthn signature");
check_sig("ecdsa_sk_webauthn.pub", "ecdsa_sk_webauthn.sig",
msg, namespace);
TEST_DONE();
TEST_DONE();
#endif
#endif /* ENABLE_SK */
-2
View File
@@ -313,10 +313,8 @@ fill_default_server_options(ServerOptions *options)
/* fill default hostkeys */
servconf_add_hostkey("[default]", 0, options,
_PATH_HOST_RSA_KEY_FILE, 0);
#ifdef OPENSSL_HAS_ECC
servconf_add_hostkey("[default]", 0, options,
_PATH_HOST_ECDSA_KEY_FILE, 0);
#endif
servconf_add_hostkey("[default]", 0, options,
_PATH_HOST_ED25519_KEY_FILE, 0);
servconf_add_hostkey("[default]", 0, options,
-9
View File
@@ -31,15 +31,6 @@
#include <sha2.h>
#endif
/*
* Almost every use of OpenSSL in this file is for ECDSA-NISTP256.
* This is strictly a larger hammer than necessary, but it reduces changes
* with upstream.
*/
#ifndef OPENSSL_HAS_ECC
# undef WITH_OPENSSL
#endif
#ifdef WITH_OPENSSL
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
-2
View File
@@ -80,10 +80,8 @@ extern char *__progname;
static char *default_files[] = {
#ifdef WITH_OPENSSL
_PATH_SSH_CLIENT_ID_RSA,
#ifdef OPENSSL_HAS_ECC
_PATH_SSH_CLIENT_ID_ECDSA,
_PATH_SSH_CLIENT_ID_ECDSA_SK,
#endif
#endif /* WITH_OPENSSL */
_PATH_SSH_CLIENT_ID_ED25519,
_PATH_SSH_CLIENT_ID_ED25519_SK,
+2 -17
View File
@@ -32,35 +32,21 @@
#include <sys/types.h>
#ifdef WITH_OPENSSL
#include "openbsd-compat/openssl-compat.h"
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
#endif
#include <string.h>
#include <stdio.h> /* needed for DEBUG_SK only */
#include "openbsd-compat/openssl-compat.h"
#include "sshbuf.h"
#include "ssherr.h"
#include "digest.h"
#define SSHKEY_INTERNAL
#include "sshkey.h"
#ifndef OPENSSL_HAS_ECC
/* ARGSUSED */
int
ssh_ecdsa_sk_verify(const struct sshkey *key,
const u_char *signature, size_t signaturelen,
const u_char *data, size_t datalen, u_int compat,
struct sshkey_sig_details **detailsp)
{
return SSH_ERR_FEATURE_UNSUPPORTED;
}
#else /* OPENSSL_HAS_ECC */
/* Reuse some ECDSA internals */
extern struct sshkey_impl_funcs sshkey_ecdsa_funcs;
@@ -502,5 +488,4 @@ const struct sshkey_impl sshkey_ecdsa_sk_webauthn_cert_impl = {
/* .keybits = */ 256,
/* .funcs = */ &sshkey_ecdsa_sk_funcs,
};
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
+2 -2
View File
@@ -26,7 +26,7 @@
#include "includes.h"
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#if defined(WITH_OPENSSL)
#include "openbsd-compat/openssl-compat.h"
#include <sys/types.h>
@@ -582,4 +582,4 @@ const struct sshkey_impl sshkey_ecdsa_nistp521_cert_impl = {
};
#endif
#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
-12
View File
@@ -251,7 +251,6 @@ ask_filename(struct passwd *pw, const char *prompt)
name = _PATH_SSH_CLIENT_ID_ED25519;
else {
switch (sshkey_type_from_shortname(key_type_name)) {
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA_CERT:
case KEY_ECDSA:
name = _PATH_SSH_CLIENT_ID_ECDSA;
@@ -260,7 +259,6 @@ ask_filename(struct passwd *pw, const char *prompt)
case KEY_ECDSA_SK:
name = _PATH_SSH_CLIENT_ID_ECDSA_SK;
break;
#endif
case KEY_RSA_CERT:
case KEY_RSA:
name = _PATH_SSH_CLIENT_ID_RSA;
@@ -364,13 +362,11 @@ do_convert_to_pkcs8(struct sshkey *k)
EVP_PKEY_get0_RSA(k->pkey)))
fatal("PEM_write_RSA_PUBKEY failed");
break;
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
if (!PEM_write_EC_PUBKEY(stdout,
EVP_PKEY_get0_EC_KEY(k->pkey)))
fatal("PEM_write_EC_PUBKEY failed");
break;
#endif
default:
fatal_f("unsupported key type %s", sshkey_type(k));
}
@@ -385,13 +381,11 @@ do_convert_to_pem(struct sshkey *k)
EVP_PKEY_get0_RSA(k->pkey)))
fatal("PEM_write_RSAPublicKey failed");
break;
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
if (!PEM_write_EC_PUBKEY(stdout,
EVP_PKEY_get0_EC_KEY(k->pkey)))
fatal("PEM_write_EC_PUBKEY failed");
break;
#endif
default:
fatal_f("unsupported key type %s", sshkey_type(k));
}
@@ -673,7 +667,6 @@ do_convert_from_pkcs8(struct sshkey **k, int *private)
(*k)->pkey = pubkey;
pubkey = NULL;
break;
#ifdef OPENSSL_HAS_ECC
case EVP_PKEY_EC:
if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
fatal("sshkey_new failed");
@@ -683,7 +676,6 @@ do_convert_from_pkcs8(struct sshkey **k, int *private)
(*k)->pkey = pubkey;
pubkey = NULL;
break;
#endif
default:
fatal_f("unsupported pubkey type %d",
EVP_PKEY_base_id(pubkey));
@@ -747,13 +739,11 @@ do_convert_from(struct passwd *pw)
fprintf(stdout, "\n");
} else {
switch (k->type) {
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
ok = PEM_write_ECPrivateKey(stdout,
EVP_PKEY_get0_EC_KEY(k->pkey), NULL, NULL, 0,
NULL, NULL);
break;
#endif
case KEY_RSA:
ok = PEM_write_RSAPrivateKey(stdout,
EVP_PKEY_get0_RSA(k->pkey), NULL, NULL, 0,
@@ -1014,9 +1004,7 @@ do_gen_all_hostkeys(struct passwd *pw)
} key_types[] = {
#ifdef WITH_OPENSSL
{ "rsa", "RSA" ,_PATH_HOST_RSA_KEY_FILE },
#ifdef OPENSSL_HAS_ECC
{ "ecdsa", "ECDSA",_PATH_HOST_ECDSA_KEY_FILE },
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
{ "ed25519", "ED25519",_PATH_HOST_ED25519_KEY_FILE },
#ifdef USE_MLDSA
-2
View File
@@ -290,9 +290,7 @@ keygrab_ssh2(con *c)
c->c_ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_client;
c->c_ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client;
c->c_ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client;
# ifdef OPENSSL_HAS_ECC
c->c_ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_client;
# endif
#endif
c->c_ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
c->c_ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client;
+4 -22
View File
@@ -86,7 +86,7 @@ TAILQ_HEAD(, pkcs11_key) pkcs11_keys; /* XXX a tree would be better */
int pkcs11_interactive = 0;
#if defined(OPENSSL_HAS_ECC) || defined(OPENSSL_HAS_ED25519)
#ifdef WITH_OPENSSL
static void
ossl_error(const char *msg)
{
@@ -622,7 +622,6 @@ pkcs11_sign_rsa(struct sshkey *key,
return ret;
}
#ifdef OPENSSL_HAS_ECC
static int
pkcs11_sign_ecdsa(struct sshkey *key,
u_char **sigp, size_t *lenp,
@@ -706,7 +705,6 @@ pkcs11_sign_ecdsa(struct sshkey *key,
free(sig);
return ret;
}
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
static int
@@ -849,7 +847,6 @@ pkcs11_key_included(struct sshkey ***keysp, int *nkeys, struct sshkey *key)
}
#ifdef WITH_OPENSSL
#ifdef OPENSSL_HAS_ECC
static struct sshkey *
pkcs11_fetch_ecdsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
CK_OBJECT_HANDLE *obj)
@@ -983,7 +980,6 @@ fail:
return (key);
}
#endif /* OPENSSL_HAS_ECC */
static struct sshkey *
pkcs11_fetch_rsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
@@ -1208,18 +1204,14 @@ pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
X509_NAME *x509_name = NULL;
EVP_PKEY *evp;
RSA *rsa = NULL;
EC_KEY *ec = NULL;
struct sshkey *key = NULL;
int i, success = -1;
int r, i, nid, success = -1;
const u_char *cp;
char *subject = NULL;
#ifdef OPENSSL_HAS_ED25519
size_t len;
#endif /* OPENSSL_HAS_ED25519 */
#ifdef OPENSSL_HAS_ECC
EC_KEY *ec = NULL;
int r, nid;
#endif
*keyp = NULL;
*labelp = NULL;
@@ -1314,7 +1306,6 @@ pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
goto out;
/* success */
success = 0;
#ifdef OPENSSL_HAS_ECC
} else if (EVP_PKEY_base_id(evp) == EVP_PKEY_EC) {
if (EVP_PKEY_get0_EC_KEY(evp) == NULL) {
error("invalid x509; no ec key");
@@ -1353,7 +1344,6 @@ pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
goto out;
/* success */
success = 0;
#endif /* OPENSSL_HAS_ECC */
#ifdef OPENSSL_HAS_ED25519
} else if (EVP_PKEY_base_id(evp) == EVP_PKEY_ED25519) {
if ((key = sshkey_new(KEY_UNSPEC)) == NULL ||
@@ -1385,9 +1375,7 @@ pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
free(cert_attr[i].pValue);
X509_free(x509);
RSA_free(rsa);
#ifdef OPENSSL_HAS_ECC
EC_KEY_free(ec);
#endif /* OPENSSL_HAS_ECC */
if (success != 0 || key == NULL) {
sshkey_free(key);
free(subject);
@@ -1593,11 +1581,9 @@ pkcs11_fetch_keys(struct pkcs11_provider *p, CK_ULONG slotidx,
case CKK_RSA:
key = pkcs11_fetch_rsa_pubkey(p, slotidx, &obj);
break;
#ifdef OPENSSL_HAS_ECC
case CKK_ECDSA:
key = pkcs11_fetch_ecdsa_pubkey(p, slotidx, &obj);
break;
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
case CKK_EC_EDWARDS:
key = pkcs11_fetch_ed25519_pubkey(p, slotidx, &obj);
@@ -2071,17 +2057,15 @@ pkcs11_sign(struct sshkey *key,
const char *sk_pin, u_int compat)
{
switch (key->type) {
#ifdef WITH_OPENSSL
case KEY_RSA:
case KEY_RSA_CERT:
#ifdef WITH_OPENSSL
return pkcs11_sign_rsa(key, sigp, lenp, data, datalen,
alg, sk_provider, sk_pin, compat);
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
case KEY_ECDSA_CERT:
return pkcs11_sign_ecdsa(key, sigp, lenp, data, datalen,
alg, sk_provider, sk_pin, compat);
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
case KEY_ED25519:
case KEY_ED25519_CERT:
@@ -2246,11 +2230,9 @@ pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx,
case CKK_RSA:
k = pkcs11_fetch_rsa_pubkey(p, slotidx, &obj);
break;
#ifdef OPENSSL_HAS_ECC
case CKK_ECDSA:
k = pkcs11_fetch_ecdsa_pubkey(p, slotidx, &obj);
break;
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
case CKK_EC_EDWARDS:
k = pkcs11_fetch_ed25519_pubkey(p, slotidx, &obj);
+2 -11
View File
@@ -27,11 +27,11 @@
#include <string.h>
#include <stdio.h>
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#ifdef WITH_OPENSSL
#include <openssl/objects.h>
#include <openssl/ec.h>
#include <openssl/evp.h>
#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
#include "log.h"
#include "misc.h"
@@ -44,15 +44,6 @@
#include "sk-api.h"
#include "crypto_api.h"
/*
* Almost every use of OpenSSL in this file is for ECDSA-NISTP256.
* This is strictly a larger hammer than necessary, but it reduces changes
* with upstream.
*/
#ifndef OPENSSL_HAS_ECC
# undef WITH_OPENSSL
#endif
struct sshsk_provider {
char *path;
void *dlhandle;
-4
View File
@@ -128,9 +128,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params)
ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
# ifdef OPENSSL_HAS_ECC
ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
# endif
#endif /* WITH_OPENSSL */
ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
@@ -148,9 +146,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params)
ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_client;
ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client;
ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client;
# ifdef OPENSSL_HAS_ECC
ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_client;
# endif
#endif /* WITH_OPENSSL */
ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client;
+1 -7
View File
@@ -24,9 +24,7 @@
#ifdef WITH_OPENSSL
#include <openssl/bn.h>
#ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
#endif /* OPENSSL_HAS_ECC */
#include <openssl/ec.h>
#include "ssherr.h"
#define SSHBUF_INTERNAL
@@ -55,7 +53,6 @@ sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM **valp)
return 0;
}
#ifdef OPENSSL_HAS_ECC
static int
get_ec(const u_char *d, size_t len, EC_POINT *v, const EC_GROUP *g)
{
@@ -125,7 +122,6 @@ sshbuf_get_eckey(struct sshbuf *buf, EC_KEY *v)
}
return 0;
}
#endif /* OPENSSL_HAS_ECC */
int
sshbuf_put_bignum2(struct sshbuf *buf, const BIGNUM *v)
@@ -149,7 +145,6 @@ sshbuf_put_bignum2(struct sshbuf *buf, const BIGNUM *v)
return 0;
}
#ifdef OPENSSL_HAS_ECC
int
sshbuf_put_ec(struct sshbuf *buf, const EC_POINT *v, const EC_GROUP *g)
{
@@ -186,5 +181,4 @@ sshbuf_put_ec_pkey(struct sshbuf *buf, EVP_PKEY *pkey)
return SSH_ERR_LIBCRYPTO_ERROR;
return sshbuf_put_eckey(buf, ec);
}
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
+12 -11
View File
@@ -24,11 +24,16 @@
#include <stdint.h>
#ifdef WITH_OPENSSL
# include <openssl/bn.h>
# include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# endif /* OPENSSL_HAS_ECC */
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
#else /* OPENSSL */
#define BIGNUM void
#define EC_KEY void
#define EC_GROUP void
#define EC_POINT void
#define EVP_PKEY void
#endif /* WITH_OPENSSL */
#define SSHBUF_SIZE_MAX 0x8000000 /* Hard maximum size */
@@ -234,20 +239,16 @@ int sshbuf_peek_string_direct(const struct sshbuf *buf, const u_char **valp,
* Functions to extract or store SSH wire encoded bignums and elliptic
* curve points.
*/
int sshbuf_put_bignum2_bytes(struct sshbuf *buf, const void *v, size_t len);
int sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM **valp);
int sshbuf_get_bignum2_bytes_direct(struct sshbuf *buf,
const u_char **valp, size_t *lenp);
#ifdef WITH_OPENSSL
int sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM **valp);
int sshbuf_put_bignum2(struct sshbuf *buf, const BIGNUM *v);
# ifdef OPENSSL_HAS_ECC
int sshbuf_put_bignum2_bytes(struct sshbuf *buf, const void *v, size_t len);
int sshbuf_get_ec(struct sshbuf *buf, EC_POINT *v, const EC_GROUP *g);
int sshbuf_get_eckey(struct sshbuf *buf, EC_KEY *v);
int sshbuf_put_ec(struct sshbuf *buf, const EC_POINT *v, const EC_GROUP *g);
int sshbuf_put_eckey(struct sshbuf *buf, const EC_KEY *v);
int sshbuf_put_ec_pkey(struct sshbuf *buf, EVP_PKEY *pkey);
# endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
/* Functions to extract or store various non-SSH wire encoded values */
int sshbuf_get_nulterminated_string(struct sshbuf *buf, size_t maxlen,
-2
View File
@@ -270,9 +270,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr_storage *hostaddr,
ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_client;
ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client;
ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client;
# ifdef OPENSSL_HAS_ECC
ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_client;
# endif
#endif
ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client;
+1 -3
View File
@@ -806,11 +806,9 @@ do_ssh2_kex(struct ssh *ssh)
kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
# ifdef OPENSSL_HAS_ECC
kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
kex->kex[KEX_KEM_MLKEM768ECDH_SHA256] = kex_gen_server;
# endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
#endif
kex->kex[KEX_C25519_SHA256] = kex_gen_server;
kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_server;
+14 -24
View File
@@ -90,27 +90,25 @@ extern const struct sshkey_impl sshkey_ed25519_impl;
extern const struct sshkey_impl sshkey_ed25519_cert_impl;
extern const struct sshkey_impl sshkey_ed25519_sk_impl;
extern const struct sshkey_impl sshkey_ed25519_sk_cert_impl;
#ifdef USE_MLDSA
# ifdef USE_MLDSA
extern const struct sshkey_impl sshkey_mldsa44_ed25519_impl;
extern const struct sshkey_impl sshkey_mldsa44_ed25519_cert_impl;
#endif /* USE_MLDSA */
# endif /* USE_MLDSA */
#ifdef WITH_OPENSSL
# ifdef OPENSSL_HAS_ECC
# ifdef ENABLE_SK
# ifdef ENABLE_SK
extern const struct sshkey_impl sshkey_ecdsa_sk_impl;
extern const struct sshkey_impl sshkey_ecdsa_sk_cert_impl;
extern const struct sshkey_impl sshkey_ecdsa_sk_webauthn_impl;
extern const struct sshkey_impl sshkey_ecdsa_sk_webauthn_cert_impl;
# endif /* ENABLE_SK */
# endif /* ENABLE_SK */
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
# 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 */
# endif /* OPENSSL_HAS_ECC */
# 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;
@@ -131,22 +129,20 @@ const struct sshkey_impl * const keyimpls[] = {
&sshkey_mldsa44_ed25519_cert_impl,
#endif /* USE_MLDSA */
#ifdef WITH_OPENSSL
# ifdef OPENSSL_HAS_ECC
&sshkey_ecdsa_nistp256_impl,
&sshkey_ecdsa_nistp256_cert_impl,
&sshkey_ecdsa_nistp384_impl,
&sshkey_ecdsa_nistp384_cert_impl,
# ifdef OPENSSL_HAS_NISTP521
# ifdef OPENSSL_HAS_NISTP521
&sshkey_ecdsa_nistp521_impl,
&sshkey_ecdsa_nistp521_cert_impl,
# endif /* OPENSSL_HAS_NISTP521 */
# ifdef ENABLE_SK
# endif /* OPENSSL_HAS_NISTP521 */
# ifdef ENABLE_SK
&sshkey_ecdsa_sk_impl,
&sshkey_ecdsa_sk_cert_impl,
&sshkey_ecdsa_sk_webauthn_impl,
&sshkey_ecdsa_sk_webauthn_cert_impl,
# endif /* ENABLE_SK */
# endif /* OPENSSL_HAS_ECC */
# endif /* ENABLE_SK */
&sshkey_rsa_impl,
&sshkey_rsa_cert_impl,
&sshkey_rsa_sha256_impl,
@@ -1482,7 +1478,7 @@ sshkey_check_rsa_length(const struct sshkey *k, int min_size)
return 0;
}
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#ifdef WITH_OPENSSL
int
sshkey_ecdsa_key_to_nid(const EC_KEY *k)
{
@@ -1501,7 +1497,7 @@ sshkey_ecdsa_pkey_to_nid(EVP_PKEY *pkey)
{
return sshkey_ecdsa_key_to_nid(EVP_PKEY_get0_EC_KEY(pkey));
}
#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */
#endif /* WITH_OPENSSL */
int
sshkey_generate(int type, u_int bits, struct sshkey **keyp)
@@ -2689,7 +2685,7 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
return r;
}
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#ifdef WITH_OPENSSL
int
sshkey_ec_validate_public(const EC_GROUP *group, const EC_POINT *public)
{
@@ -2826,7 +2822,7 @@ sshkey_dump_ec_key(const EC_KEY *key)
BN_print_fp(stderr, EC_KEY_get0_private_key(key));
fputs("\n", stderr);
}
#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
static int
sshkey_private_to_blob2(struct sshkey *prv, struct sshbuf *blob,
@@ -3313,7 +3309,6 @@ sshkey_private_to_blob_pem_pkcs8(struct sshkey *key, struct sshbuf *buf,
goto out;
switch (key->type) {
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
if (format == SSHKEY_PRIVATE_PEM) {
success = PEM_write_bio_ECPrivateKey(bio,
@@ -3325,7 +3320,6 @@ sshkey_private_to_blob_pem_pkcs8(struct sshkey *key, struct sshbuf *buf,
success = 1;
}
break;
#endif
case KEY_RSA:
if (format == SSHKEY_PRIVATE_PEM) {
success = PEM_write_bio_RSAPrivateKey(bio,
@@ -3570,7 +3564,6 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
prv->pkey = pk;
if ((r = sshkey_check_rsa_length(prv, 0)) != 0)
goto out;
#ifdef OPENSSL_HAS_ECC
} else if (EVP_PKEY_base_id(pk) == EVP_PKEY_EC &&
(type == KEY_UNSPEC || type == KEY_ECDSA)) {
if ((prv = sshkey_new(KEY_UNSPEC)) == NULL) {
@@ -3596,7 +3589,6 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
if (prv != NULL && prv->pkey != NULL)
sshkey_dump_ec_key(EVP_PKEY_get0_EC_KEY(prv->pkey));
#endif
#endif /* OPENSSL_HAS_ECC */
#ifdef OPENSSL_HAS_ED25519
} else if (EVP_PKEY_base_id(pk) == EVP_PKEY_ED25519 &&
(type == KEY_UNSPEC || type == KEY_ED25519)) {
@@ -3647,9 +3639,7 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
BIO_free(bio);
EVP_PKEY_free(pk);
RSA_free(rsa);
#ifdef OPENSSL_HAS_ECC
EC_KEY_free(ecdsa);
#endif
sshkey_free(prv);
return r;
}
+16 -26
View File
@@ -30,23 +30,17 @@
#ifdef WITH_OPENSSL
#include <openssl/rsa.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# include <openssl/ecdsa.h>
# else /* OPENSSL_HAS_ECC */
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
# endif /* OPENSSL_HAS_ECC */
#define SSH_OPENSSL_VERSION OpenSSL_version(OPENSSL_VERSION)
#else /* WITH_OPENSSL */
# define BIGNUM void
# define RSA void
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
# define EVP_PKEY void
#else /* OPENSSL */
#define BIGNUM void
#define RSA void
#define EC_KEY void
#define EC_GROUP void
#define EC_POINT void
#define EVP_PKEY void
#define SSH_OPENSSL_VERSION "without OpenSSL"
#endif /* WITH_OPENSSL */
@@ -334,16 +328,12 @@ int check_rsa_length(const RSA *rsa); /* XXX remove */
#endif
#endif
#if !defined(WITH_OPENSSL)
# undef RSA
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
# undef EVP_PKEY
#elif !defined(OPENSSL_HAS_ECC)
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
#endif
#ifndef WITH_OPENSSL
#undef RSA
#undef EC_KEY
#undef EC_GROUP
#undef EC_POINT
#undef EVP_PKEY
#endif /* WITH_OPENSSL */
#endif /* SSHKEY_H */