All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Prestwood <prestwoj@gmail.com>
To: iwd@lists.linux.dev
Cc: James Prestwood <prestwoj@gmail.com>
Subject: [PATCH v2 08/15] unit: make test-dpp key derivation test more extendable
Date: Thu, 26 Oct 2023 13:26:50 -0700	[thread overview]
Message-ID: <20231026202657.183591-9-prestwoj@gmail.com> (raw)
In-Reply-To: <20231026202657.183591-1-prestwoj@gmail.com>

Use a new structure to hold key values so they can be changed for
different test vectors while using the same test function.
---
 unit/test-dpp.c | 104 +++++++++++++++++++++++++++++++-----------------
 1 file changed, 68 insertions(+), 36 deletions(-)

diff --git a/unit/test-dpp.c b/unit/test-dpp.c
index c3f3731f..0cf60f0a 100644
--- a/unit/test-dpp.c
+++ b/unit/test-dpp.c
@@ -158,29 +158,59 @@ static void test_bad_channels(const void *data)
 		test_uri_parse(&bad_channels[i]);
 }
 
+struct dpp_test_vector {
+	/* Initiator values */
+	const char *i_proto_public;
+	const char *i_proto_private;
+	const char *i_boot_public;
+	const char *i_boot_private;
+	const char *i_nonce;
+	const char *i_auth;
+	const char *i_asn1;
+
+	/* Responder values */
+	const char *r_proto_public;
+	const char *r_proto_private;
+	const char *r_boot_public;
+	const char *r_boot_private;
+	const char *r_nonce;
+	const char *r_auth;
+	const char *r_asn1;
+
+	const char *k1;
+	const char *k2;
+	const char *ke;
+	const char *mx;
+	const char *nx;
+};
+
 /*
  * B.2 Test Vectors for DPP Authentication Using P-256 for
  * Responder-only Authentication
  */
-const char *i_proto_public_bytes = "50a532ae2a07207276418d2fa630295d45569be425aa634f02014d00a7d1f61a"
-				"e14f35a5a858bccad90d126c46594c49ef82655e78888e15a32d916ac2172491";
-const char *r_boot_public_bytes = "09c585a91b4df9fd25a045201885c39cc5cfae397ddaeda957dec57fa0e3503f"
-				"52bf05968198a2f92883e96a386d767579883302dbf292105c90a43694c2fd5c";
-const char *r_boot_private_bytes = "54ce181a98525f217216f59b245f60e9df30ac7f6b26c939418cfc3c42d1afa0";
-const char *r_proto_private_bytes = "f798ed2e19286f6a6efe210b1863badb99af2a14b497634dbfd2a97394fb5aa5";
-const char *r_proto_public_bytes = "5e3fb3576884887f17c3203d8a3a6c2fac722ef0e2201b61ac73bc655c709a90"
-				"2d4b030669fb9eff8b0a79fa7c1a172ac2a92c626256963f9274dc90682c81e5";
-const char *k1_bytes = "3d832a02ed6d7fc1dc96d2eceab738cf01c0028eb256be33d5a21a720bfcf949";
-const char *k2_bytes = "ca08bdeeef838ddf897a5f01f20bb93dc5a895cb86788ca8c00a7664899bc310";
-const char *ke_bytes = "c8882a8ab30c878467822534138c704ede0ab1e873fe03b601a7908463fec87a";
-const char *mx_bytes = "dde2878117d69745be4f916a2dd14269d783d1d788c603bb8746beabbd1dbbbc";
-const char *nx_bytes = "92118478b75c21c2c59340c842b5bce560a535f60bc37a75fe390d738c58d8e8";
-const char *i_nonce_bytes = "13f4602a16daeb69712263b9c46cba31";
-const char *r_nonce_bytes = "3d0cfb011ca916d796f7029ff0b43393";
-const char *i_auth_bytes = "787d1189b526448d2901e7f6c22775ce514fce52fc886c1e924f2fbb8d97b210";
-const char *r_auth_bytes = "43509ef7137d8c2fbe66d802ae09dedd94d41b8cbfafb4954782014ff4a3f91c";
-const char *r_asn1 = "3039301306072a8648ce3d020106082a8648ce3d0301070322000209c585a91b"
-			"4df9fd25a045201885c39cc5cfae397ddaeda957dec57fa0e3503f";
+static struct dpp_test_vector responder_only_p256 = {
+	.i_proto_public = "50a532ae2a07207276418d2fa630295d45569be425aa634f02014d00a7d1f61a"
+			"e14f35a5a858bccad90d126c46594c49ef82655e78888e15a32d916ac2172491",
+	.i_nonce = "13f4602a16daeb69712263b9c46cba31",
+	.i_auth = "787d1189b526448d2901e7f6c22775ce514fce52fc886c1e924f2fbb8d97b210",
+
+	.r_proto_public = "5e3fb3576884887f17c3203d8a3a6c2fac722ef0e2201b61ac73bc655c709a90"
+			"2d4b030669fb9eff8b0a79fa7c1a172ac2a92c626256963f9274dc90682c81e5",
+	.r_proto_private = "f798ed2e19286f6a6efe210b1863badb99af2a14b497634dbfd2a97394fb5aa5",
+	.r_boot_public = "09c585a91b4df9fd25a045201885c39cc5cfae397ddaeda957dec57fa0e3503f"
+			"52bf05968198a2f92883e96a386d767579883302dbf292105c90a43694c2fd5c",
+	.r_boot_private = "54ce181a98525f217216f59b245f60e9df30ac7f6b26c939418cfc3c42d1afa0",
+	.r_nonce = "3d0cfb011ca916d796f7029ff0b43393",
+	.r_auth = "43509ef7137d8c2fbe66d802ae09dedd94d41b8cbfafb4954782014ff4a3f91c",
+	.r_asn1 = "3039301306072a8648ce3d020106082a8648ce3d0301070322000209c585a91b"
+			"4df9fd25a045201885c39cc5cfae397ddaeda957dec57fa0e3503f",
+
+	.k1 = "3d832a02ed6d7fc1dc96d2eceab738cf01c0028eb256be33d5a21a720bfcf949",
+	.k2 = "ca08bdeeef838ddf897a5f01f20bb93dc5a895cb86788ca8c00a7664899bc310",
+	.ke = "c8882a8ab30c878467822534138c704ede0ab1e873fe03b601a7908463fec87a",
+	.mx = "dde2878117d69745be4f916a2dd14269d783d1d788c603bb8746beabbd1dbbbc",
+	.nx = "92118478b75c21c2c59340c842b5bce560a535f60bc37a75fe390d738c58d8e8",
+};
 
 #define HEX2BUF(s, buf, _len) { \
 	size_t _len_out; \
