* [PATCH 1/3] crypto: ecdh - fix 'ecdh_init'
2021-05-12 6:39 [PATCH 0/3] crypto: ecdh - register NIST P384 Hui Tang
@ 2021-05-12 6:40 ` Hui Tang
2021-05-21 7:45 ` Herbert Xu
2021-05-12 6:40 ` [PATCH 2/3] crypto: ecdh - register NIST P384 tfm Hui Tang
2021-05-12 6:40 ` [PATCH 3/3] crypto: ecdh - add test suite for NIST P384 Hui Tang
2 siblings, 1 reply; 8+ messages in thread
From: Hui Tang @ 2021-05-12 6:40 UTC (permalink / raw)
To: herbert, davem; +Cc: linux-crypto, xuzaibo, wangzhou1, linux-kernel
NIST P192 is not unregistered if failed to register NIST P256,
actually it need to unregister the algorithms already registered.
Signed-off-by: Hui Tang <tanghui20@huawei.com>
---
crypto/ecdh.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/crypto/ecdh.c b/crypto/ecdh.c
index 07eb34f..65fb685 100644
--- a/crypto/ecdh.c
+++ b/crypto/ecdh.c
@@ -182,7 +182,16 @@ static int ecdh_init(void)
ret = crypto_register_kpp(&ecdh_nist_p192);
ecdh_nist_p192_registered = ret == 0;
- return crypto_register_kpp(&ecdh_nist_p256);
+ ret = crypto_register_kpp(&ecdh_nist_p256);
+ if (ret)
+ goto nist_p256_error;
+
+ return 0;
+
+nist_p256_error:
+ if (ecdh_nist_p192_registered)
+ crypto_unregister_kpp(&ecdh_nist_p192);
+ return ret;
}
static void ecdh_exit(void)
--
2.8.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] crypto: ecdh - fix 'ecdh_init'
2021-05-12 6:40 ` [PATCH 1/3] crypto: ecdh - fix 'ecdh_init' Hui Tang
@ 2021-05-21 7:45 ` Herbert Xu
2021-05-21 8:08 ` Hui Tang
0 siblings, 1 reply; 8+ messages in thread
From: Herbert Xu @ 2021-05-21 7:45 UTC (permalink / raw)
To: Hui Tang; +Cc: davem, linux-crypto, xuzaibo, wangzhou1, linux-kernel
On Wed, May 12, 2021 at 02:40:00PM +0800, Hui Tang wrote:
> NIST P192 is not unregistered if failed to register NIST P256,
> actually it need to unregister the algorithms already registered.
>
> Signed-off-by: Hui Tang <tanghui20@huawei.com>
> ---
> crypto/ecdh.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
Thanks for catching this. The variable ecdh_nist_p192_registered
is bogus. You should just make it so that if p192 fails to
register then the init function aborts. There would then be
no need to check for the registered state in the exit function.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] crypto: ecdh - fix 'ecdh_init'
2021-05-21 7:45 ` Herbert Xu
@ 2021-05-21 8:08 ` Hui Tang
2021-05-21 8:13 ` Herbert Xu
0 siblings, 1 reply; 8+ messages in thread
From: Hui Tang @ 2021-05-21 8:08 UTC (permalink / raw)
To: Herbert Xu; +Cc: davem, linux-crypto, xuzaibo, wangzhou1, linux-kernel
On 2021/5/21 15:45, Herbert Xu wrote:
> On Wed, May 12, 2021 at 02:40:00PM +0800, Hui Tang wrote:
>> NIST P192 is not unregistered if failed to register NIST P256,
>> actually it need to unregister the algorithms already registered.
>>
>> Signed-off-by: Hui Tang <tanghui20@huawei.com>
>> ---
>> crypto/ecdh.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> Thanks for catching this. The variable ecdh_nist_p192_registered
> is bogus. You should just make it so that if p192 fails to
> register then the init function aborts. There would then be
> no need to check for the registered state in the exit function.
>
Okay, I will fix it in next version, and 'ecdsa_init' should
do the same thing too?
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] crypto: ecdh - fix 'ecdh_init'
2021-05-21 8:08 ` Hui Tang
@ 2021-05-21 8:13 ` Herbert Xu
2021-05-21 9:36 ` Stephan Mueller
0 siblings, 1 reply; 8+ messages in thread
From: Herbert Xu @ 2021-05-21 8:13 UTC (permalink / raw)
To: Hui Tang
Cc: davem, linux-crypto, xuzaibo, wangzhou1, linux-kernel, Stephan Mueller
On Fri, May 21, 2021 at 04:08:10PM +0800, Hui Tang wrote:
>
> On 2021/5/21 15:45, Herbert Xu wrote:
> > On Wed, May 12, 2021 at 02:40:00PM +0800, Hui Tang wrote:
> > > NIST P192 is not unregistered if failed to register NIST P256,
> > > actually it need to unregister the algorithms already registered.
> > >
> > > Signed-off-by: Hui Tang <tanghui20@huawei.com>
> > > ---
> > > crypto/ecdh.c | 11 ++++++++++-
> > > 1 file changed, 10 insertions(+), 1 deletion(-)
> >
> > Thanks for catching this. The variable ecdh_nist_p192_registered
> > is bogus. You should just make it so that if p192 fails to
> > register then the init function aborts. There would then be
> > no need to check for the registered state in the exit function.
>
> Okay, I will fix it in next version, and 'ecdsa_init' should
> do the same thing too?
Actually, it looks like it is needed for FIPS. We should add
a comment that p192 will fail to register in FIPS mode and that's
why there is a check for it.
Funnily enough, ecdsa has the FIPS comment but testmgr doesn't
set fips_allowed for any of them while ecdh is set but has no
comment.
Stephan, can you confirm that both ecdh-nist-p192 and ecdsa-nist-p192
should be disabled in FIPS mode?
Also, we should fix ecdh-nist-p192's entry in testmgr by removing
the ifdefs and not setting fips_allowed.
Cheers,
--
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] crypto: ecdh - fix 'ecdh_init'
2021-05-21 8:13 ` Herbert Xu
@ 2021-05-21 9:36 ` Stephan Mueller
0 siblings, 0 replies; 8+ messages in thread
From: Stephan Mueller @ 2021-05-21 9:36 UTC (permalink / raw)
To: Herbert Xu, Hui Tang
Cc: davem, linux-crypto, xuzaibo, wangzhou1, linux-kernel
Am Freitag, dem 21.05.2021 um 16:13 +0800 schrieb Herbert Xu:
> On Fri, May 21, 2021 at 04:08:10PM +0800, Hui Tang wrote:
>
>
> Stephan, can you confirm that both ecdh-nist-p192 and ecdsa-nist-p192
> should be disabled in FIPS mode?
Confirmed with the following caveat: sigver is allowed due to legacy
considerations. Siggen / ECDH is only allowed for curves P-224 and higher.
As we introduce ECDSA today, I would not consider a legacy mode and thus
disable P-192.
Ciao
Stephan
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] crypto: ecdh - register NIST P384 tfm
2021-05-12 6:39 [PATCH 0/3] crypto: ecdh - register NIST P384 Hui Tang
2021-05-12 6:40 ` [PATCH 1/3] crypto: ecdh - fix 'ecdh_init' Hui Tang
@ 2021-05-12 6:40 ` Hui Tang
2021-05-12 6:40 ` [PATCH 3/3] crypto: ecdh - add test suite for NIST P384 Hui Tang
2 siblings, 0 replies; 8+ messages in thread
From: Hui Tang @ 2021-05-12 6:40 UTC (permalink / raw)
To: herbert, davem; +Cc: linux-crypto, xuzaibo, wangzhou1, linux-kernel
Add ecdh_nist_p384_init_tfm and register and unregister P384 tfm.
Signed-off-by: Hui Tang <tanghui20@huawei.com>
---
crypto/ecdh.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/crypto/ecdh.c b/crypto/ecdh.c
index 65fb685..cae79da 100644
--- a/crypto/ecdh.c
+++ b/crypto/ecdh.c
@@ -173,6 +173,31 @@ static struct kpp_alg ecdh_nist_p256 = {
},
};
+static int ecdh_nist_p384_init_tfm(struct crypto_kpp *tfm)
+{
+ struct ecdh_ctx *ctx = ecdh_get_ctx(tfm);
+
+ ctx->curve_id = ECC_CURVE_NIST_P384;
+ ctx->ndigits = ECC_CURVE_NIST_P384_DIGITS;
+
+ return 0;
+}
+
+static struct kpp_alg ecdh_nist_p384 = {
+ .set_secret = ecdh_set_secret,
+ .generate_public_key = ecdh_compute_value,
+ .compute_shared_secret = ecdh_compute_value,
+ .max_size = ecdh_max_size,
+ .init = ecdh_nist_p384_init_tfm,
+ .base = {
+ .cra_name = "ecdh-nist-p384",
+ .cra_driver_name = "ecdh-nist-p384-generic",
+ .cra_priority = 100,
+ .cra_module = THIS_MODULE,
+ .cra_ctxsize = sizeof(struct ecdh_ctx),
+ },
+};
+
static bool ecdh_nist_p192_registered;
static int ecdh_init(void)
@@ -186,8 +211,15 @@ static int ecdh_init(void)
if (ret)
goto nist_p256_error;
+ ret = crypto_register_kpp(&ecdh_nist_p384);
+ if (ret)
+ goto nist_p384_error;
+
return 0;
+nist_p384_error:
+ crypto_unregister_kpp(&ecdh_nist_p256);
+
nist_p256_error:
if (ecdh_nist_p192_registered)
crypto_unregister_kpp(&ecdh_nist_p192);
@@ -199,6 +231,7 @@ static void ecdh_exit(void)
if (ecdh_nist_p192_registered)
crypto_unregister_kpp(&ecdh_nist_p192);
crypto_unregister_kpp(&ecdh_nist_p256);
+ crypto_unregister_kpp(&ecdh_nist_p384);
}
subsys_initcall(ecdh_init);
--
2.8.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] crypto: ecdh - add test suite for NIST P384
2021-05-12 6:39 [PATCH 0/3] crypto: ecdh - register NIST P384 Hui Tang
2021-05-12 6:40 ` [PATCH 1/3] crypto: ecdh - fix 'ecdh_init' Hui Tang
2021-05-12 6:40 ` [PATCH 2/3] crypto: ecdh - register NIST P384 tfm Hui Tang
@ 2021-05-12 6:40 ` Hui Tang
2 siblings, 0 replies; 8+ messages in thread
From: Hui Tang @ 2021-05-12 6:40 UTC (permalink / raw)
To: herbert, davem; +Cc: linux-crypto, xuzaibo, wangzhou1, linux-kernel
Add test vector params for NIST P384, add test vector for
NIST P384 on vector of tests.
Vector param from:
https://datatracker.ietf.org/doc/html/rfc5903#section-3.1
Signed-off-by: Hui Tang <tanghui20@huawei.com>
---
crypto/testmgr.c | 7 +++++++
crypto/testmgr.h | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+)
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 10c5b3b..e79cbf6 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4915,6 +4915,13 @@ static const struct alg_test_desc alg_test_descs[] = {
.kpp = __VECS(ecdh_p256_tv_template)
}
}, {
+ .alg = "ecdh-nist-p384",
+ .test = alg_test_kpp,
+ .fips_allowed = 1,
+ .suite = {
+ .kpp = __VECS(ecdh_p384_tv_template)
+ }
+ }, {
.alg = "ecdsa-nist-p192",
.test = alg_test_akcipher,
.suite = {
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index aead75d..3d74b518 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -2814,6 +2814,67 @@ static const struct kpp_testvec ecdh_p256_tv_template[] = {
};
/*
+ * NIST P384 test vectors from RFC5903
+ */
+static const struct kpp_testvec ecdh_p384_tv_template[] = {
+ {
+ .secret =
+#ifdef __LITTLE_ENDIAN
+ "\x02\x00" /* type */
+ "\x36\x00" /* len */
+ "\x30\x00" /* key_size */
+#else
+ "\x00\x02" /* type */
+ "\x00\x36" /* len */
+ "\x00\x30" /* key_size */
+#endif
+ "\x09\x9F\x3C\x70\x34\xD4\xA2\xC6"
+ "\x99\x88\x4D\x73\xA3\x75\xA6\x7F"
+ "\x76\x24\xEF\x7C\x6B\x3C\x0F\x16"
+ "\x06\x47\xB6\x74\x14\xDC\xE6\x55"
+ "\xE3\x5B\x53\x80\x41\xE6\x49\xEE"
+ "\x3F\xAE\xF8\x96\x78\x3A\xB1\x94",
+ .b_public =
+ "\xE5\x58\xDB\xEF\x53\xEE\xCD\xE3"
+ "\xD3\xFC\xCF\xC1\xAE\xA0\x8A\x89"
+ "\xA9\x87\x47\x5D\x12\xFD\x95\x0D"
+ "\x83\xCF\xA4\x17\x32\xBC\x50\x9D"
+ "\x0D\x1A\xC4\x3A\x03\x36\xDE\xF9"
+ "\x6F\xDA\x41\xD0\x77\x4A\x35\x71"
+ "\xDC\xFB\xEC\x7A\xAC\xF3\x19\x64"
+ "\x72\x16\x9E\x83\x84\x30\x36\x7F"
+ "\x66\xEE\xBE\x3C\x6E\x70\xC4\x16"
+ "\xDD\x5F\x0C\x68\x75\x9D\xD1\xFF"
+ "\xF8\x3F\xA4\x01\x42\x20\x9D\xFF"
+ "\x5E\xAA\xD9\x6D\xB9\xE6\x38\x6C",
+ .expected_a_public =
+ "\x66\x78\x42\xD7\xD1\x80\xAC\x2C"
+ "\xDE\x6F\x74\xF3\x75\x51\xF5\x57"
+ "\x55\xC7\x64\x5C\x20\xEF\x73\xE3"
+ "\x16\x34\xFE\x72\xB4\xC5\x5E\xE6"
+ "\xDE\x3A\xC8\x08\xAC\xB4\xBD\xB4"
+ "\xC8\x87\x32\xAE\xE9\x5F\x41\xAA"
+ "\x94\x82\xED\x1F\xC0\xEE\xB9\xCA"
+ "\xFC\x49\x84\x62\x5C\xCF\xC2\x3F"
+ "\x65\x03\x21\x49\xE0\xE1\x44\xAD"
+ "\xA0\x24\x18\x15\x35\xA0\xF3\x8E"
+ "\xEB\x9F\xCF\xF3\xC2\xC9\x47\xDA"
+ "\xE6\x9B\x4C\x63\x45\x73\xA8\x1C",
+ .expected_ss =
+ "\x11\x18\x73\x31\xC2\x79\x96\x2D"
+ "\x93\xD6\x04\x24\x3F\xD5\x92\xCB"
+ "\x9D\x0A\x92\x6F\x42\x2E\x47\x18"
+ "\x75\x21\x28\x7E\x71\x56\xC5\xC4"
+ "\xD6\x03\x13\x55\x69\xB9\xE9\xD0"
+ "\x9C\xF5\xD4\xA2\x70\xF5\x97\x46",
+ .secret_size = 54,
+ .b_public_size = 96,
+ .expected_a_public_size = 96,
+ .expected_ss_size = 48
+ }
+};
+
+/*
* MD4 test vectors from RFC1320
*/
static const struct hash_testvec md4_tv_template[] = {
--
2.8.1
^ permalink raw reply related [flat|nested] 8+ messages in thread