All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] crypto: ecdh - register NIST P384
@ 2021-05-22  2:21 Hui Tang
  2021-05-22  2:21 ` [PATCH v2 1/4] crypto: ecdh: fix ecdh-nist-p192's entry in testmgr Hui Tang
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Hui Tang @ 2021-05-22  2:21 UTC (permalink / raw)
  To: herbert, davem; +Cc: linux-crypto, xuzaibo, wangzhou1, linux-kernel

Register NIST P384 tfm and extend the testmgr with NIST P384 test vectors.

Summary of changes:

* crypto/ecdh.c
  - fix 'ecdh_init' not unregistering NIST P192
  - add ecdh_nist_p384_init_tfm
  - register and unregister P384 tfm

* crypto/testmgr.c
  - add test vector for P384 on vector of tests

* crypto/testmgr.h
  - add test vector params for P384

---
v1 -> v2:
* Add patch#1:
  - Fix ecdh-nist-p192's entry in testmgr.
  - Add a comment for registering ecdh-nist-p192.
---

Hui Tang (4):
  crypto: ecdh: fix ecdh-nist-p192's entry in testmgr
  crypto: ecdh - fix 'ecdh_init'
  crypto: ecdh - register NIST P384 tfm
  crypto: ecdh - add test suite for NIST P384

 crypto/ecdh.c    | 45 +++++++++++++++++++++++++++++++++++++++-
 crypto/testmgr.c | 10 ++++++---
 crypto/testmgr.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 112 insertions(+), 6 deletions(-)

--
2.8.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/4] crypto: ecdh: fix ecdh-nist-p192's entry in testmgr
  2021-05-22  2:21 [PATCH v2 0/4] crypto: ecdh - register NIST P384 Hui Tang
@ 2021-05-22  2:21 ` Hui Tang
  2021-05-22  2:21 ` [PATCH v2 2/4] crypto: ecdh - fix 'ecdh_init' Hui Tang
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Hui Tang @ 2021-05-22  2:21 UTC (permalink / raw)
  To: herbert, davem; +Cc: linux-crypto, xuzaibo, wangzhou1, linux-kernel

Add a comment that p192 will fail to register in FIPS mode.

Fix ecdh-nist-p192's entry in testmgr by removing the ifdefs
and not setting fips_allowed.

Signed-off-by: Hui Tang <tanghui20@huawei.com>
---
 crypto/ecdh.c    | 1 +
 crypto/testmgr.c | 3 ---
 crypto/testmgr.h | 2 --
 3 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/crypto/ecdh.c b/crypto/ecdh.c
index 04a427b..4227d35 100644
--- a/crypto/ecdh.c
+++ b/crypto/ecdh.c
@@ -179,6 +179,7 @@ static int ecdh_init(void)
 {
 	int ret;
 
+	/* NIST p192 will fail to register in FIPS mode */
 	ret = crypto_register_kpp(&ecdh_nist_p192);
 	ecdh_nist_p192_registered = ret == 0;
 
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 10c5b3b..26e40db 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4899,15 +4899,12 @@ static const struct alg_test_desc alg_test_descs[] = {
 		}
 	}, {
 #endif
-#ifndef CONFIG_CRYPTO_FIPS
 		.alg = "ecdh-nist-p192",
 		.test = alg_test_kpp,
-		.fips_allowed = 1,
 		.suite = {
 			.kpp = __VECS(ecdh_p192_tv_template)
 		}
 	}, {
-#endif
 		.alg = "ecdh-nist-p256",
 		.test = alg_test_kpp,
 		.fips_allowed = 1,
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index 34e4a3d..fe1e59d 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -2685,7 +2685,6 @@ static const struct kpp_testvec curve25519_tv_template[] = {
 }
 };
 
-#ifndef CONFIG_CRYPTO_FIPS
 static const struct kpp_testvec ecdh_p192_tv_template[] = {
 	{
 	.secret =
@@ -2725,7 +2724,6 @@ static const struct kpp_testvec ecdh_p192_tv_template[] = {
 	.expected_ss_size = 24
 	}
 };
-#endif
 
 static const struct kpp_testvec ecdh_p256_tv_template[] = {
 	{
-- 
2.8.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/4] crypto: ecdh - fix 'ecdh_init'
  2021-05-22  2:21 [PATCH v2 0/4] crypto: ecdh - register NIST P384 Hui Tang
  2021-05-22  2:21 ` [PATCH v2 1/4] crypto: ecdh: fix ecdh-nist-p192's entry in testmgr Hui Tang
@ 2021-05-22  2:21 ` Hui Tang
  2021-05-22  2:21 ` [PATCH v2 3/4] crypto: ecdh - register NIST P384 tfm Hui Tang
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Hui Tang @ 2021-05-22  2:21 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 4227d35..e2c4808 100644
--- a/crypto/ecdh.c
+++ b/crypto/ecdh.c
@@ -183,7 +183,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] 6+ messages in thread