@@ -198,6 +228,8 @@ const char *r_asn1 = "3039301306072a8648ce3d020106082a8648ce3d0301070322000209c5
 
 static void test_key_derivation(const void *data)
 {
+	const struct dpp_test_vector *vector = data;
+
 	uint64_t tmp[L_ECC_MAX_DIGITS * 2];
 	const struct l_ecc_curve *curve = l_ecc_curve_from_ike_group(19);
 	_auto_(l_ecc_point_free) struct l_ecc_point *i_proto_public = NULL;
@@ -218,19 +250,19 @@ static void test_key_derivation(const void *data)
 	_auto_(l_free) uint8_t *asn1 = NULL;
 	size_t asn1_len;
 
-	HEX2BUF(i_proto_public_bytes, tmp, 64);
+	HEX2BUF(vector->i_proto_public, tmp, 64);
 	i_proto_public = l_ecc_point_from_data(curve,
 						L_ECC_POINT_TYPE_FULL,
 						tmp, 64);
 	assert(i_proto_public);
 
-	HEX2BUF(r_boot_public_bytes, tmp, 64);
+	HEX2BUF(vector->r_boot_public, tmp, 64);
 	r_boot_public = l_ecc_point_from_data(curve,
 						L_ECC_POINT_TYPE_FULL,
 						tmp, 64);
 	assert(r_boot_public);
 
-	HEX2BUF(r_asn1, tmp, sizeof(tmp));
+	HEX2BUF(vector->r_asn1, tmp, sizeof(tmp));
 	asn1 = dpp_point_to_asn1(r_boot_public, &asn1_len);
 
 	from_asn1 = dpp_point_from_asn1(asn1, asn1_len);
@@ -240,47 +272,47 @@ static void test_key_derivation(const void *data)
 	assert(asn1_len == 59);
 	assert(memcmp(tmp, asn1, asn1_len) == 0);
 
-	HEX2BUF(r_proto_public_bytes, tmp, 64);
+	HEX2BUF(vector->r_proto_public, tmp, 64);
 	r_proto_public = l_ecc_point_from_data(curve,
 						L_ECC_POINT_TYPE_FULL,
 						tmp, 64);
 	assert(r_proto_public);
 
-	HEX2BUF(r_boot_private_bytes, tmp, 32);
+	HEX2BUF(vector->r_boot_private, tmp, 32);
 	r_boot_private = l_ecc_scalar_new(curve, tmp, 32);
 	assert(r_boot_private);
 
-	HEX2BUF(r_proto_private_bytes, tmp, 32);
+	HEX2BUF(vector->r_proto_private, tmp, 32);
 	r_proto_private = l_ecc_scalar_new(curve, tmp, 32);
 	assert(r_proto_private);
 
 	m = dpp_derive_k1(i_proto_public, r_boot_private, k1);
 	assert(m);
 
-	CHECK_FROM_STR(k1_bytes, k1, 32);
+	CHECK_FROM_STR(vector->k1, k1, 32);
 	l_ecc_scalar_get_data(m, tmp, sizeof(tmp));
-	CHECK_FROM_STR(mx_bytes, tmp, 32);
+	CHECK_FROM_STR(vector->mx, tmp, 32);
 
 	n = dpp_derive_k2(i_proto_public, r_proto_private, k2);
 	assert(n);
 
-	CHECK_FROM_STR(k2_bytes, k2, 32);
+	CHECK_FROM_STR(vector->k2, k2, 32);
 	l_ecc_scalar_get_data(n, tmp, sizeof(tmp));
-	CHECK_FROM_STR(nx_bytes, tmp, 32);
+	CHECK_FROM_STR(vector->nx, tmp, 32);
 
-	HEX2BUF(i_nonce_bytes, i_nonce, 16);
-	HEX2BUF(r_nonce_bytes, r_nonce, 16);
+	HEX2BUF(vector->i_nonce, i_nonce, 16);
+	HEX2BUF(vector->r_nonce, r_nonce, 16);
 	dpp_derive_ke(i_nonce, r_nonce, m, n, NULL, ke);
 
-	CHECK_FROM_STR(ke_bytes, ke, 32);
+	CHECK_FROM_STR(vector->ke, ke, 32);
 
 	dpp_derive_r_auth(i_nonce, r_nonce, 16, i_proto_public, r_proto_public,
 				NULL, r_boot_public, r_auth);
-	CHECK_FROM_STR(r_auth_bytes, r_auth, 32);
+	CHECK_FROM_STR(vector->r_auth, r_auth, 32);
 
 	dpp_derive_i_auth(r_nonce, i_nonce, 16, r_proto_public, i_proto_public,
 				r_boot_public, NULL, i_auth);
-	CHECK_FROM_STR(i_auth_bytes, i_auth, 32);
+	CHECK_FROM_STR(vector->i_auth, i_auth, 32);
 }
 
 int main(int argc, char *argv[])
