]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
test for compiler feature needed for ML-KEM
authorDamien Miller <djm@mindrot.org>
Mon, 9 Sep 2024 06:06:21 +0000 (16:06 +1000)
committerDamien Miller <djm@mindrot.org>
Mon, 9 Sep 2024 06:06:21 +0000 (16:06 +1000)
The ML-KEM implementation we uses need the compiler to support
C99-style named struct initialisers (e.g foo = {.bar = 1}). We
still support (barely) building OpenSSH with older compilers, so
add a configure test for this.

configure.ac
defines.h
kex-names.c
kexmlkem768x25519.c
regress/unittests/kex/test_kex.c

index 591d5a3880c59c23074fe58f2eb580ff4d71938c..9b8b1ded361ab89fc47b6e341db3bca4a225cdd4 100644 (file)
@@ -353,6 +353,19 @@ AC_COMPILE_IFELSE(
     [ AC_MSG_RESULT([no]) ]
 )
 
+AC_MSG_CHECKING([if compiler supports named struct initialisers])
+AC_COMPILE_IFELSE(
+    [AC_LANG_PROGRAM([[#include <stdlib.h>]],
+    [[ struct foo { int bar; int baz; };
+       struct foo blerg = {.bar = 1, .baz = 2};
+       exit((blerg.bar == 1 && blerg.baz == 2) ? 0 : 1);
+    ]])],
+    [ AC_MSG_RESULT([yes])
+      AC_DEFINE(NAMED_STRUCT_INITIALISERS, [1],
+        [compiler supports named struct initializers]) ],
+    [ AC_MSG_RESULT([no]) ]
+)
+
 AC_MSG_CHECKING([if compiler accepts variable declarations after code])
 AC_COMPILE_IFELSE(
     [AC_LANG_PROGRAM([[#include <stdlib.h>]],
index 279e509aae22e4e2824a15c9be4dac7f89a5be5c..d1f6ce33e974ae5a9fc4c37b33f0991cfaf65172 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -942,4 +942,8 @@ struct winsize {
 #if defined(VARIABLE_LENGTH_ARRAYS) && defined(VARIABLE_DECLARATION_AFTER_CODE)
 # define USE_SNTRUP761X25519 1
 #endif
+/* The ML-KEM768 imlementation similarly uses named struct initialisers */
+#ifdef NAMED_STRUCT_INITIALISERS
+# define USE_MLKEM768X25519    1
+#endif
 #endif /* _DEFINES_H */
index e5d513d5ec1211faeec42431931442f3c767068c..ec840c1f9dbc2261d923a6f8d50f9743707582e4 100644 (file)
@@ -82,8 +82,10 @@ static const struct kexalg kexalgs[] = {
        { KEX_SNTRUP761X25519_SHA512_OLD, KEX_KEM_SNTRUP761X25519_SHA512, 0,
            SSH_DIGEST_SHA512 },
 #endif
+#ifdef USE_MLKEM768X25519
        { KEX_MLKEM768X25519_SHA256, KEX_KEM_MLKEM768X25519_SHA256, 0,
            SSH_DIGEST_SHA256 },
+#endif
 #endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */
        { NULL, 0, -1, -1},
 };
index 1339fcf51866b6ffbc7c15f9bb7353ce724b6007..fa062dd7d2c02ab144b2e4b574c868fd08b01ee4 100644 (file)
@@ -25,6 +25,8 @@
 
 #include "includes.h"
 
+#ifdef USE_MLKEM768X25519
+
 #include <sys/types.h>
 
 #include <stdio.h>
@@ -252,3 +254,4 @@ kex_kem_mlkem768x25519_dec(struct kex *kex,
        sshbuf_free(buf);
        return r;
 }
+#endif /* USE_MLKEM768X25519 */
index 9476ce6869ea6d79bcaf4a8b7468d64a25477c1b..caf8f57f75d6f59d0d1aff2d9d9ecfaf42b3cc2c 100644 (file)
@@ -208,8 +208,10 @@ kex_tests(void)
        do_kex("diffie-hellman-group-exchange-sha1");
        do_kex("diffie-hellman-group14-sha1");
        do_kex("diffie-hellman-group1-sha1");
-# ifdef USE_SNTRUP761X25519
+# ifdef USE_MLKEM768X25519
        do_kex("mlkem768x25519-sha256");
+# endif /* USE_MLKEM768X25519 */
+# ifdef USE_SNTRUP761X25519
        do_kex("sntrup761x25519-sha512@openssh.com");
 # endif /* USE_SNTRUP761X25519 */
 #endif /* WITH_OPENSSL */