* [PATCH v2 3/4] crypto: ecdh - register NIST P384 tfm
  2021-05-22  2:21 [PATCH v2 0/4] crypto: ecdh - register NIST P384 Hui Tang
  2021-05-22  2:21 ` [PATCH v2 1/4] crypto: ecdh: fix ecdh-nist-p192's entry in testmgr Hui Tang
  2021-05-22  2:21 ` [PATCH v2 2/4] crypto: ecdh - fix 'ecdh_init' Hui Tang
@ 2021-05-22  2:21 ` Hui Tang
  2021-05-22  2:21 ` [PATCH v2 4/4] crypto: ecdh - add test suite for NIST P384 Hui Tang
  2021-05-22  2:46 ` [PATCH v2 0/4] crypto: ecdh - register " Hui Tang
  4 siblings, 0 replies; 6+ messages in thread
From: Hui Tang @ 2021-05-22  2:21 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 e2c4808..70f312e 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)
@@ -187,8 +212,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);
@@ -200,6 +232,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] 6+ messages in thread

* [PATCH v2 4/4] crypto: ecdh - add test suite for NIST P384
  2021-05-22  2:21 [PATCH v2 0/4] crypto: ecdh - register NIST P384 Hui Tang
                   ` (2 preceding siblings ...)
  2021-05-22  2:21 ` [PATCH v2 3/4] crypto: ecdh - register NIST P384 tfm Hui Tang
@ 2021-05-22  2:21 ` Hui Tang
  2021-05-22  2:46 ` [PATCH v2 0/4] crypto: ecdh - register " Hui Tang
  4 siblings, 0 replies; 6+ messages in thread
From: Hui Tang @ 2021-05-22  2:21 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 26e40db..1f7f63e 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4912,6 +4912,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 fe1e59d..5a95b39 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -2812,6 +2812,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] 6+ messages in thread

* Re: [PATCH v2 0/4] crypto: ecdh - register NIST P384
  2021-05-22  2:21 [PATCH v2 0/4] crypto: ecdh - register NIST P384 Hui Tang
                   ` (3 preceding siblings ...)
  2021-05-22  2:21 ` [PATCH v2 4/4] crypto: ecdh - add test suite for NIST P384 Hui Tang
@ 2021-05-22  2:46 ` Hui Tang
  4 siblings, 0 replies; 6+ messages in thread
From: Hui Tang @ 2021-05-22  2:46 UTC (permalink / raw)
  To: herbert, davem; +Cc: linux-crypto, xuzaibo, wangzhou1, linux-kernel

Sorry, please ignore this patchset, there is a problem with subject format,
I will resend.

On 2021/5/22 10:21, Hui Tang wrote:
> Register NIST P384 tfm and extend the testmgr with NIST P384 test vectors.
>
> Summary of changes:
>
> * crypto/ecdh.c
>   - fix 'ecdh_init' not unregistering NIST P192
>   - add ecdh_nist_p384_init_tfm
>   - register and unregister P384 tfm
>
> * crypto/testmgr.c
>   - add test vector for P384 on vector of tests
>
> * crypto/testmgr.h
>   - add test vector params for P384
>
> ---
> v1 -> v2:
> * Add patch#1:
>   - Fix ecdh-nist-p192's entry in testmgr.
>   - Add a comment for registering ecdh-nist-p192.
> ---
>
> Hui Tang (4):
>   crypto: ecdh: fix ecdh-nist-p192's entry in testmgr
>   crypto: ecdh - fix 'ecdh_init'
>   crypto: ecdh - register NIST P384 tfm
>   crypto: ecdh - add test suite for NIST P384
>
>  crypto/ecdh.c    | 45 +++++++++++++++++++++++++++++++++++++++-
>  crypto/testmgr.c | 10 ++++++---
>  crypto/testmgr.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  3 files changed, 112 insertions(+), 6 deletions(-)
>
> --
> 2.8.1
>
> .
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-05-22  2:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-22  2:21 [PATCH v2 0/4] crypto: ecdh - register NIST P384 Hui Tang
2021-05-22  2:21 ` [PATCH v2 1/4] crypto: ecdh: fix ecdh-nist-p192's entry in testmgr Hui Tang
2021-05-22  2:21 ` [PATCH v2 2/4] crypto: ecdh - fix 'ecdh_init' Hui Tang
2021-05-22  2:21 ` [PATCH v2 3/4] crypto: ecdh - register NIST P384 tfm Hui Tang
2021-05-22  2:21 ` [PATCH v2 4/4] crypto: ecdh - add test suite for NIST P384 Hui Tang
2021-05-22  2:46 ` [PATCH v2 0/4] crypto: ecdh - register " Hui Tang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.