From: Andreas Steffen Date: Thu, 5 Jan 2023 14:10:32 +0000 (+0100) Subject: mgf1: Support of RSA PSS with SHA3 hash X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0665836357cf93fd8a430de73b75dc882c32c9c3;p=thirdparty%2Fstrongswan.git mgf1: Support of RSA PSS with SHA3 hash --- diff --git a/src/libstrongswan/crypto/xofs/xof.c b/src/libstrongswan/crypto/xofs/xof.c index 4c388f36a3..7c1eb37e42 100644 --- a/src/libstrongswan/crypto/xofs/xof.c +++ b/src/libstrongswan/crypto/xofs/xof.c @@ -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; diff --git a/src/libstrongswan/crypto/xofs/xof.h b/src/libstrongswan/crypto/xofs/xof.h index 9f13d7962a..385c48f451 100644 --- a/src/libstrongswan/crypto/xofs/xof.h +++ b/src/libstrongswan/crypto/xofs/xof.h @@ -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 */ diff --git a/src/libstrongswan/plugins/gmp/gmp_plugin.c b/src/libstrongswan/plugins/gmp/gmp_plugin.c index 4d0934929c..f72c7f5c50 100644 --- a/src/libstrongswan/plugins/gmp/gmp_plugin.c +++ b/src/libstrongswan/plugins/gmp/gmp_plugin.c @@ -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), diff --git a/src/libstrongswan/plugins/mgf1/mgf1_plugin.c b/src/libstrongswan/plugins/mgf1/mgf1_plugin.c index 498be22246..36ce54b37e 100644 --- a/src/libstrongswan/plugins/mgf1/mgf1_plugin.c +++ b/src/libstrongswan/plugins/mgf1/mgf1_plugin.c @@ -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); diff --git a/src/libstrongswan/plugins/mgf1/mgf1_xof.c b/src/libstrongswan/plugins/mgf1/mgf1_xof.c index f073401013..517cccefad 100644 --- a/src/libstrongswan/plugins/mgf1/mgf1_xof.c +++ b/src/libstrongswan/plugins/mgf1/mgf1_xof.c @@ -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; }