On Tue, May 18, 2021 at 11:45:33AM +0200, Giovanni Bechis wrote:
> Hi,
> upcoming Apache httpd doesn't build with LibreSSL because it uses
> EVP_PKEY_X25519 constants that are not defined on LibreSSL.
> The following diff works, is it better to add EVP_PKEY_X constants
> to evp.h instead ?
There is more code that would need to be added to libcrypto to make this
work. We will likely have to add EVP_PKEY_X25519 at some point, but
libcrypto is not ready. There are currently no plans for X448 support.
With your patch the call to EVP_PKEY_CTX_new_id() will fail. I would
suggest disabling X25519 and X448 support as follows:
Index: patches/patch-modules_md_md_crypt_c
===================================================================
RCS file: patches/patch-modules_md_md_crypt_c
diff -N patches/patch-modules_md_md_crypt_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-modules_md_md_crypt_c 18 May 2021 11:14:02 -0000
@@ -0,0 +1,34 @@
+$OpenBSD$
+
+LibreSSL does not expose X25519 via EVP and has no X448 support.
+
+Index: modules/md/md_crypt.c
+--- modules/md/md_crypt.c.orig
++++ modules/md/md_crypt.c
+@@ -797,7 +797,7 @@ static apr_status_t gen_ec(md_pkey_t **ppkey, apr_pool
+ curve_nid = NID_X9_62_prime192v1;
+ }
+ #endif
+-#ifdef NID_X25519
++#if defined(NID_X25519) && !defined(LIBRESSL_VERSION_NUMBER)
+ if (NID_undef == curve_nid && !apr_strnatcasecmp("X25519", curve)) {
+ curve_nid = NID_X25519;
+ }
+@@ -814,7 +814,7 @@ static apr_status_t gen_ec(md_pkey_t **ppkey, apr_pool
+ *ppkey = make_pkey(p);
+ switch (curve_nid) {
+
+-#ifdef NID_X25519
++#if defined(NID_X25519) && !defined(LIBRESSL_VERSION_NUMBER)
+ case NID_X25519:
+ /* no parameters */
+ if (NULL == (ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL))
+@@ -828,7 +828,7 @@ static apr_status_t gen_ec(md_pkey_t **ppkey, apr_pool
+ break;
+ #endif
+
+-#ifdef NID_X448
++#if defined(NID_X448) && !defined(LIBRESSL_VERSION_NUMBER)
+ case NID_X448:
+ /* no parameters */
+ if (NULL == (ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X448, NULL))