Fix xtest 4007 DH tests

https://github.com/OP-TEE/optee_os/pull/816 breaks "xtest 4007 -l 1".
It turns out some tests are wrong because they provide an incorrect
key_size.

Also, when TEE_ATTR_DH_X_BITS is given, the key generation function is
supposed to use it as the size for the private key to be generated.
xtest was incorrectly checking against key_size.

One test with TEE_ATTR_DH_X_BITS is enabled in the default test suite
(level 0) so that we are more likely to catch any regression.

Depends on https://github.com/OP-TEE/optee_os/pull/816.

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
diff --git a/host/xtest/xtest_4000.c b/host/xtest/xtest_4000.c
index aa06ad5..e8d665a 100644
--- a/host/xtest/xtest_4000.c
+++ b/host/xtest/xtest_4000.c
@@ -4258,7 +4258,12 @@
 struct key_attrs {
 	const char *name;
 	uint32_t attr;
-	bool keysize_check;
+	/*
+	 * When keysize_check != 0: size of attribute is checked
+	 * Expected value is key_size bits except for DH in which case it is
+	 * the value of keysize_check.
+	 */
+	uint32_t keysize_check;
 };
 
 static bool test_keygen_attributes(ADBG_Case_t *c, TEEC_Session *s,
@@ -4353,8 +4358,7 @@
 }
 
 static bool test_dh_key_pair(ADBG_Case_t *c, TEEC_Session *s,
-			     uint32_t check_keysize,
-			     TEE_ObjectHandle key, uint32_t key_size)
+			     TEE_ObjectHandle key, uint32_t check_keysize)
 {
 	const struct key_attrs attrs[] = {
 		KEY_ATTR(TEE_ATTR_DH_PRIME, false),
@@ -4364,7 +4368,7 @@
 		KEY_ATTR(TEE_ATTR_DH_X_BITS, false),
 	};
 
-	return test_keygen_attributes(c, s, key, key_size,
+	return test_keygen_attributes(c, s, key, check_keysize,
 				      (struct key_attrs *)&attrs,
 				      ARRAY_SIZE(attrs));
 }
@@ -4435,8 +4439,7 @@
 
 	case TEE_TYPE_DH_KEYPAIR:
 		ret_val = ADBG_EXPECT_TRUE(c,
-				test_dh_key_pair(c, s, check_keysize, key,
-						 key_size));
+				test_dh_key_pair(c, s, key, check_keysize));
 		break;
 
 	case TEE_TYPE_DSA_KEYPAIR:
@@ -4549,35 +4552,35 @@
 		size_t subprime_len;
 	} key_types[] = {
 		{ 0, 256, XTEST_DH_GK_DATA(keygen_dh256) },
-		{ 1, 256, XTEST_DH_GK_DATA(keygen_dh320) },
+		{ 0, 320, XTEST_DH_GK_DATA(keygen_dh320) },
 		{ 1, 384, XTEST_DH_GK_DATA(keygen_dh384) },
-		{ 1, 256, XTEST_DH_GK_DATA(keygen_dh448) },
+		{ 1, 448, XTEST_DH_GK_DATA(keygen_dh448) },
 		{ 1, 512, XTEST_DH_GK_DATA(keygen_dh512) },
-		{ 1, 288, XTEST_DH_GK_DATA(keygen_dh576) },
+		{ 1, 576, XTEST_DH_GK_DATA(keygen_dh576) },
 		{ 1, 640, XTEST_DH_GK_DATA(keygen_dh640) },
-		{ 1, 352, XTEST_DH_GK_DATA(keygen_dh704) },
+		{ 1, 704, XTEST_DH_GK_DATA(keygen_dh704) },
 		{ 1, 768, XTEST_DH_GK_DATA(keygen_dh768) },
-		{ 1, 416, XTEST_DH_GK_DATA(keygen_dh832) },
+		{ 1, 832, XTEST_DH_GK_DATA(keygen_dh832) },
 		{ 1, 896, XTEST_DH_GK_DATA(keygen_dh896) },
-		{ 1, 480, XTEST_DH_GK_DATA(keygen_dh960) },
+		{ 1, 960, XTEST_DH_GK_DATA(keygen_dh960) },
 		{ 1, 1024, XTEST_DH_GK_DATA(keygen_dh1024) },
-		{ 1, 544, XTEST_DH_GK_DATA(keygen_dh1088) },
+		{ 1, 1088, XTEST_DH_GK_DATA(keygen_dh1088) },
 		{ 1, 1152, XTEST_DH_GK_DATA(keygen_dh1152) },
-		{ 1, 608, XTEST_DH_GK_DATA(keygen_dh1216) },
+		{ 1, 1216, XTEST_DH_GK_DATA(keygen_dh1216) },
 		{ 1, 1280, XTEST_DH_GK_DATA(keygen_dh1280) },
-		{ 1, 672, XTEST_DH_GK_DATA(keygen_dh1344) },
+		{ 1, 1344, XTEST_DH_GK_DATA(keygen_dh1344) },
 		{ 1, 1408, XTEST_DH_GK_DATA(keygen_dh1408) },
-		{ 1, 736, XTEST_DH_GK_DATA(keygen_dh1472) },
+		{ 1, 1472, XTEST_DH_GK_DATA(keygen_dh1472) },
 		{ 1, 1536, XTEST_DH_GK_DATA(keygen_dh1536) },
-		{ 1, 800, XTEST_DH_GK_DATA(keygen_dh1600) },
+		{ 1, 1600, XTEST_DH_GK_DATA(keygen_dh1600) },
 		{ 1, 1664, XTEST_DH_GK_DATA(keygen_dh1664) },
-		{ 1, 864, XTEST_DH_GK_DATA(keygen_dh1728) },
+		{ 1, 1728, XTEST_DH_GK_DATA(keygen_dh1728) },
 		{ 1, 1792, XTEST_DH_GK_DATA(keygen_dh1792) },
-		{ 1, 928, XTEST_DH_GK_DATA(keygen_dh1856) },
+		{ 1, 1856, XTEST_DH_GK_DATA(keygen_dh1856) },
 		{ 1, 1920, XTEST_DH_GK_DATA(keygen_dh1920) },
-		{ 1, 992, XTEST_DH_GK_DATA(keygen_dh1984) },
+		{ 1, 1984, XTEST_DH_GK_DATA(keygen_dh1984) },
 		{ 1, 2048, XTEST_DH_GK_DATA(keygen_dh2048) },
-		{ 1, 256, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
+		{ 1, 2048, XTEST_DH_GK_DATA_SUBPRIME(keygen_dh2048_subprime) }
 	};
 
 
@@ -4617,7 +4620,7 @@
 
 		if (!ADBG_EXPECT_TRUE(c,
 			generate_and_test_key(c, session, TEE_TYPE_DH_KEYPAIR,
-				((*key_types[n].private_bits) != 0),
+				*key_types[n].private_bits,
 				key_types[n]. key_size, params, param_count)))
 			break;