mgf1: Support of RSA PSS with SHA3 hash

This commit is contained in:
Andreas Steffen 2023-01-05 15:10:32 +01:00 committed by Tobias Brunner
parent 1265d78cac
commit 3b7c49bc31
5 changed files with 46 additions and 7 deletions

View 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;

View 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 */

View 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),

View 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);

View 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;
}