@@ -289,8 +321,8 @@ int main(int argc, char *argv[])
 
 	if (l_checksum_is_supported(L_CHECKSUM_SHA256, true) &&
 						l_getrandom_is_supported())
-		l_test_add("DPP test key derivation",
-						test_key_derivation, NULL);
+		l_test_add("DPP test key derivation", test_key_derivation,
+						&responder_only_p256);
 
 	l_test_add("DPP URI parse", test_uri_parse, &all_values);
 	l_test_add("DPP URI no type", test_uri_parse, &no_type);
-- 
2.25.1


  parent reply	other threads:[~2023-10-26 20:27 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-26 20:26 [PATCH v2 00/15] DPP PKEX Changes James Prestwood
2023-10-26 20:26 ` [PATCH v2 01/15] station: add station_get_autoconnect James Prestwood
2023-10-26 20:26 ` [PATCH v2 02/15] dpp: remove connect/scanning and resume periodic scans after DPP James Prestwood
2023-10-29 22:04   ` Denis Kenzior
2023-10-30 11:35     ` James Prestwood
2023-10-26 20:26 ` [PATCH v2 03/15] dpp: check configurator role in config request frame James Prestwood
2023-10-29 22:07   ` Denis Kenzior
2023-10-26 20:26 ` [PATCH v2 04/15] dpp: make the protocol timeout more flexible James Prestwood
2023-10-26 20:26 ` [PATCH v2 05/15] dpp: fix config request header check James Prestwood
2023-10-26 21:53   ` James Prestwood
2023-10-26 20:26 ` [PATCH v2 06/15] dpp-util: add crypto for PKEX James Prestwood
2023-10-29 22:22   ` Denis Kenzior
2023-10-26 20:26 ` [PATCH v2 07/15] dpp: support mutual authentication James Prestwood
2023-10-26 20:26 ` James Prestwood [this message]
2023-10-26 20:26 ` [PATCH v2 09/15] unit: add DPP test for " James Prestwood
2023-10-26 20:26 ` [PATCH v2 10/15] unit: add PKEX DPP tests James Prestwood
2023-10-26 20:26 ` [PATCH v2 11/15] dpp: allow enrollee to be authentication initiator James Prestwood
2023-10-26 20:26 ` [PATCH v2 12/15] doc: PKEX support for DPP James Prestwood
2023-10-29 22:27   ` Denis Kenzior
2023-10-30 11:56     ` James Prestwood
2023-10-30 14:40       ` Denis Kenzior
2023-10-26 20:26 ` [PATCH v2 13/15] dbus: add SharedCodeDeviceProvisioning interface definition James Prestwood
2023-10-29 22:29   ` Denis Kenzior
2023-10-26 20:26 ` [PATCH v2 14/15] dpp: initial version of PKEX enrollee support James Prestwood
2023-10-26 20:26 ` [PATCH v2 15/15] dpp: initial version of PKEX configurator support James Prestwood

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231026202657.183591-9-prestwoj@gmail.com \
    --to=prestwoj@gmail.com \
    --cc=iwd@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.