File 3272-crypto-Add-128-and-192-variants-of-SLH-DSA.patch of Package erlang

From d1123c60aa1ff6b351df77c8d19596fae63e19b7 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Thu, 9 Oct 2025 17:27:55 +0200
Subject: [PATCH 2/2] crypto: Add 128 and 192 variants of SLH-DSA

---
 lib/crypto/c_src/pkey.c          | 40 ++++++++++++++++++++++++++++++++
 lib/crypto/src/crypto.erl        | 12 +++++++++-
 lib/crypto/test/crypto_SUITE.erl | 15 ++++++++++--
 3 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/lib/crypto/c_src/pkey.c b/lib/crypto/c_src/pkey.c
index 6646a69f3e..046ef76e14 100644
--- a/lib/crypto/c_src/pkey.c
+++ b/lib/crypto/c_src/pkey.c
@@ -109,6 +109,46 @@ struct pkey_type_t pkey_types[] = {
     },
 #endif
 #ifdef HAVE_SLH_DSA
+    {
+        .name.atom_str = "slh_dsa_shake_128s",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHAKE_128S,
+        .sign.alg_str = "SLH-DSA-SHAKE-128s"
+    },
+    {
+        .name.atom_str = "slh_dsa_shake_128f",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHAKE_128F,
+        .sign.alg_str = "SLH-DSA-SHAKE-128f"
+    },
+    {
+        .name.atom_str = "slh_dsa_sha2_128s",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHA2_128S,
+        .sign.alg_str = "SLH-DSA-SHA2-128s"
+    },
+    {
+        .name.atom_str = "slh_dsa_sha2_128f",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHA2_128F,
+        .sign.alg_str = "SLH-DSA-SHA2-128f"
+    },
+    {
+        .name.atom_str = "slh_dsa_shake_192s",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHAKE_192S,
+        .sign.alg_str = "SLH-DSA-SHAKE-192s"
+    },
+    {
+        .name.atom_str = "slh_dsa_shake_192f",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHAKE_192F,
+        .sign.alg_str = "SLH-DSA-SHAKE-192f"
+    },
+    {
+        .name.atom_str = "slh_dsa_sha2_192s",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHA2_192S,
+        .sign.alg_str = "SLH-DSA-SHA2-192s"
+    },
+    {
+        .name.atom_str = "slh_dsa_sha2_192f",
+        .evp_pkey_id = EVP_PKEY_SLH_DSA_SHA2_192F,
+        .sign.alg_str = "SLH-DSA-SHA2-192f"
+    },
     {
         .name.atom_str = "slh_dsa_shake_256s",
         .evp_pkey_id = EVP_PKEY_SLH_DSA_SHAKE_256S,
diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl
index 53e392b412..334ecda840 100644
--- a/lib/crypto/src/crypto.erl
+++ b/lib/crypto/src/crypto.erl
@@ -2443,7 +2443,9 @@ rand_seed_nif(_Seed) -> ?nif_stub.
 -type mldsa() :: mldsa44 | mldsa65 | mldsa87.
 -type mldsa_private() :: {seed | expandedkey, binary()}.
 -type mldsa_public() :: binary().
--type slh_dsa() :: slh_dsa_shake_256s | slh_dsa_shake_256f | slh_dsa_sha2_256s | slh_dsa_sha2_256f.
+-type slh_dsa() :: slh_dsa_shake_128s | slh_dsa_shake_128f | slh_dsa_sha2_128s | slh_dsa_sha2_128f
+                 | slh_dsa_shake_192s | slh_dsa_shake_192f | slh_dsa_sha2_192s | slh_dsa_sha2_192f
+                 | slh_dsa_shake_256s | slh_dsa_shake_256f | slh_dsa_sha2_256s | slh_dsa_sha2_256f.
 -type slh_dsa_private() :: binary().
 -type slh_dsa_public() :: binary().
 
@@ -2551,6 +2553,14 @@ pkey_sign_nif(_Algorithm, _Type, _Digest, _Key, _Options) -> ?nif_stub.
 
 pkey_sign_heavy_nif(_Algorithm, _Type, _Digest, _Key, _Options) -> ?nif_stub.
 
+is_heavy(slh_dsa_shake_128s) -> true;
+is_heavy(slh_dsa_shake_128f) -> true;
+is_heavy(slh_dsa_sha2_128s) -> true;
+is_heavy(slh_dsa_sha2_128f) -> true;
+is_heavy(slh_dsa_shake_192s) -> true;
+is_heavy(slh_dsa_shake_192f) -> true;
+is_heavy(slh_dsa_sha2_192s) -> true;
+is_heavy(slh_dsa_sha2_192f) -> true;
 is_heavy(slh_dsa_shake_256s) -> true;
 is_heavy(slh_dsa_shake_256f) -> true;
 is_heavy(slh_dsa_sha2_256s) -> true;
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl
index cd348278f9..c94cd2ff26 100644
--- a/lib/crypto/test/crypto_SUITE.erl
+++ b/lib/crypto/test/crypto_SUITE.erl
@@ -1283,7 +1283,7 @@ sign_verify_oqs(_Config) ->
                  true = lists:member(Alg, Supported),
                  sign_verify_oqs_do(Alg)
              end
-             || Alg <- mldsa_sign_ciphers()],
+             || Alg <- quantum_sign_ciphers()],
             ok
     end.
 
@@ -1301,8 +1301,19 @@ sign_verify_oqs_do(Alg) ->
     ok.
 
 %% Supported by OpenSSL 3.5
-mldsa_sign_ciphers() ->
+quantum_sign_ciphers() ->
     [mldsa44, mldsa65, mldsa87,
+
+     slh_dsa_shake_128s,
+     slh_dsa_shake_128f,
+     slh_dsa_sha2_128s,
+     slh_dsa_sha2_128f,
+
+     slh_dsa_shake_192s,
+     slh_dsa_shake_192f,
+     slh_dsa_sha2_192s,
+     slh_dsa_sha2_192f,
+
      slh_dsa_shake_256s,
      slh_dsa_shake_256f,
      slh_dsa_sha2_256s,
-- 
2.51.0

openSUSE Build Service is sponsored by