]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
mgf1: Support of RSA PSS with SHA3 hash
authorAndreas Steffen <andreas.steffen@strongswan.org>
Thu, 5 Jan 2023 14:10:32 +0000 (15:10 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 22 Mar 2023 10:37:06 +0000 (11:37 +0100)
src/libstrongswan/crypto/xofs/xof.c
src/libstrongswan/crypto/xofs/xof.h
src/libstrongswan/plugins/gmp/gmp_plugin.c
src/libstrongswan/plugins/mgf1/mgf1_plugin.c
src/libstrongswan/plugins/mgf1/mgf1_xof.c

index 4c388f36a32ceb2835218f61e6ca913adbfc0254..7c1eb37e42ba91b77ef28cb0875a394ac8a7ad41 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2017 Tobias Brunner
- * Copyright (C) 2016 Andreas Steffen
+ * Copyright (C) 2016-2023 Andreas Steffen
  *
  * Copyright (C) secunet Security Networks AG
  *
@@ -24,6 +24,10 @@ ENUM(ext_out_function_names, XOF_UNDEFINED, XOF_CHACHA20,
        "XOF_MGF1_SHA256",
        "XOF_MGF1_SHA384",
        "XOF_MGF1_SHA512",
+       "XOF_MGF1_SHA3_224",
+       "XOF_MGF1_SHA3_256",
+       "XOF_MGF1_SHA3_384",
+       "XOF_MGF1_SHA3_512",
        "XOF_SHAKE128",
        "XOF_SHAKE256",
        "XOF_CHACHA20"
@@ -46,15 +50,19 @@ ext_out_function_t xof_mgf1_from_hash_algorithm(hash_algorithm_t alg)
                        return XOF_MGF1_SHA384;
                case HASH_SHA512:
                        return XOF_MGF1_SHA512;
+               case HASH_SHA3_224:
+                       return XOF_MGF1_SHA3_224;
+               case HASH_SHA3_256:
+                       return XOF_MGF1_SHA3_256;
+               case HASH_SHA3_384:
+                       return XOF_MGF1_SHA3_384;
+               case HASH_SHA3_512:
+                       return XOF_MGF1_SHA3_384;
                case HASH_IDENTITY:
                case HASH_UNKNOWN:
                case HASH_MD2:
                case HASH_MD4:
                case HASH_MD5:
-               case HASH_SHA3_224:
-               case HASH_SHA3_256:
-               case HASH_SHA3_384:
-               case HASH_SHA3_512:
                        break;
        }
        return XOF_UNDEFINED;
index 9f13d7962a0e2bffe1f497fd895e8179f7193103..385c48f451db6ca4e53a19615f5ec4251089b9b8 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2017 Tobias Brunner
- * Copyright (C) 2016 Andreas Steffen
+ * Copyright (C) 2016-2023 Andreas Steffen
  *
  * Copyright (C) secunet Security Networks AG
  *
@@ -43,6 +43,14 @@ enum ext_out_function_t {
        XOF_MGF1_SHA384,
        /** RFC 8017 PKCS#1 */
        XOF_MGF1_SHA512,
+       /** RFC 8017 PKCS#1 */
+       XOF_MGF1_SHA3_224,
+       /** RFC 8017 PKCS#1 */
+       XOF_MGF1_SHA3_256,
+       /** RFC 8017 PKCS#1 */
+       XOF_MGF1_SHA3_384,
+       /** RFC 8017 PKCS#1 */
+       XOF_MGF1_SHA3_512,
        /** FIPS 202 */
        XOF_SHAKE_128,
        /** FIPS 202 */
index 4d0934929c708ff8fa8b43844db80c384186e7a7..f72c7f5c504a7353f501943c8489b9bf1754d30b 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008-2009 Martin Willi
+ * Copyright (C) 2023 Andreas Steffen, strongSec GmbH
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -115,6 +116,8 @@ METHOD(plugin_t, get_features, int,
                        PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA1),
                        PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA256),
                        PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA512),
+                       PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA3_256),
+                       PLUGIN_SDEPEND(XOF, XOF_MGF1_SHA3_512),
                PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_NULL),
                PLUGIN_PROVIDE(PUBKEY_VERIFY, SIGN_RSA_EMSA_PKCS1_SHA2_224),
                        PLUGIN_DEPENDS(HASHER, HASH_SHA224),
index 498be2224630575270b12c2d7376b5f1d87e834b..36ce54b37ef06e5a2067dd9258e0fa94e0d5244d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016 Andreas Steffen
+ * Copyright (C) 2016-2023 Andreas Steffen
  *
  * Copyright (C) secunet Security Networks AG
  *
@@ -53,6 +53,14 @@ METHOD(plugin_t, get_features, int,
                                PLUGIN_DEPENDS(HASHER, HASH_SHA384),
                        PLUGIN_PROVIDE(XOF, XOF_MGF1_SHA512),
                                PLUGIN_DEPENDS(HASHER, HASH_SHA512),
+                       PLUGIN_PROVIDE(XOF, XOF_MGF1_SHA3_224),
+                               PLUGIN_DEPENDS(HASHER, HASH_SHA3_224),
+                       PLUGIN_PROVIDE(XOF, XOF_MGF1_SHA3_256),
+                               PLUGIN_DEPENDS(HASHER, HASH_SHA3_256),
+                       PLUGIN_PROVIDE(XOF, XOF_MGF1_SHA3_384),
+                               PLUGIN_DEPENDS(HASHER, HASH_SHA3_384),
+                       PLUGIN_PROVIDE(XOF, XOF_MGF1_SHA3_512),
+                               PLUGIN_DEPENDS(HASHER, HASH_SHA3_512),
        };
        *features = f;
        return countof(f);
index f07340101386c7b24764a0eda8df5ad73813fa37..517cccefadd7e64fe7322430aed38167d2c86e0c 100644 (file)
@@ -257,6 +257,18 @@ mgf1_xof_t *mgf1_xof_create(ext_out_function_t algorithm)
                case XOF_MGF1_SHA512:
                        hash_alg = HASH_SHA512;
                        break;
+               case XOF_MGF1_SHA3_224:
+                       hash_alg = HASH_SHA3_224;
+                       break;
+               case XOF_MGF1_SHA3_256:
+                       hash_alg = HASH_SHA3_256;
+                       break;
+               case XOF_MGF1_SHA3_384:
+                       hash_alg = HASH_SHA3_384;
+                       break;
+               case XOF_MGF1_SHA3_512:
+                       hash_alg = HASH_SHA3_512;
+                       break;
                default:
                        return NULL;
        }