File libica-06-fips-update-add-one-XTS-test-from-SUSE-CAVP-testi.patch of Package libica.37514

From a53f55dcb2a68052d0454466c60c49aaca7afa4c Mon Sep 17 00:00:00 2001
From: Joerg Schmidbauer <jschmidb@de.ibm.com>
Date: Thu, 13 Feb 2025 17:52:03 +0100
Subject: [PATCH] TEMP TEST ONLY: add one XTS test from SUSE CAVP testing.

Signed-off-by: Joerg Schmidbauer <jschmidb@de.ibm.com>
---
 test/aes_xts_test.c | 166 +++++++++++++++++++++++++++++++++++++-------
 1 file changed, 141 insertions(+), 25 deletions(-)

diff --git a/test/aes_xts_test.c b/test/aes_xts_test.c
index 81e967a..1da576a 100644
--- a/test/aes_xts_test.c
+++ b/test/aes_xts_test.c
@@ -305,6 +305,38 @@ unsigned char NIST_TEST_RESULT_XTS_E5[] = {
 	0x69, 0x87, 0x83, 0xbf, 0xa4, 0x05, 0x46, 0xe3,
 };
 
+/* XTS data -6- AES256 */
+unsigned char NIST_KEY_XTS_E6[] = {
+	0xAE,0xC7,0x69,0x6E,0x56,0x0D,0xC6,0x42,0x28,0x7A,0x5C,0x8E,0x2E,0x02,0xC2,0x6F,
+	0x62,0xFB,0x1C,0x47,0x0A,0x03,0xF3,0x2D,0xAE,0x7B,0x52,0x16,0x33,0x80,0x4B,0x4A,
+};
+
+unsigned char NIST_TWEAK_XTS_E6[] = {
+	0x95,0xB1,0xE0,0x5D,0x0D,0xBA,0xCF,0x4E,0x50,0xF9,0x2B,0x12,0x4B,0xBA,0x87,0xCD,
+};
+
+unsigned char NIST_EXPECTED_TWEAK_XTS_E6[] = {
+	0x95,0xB1,0xE0,0x5D,0x0D,0xBA,0xCF,0x4E,0x50,0xF9,0x2B,0x12,0x4B,0xBA,0x87,0xCD,
+};
+
+unsigned char NIST_TEST_DATA_XTS_E6[] = {
+	0x60,0x43,0x6d,0xb6,0x60,0xa7,0xfd,0xf2,0xf5,0x31,0x1b,0x0b,0x78,0x94,0xa9,0x61,
+	0x51,0x14,0x93,0x26,0xb2,0x44,0x60,0xb5,0xfa,0x75,0xf9,0xa9,0x61,0x06,0x06,0xa9,
+	0xdf,0x3d,0xa5,0xa4,0xd4,0xd9,0xa7,0x85,0xd0,0xe6,0xb0,0x90,0x2e,0x45,0xfd,0xa4,
+	0x6d,0xbc,0xe2,0x49,0x21,0x2c,0x90,0x2b,0x18,0x94,0x14,0x7b,0x62,0x76,0x19,0x67,
+	0xcf,0x79,0x48,0x7b,0xf6,0x24,0x46,0xdb,0xc5,0x44,0x11,0xeb,0x4d,0x7a,0x6f,0x94,
+	0x04,0x50,0x86,0xf7,0x53,0xd7,0xa9,
+};
+
+unsigned char NIST_TEST_RESULT_XTS_E6[] = {
+	0xF7,0xA0,0xB0,0x2E,0xC0,0x1B,0x93,0xB1,0xF8,0xEA,0x60,0x01,0xE7,0x7E,0xC9,0xA2,
+	0x0F,0x5E,0x92,0x96,0x05,0x7F,0x6E,0x5E,0xF5,0x2A,0x89,0xEA,0xBF,0xBF,0x2D,0x89,
+	0x7C,0x44,0x0D,0xF7,0xA5,0xD2,0xCE,0xF5,0x92,0x22,0xC6,0x78,0x61,0xE9,0x58,0x38,
+	0x65,0x11,0xD5,0x60,0x09,0xC7,0x8F,0x04,0x98,0x55,0x00,0x8F,0x10,0x26,0xD3,0xBF,
+	0x62,0xC1,0xEB,0x3F,0xB7,0x2F,0xB4,0xE5,0xBF,0x9C,0x5E,0x94,0x84,0x06,0xB4,0xF6,
+	0xB9,0x9A,0x10,0x93,0x7E,0x8F,0x4A,
+};
+
 void dump_xts_data(unsigned char *tweak, unsigned int tweak_length,
 		   unsigned char *key, unsigned int key_length,
 		   unsigned char *input_data, unsigned int data_length,
@@ -349,6 +381,11 @@ void get_sizes(unsigned int *data_length, unsigned int *tweak_length,
 			*tweak_length = sizeof(NIST_TWEAK_XTS_E5);
 			*key_length = sizeof(NIST_KEY_XTS_E5);
 			break;
+		case 6:
+			*data_length = sizeof(NIST_TEST_DATA_XTS_E6);
+			*tweak_length = sizeof(NIST_TWEAK_XTS_E6);
+			*key_length = sizeof(NIST_KEY_XTS_E6);
+			break;
 		default:
 			*data_length = 0;
 			*tweak_length = 0;
@@ -406,8 +443,82 @@ void load_test_data(unsigned char *data, unsigned int data_length,
 			       tweak_length);
 			memcpy(key, NIST_KEY_XTS_E5, key_length);
 			break;
+		case 6:
+			memcpy(data, NIST_TEST_DATA_XTS_E6, data_length);
+			memcpy(result, NIST_TEST_RESULT_XTS_E6, data_length);
+			memcpy(tweak, NIST_TWEAK_XTS_E6, tweak_length);
+			memcpy(expected_tweak, NIST_EXPECTED_TWEAK_XTS_E6,
+			       tweak_length);
+			memcpy(key, NIST_KEY_XTS_E6, key_length);
+			break;
+	}
+
+}
+
+int kat_nist_decrypt_xts(void)
+{
+	unsigned int data_length;
+	unsigned int tweak_length;
+	unsigned int key_length;
+
+	printf("*** kat_nist_decrypt_xts\n");
+
+	get_sizes(&data_length, &tweak_length, &key_length, 6);
+
+	unsigned char tweak[tweak_length];
+	unsigned char tmp_tweak[tweak_length];
+	unsigned char expected_tweak[tweak_length];
+	unsigned char key[key_length];
+	unsigned char input_data[data_length];
+	unsigned char encrypt[data_length];
+	unsigned char decrypt[data_length];
+	unsigned char result[data_length];
+
+	int rc = 0;
+
+	memset(encrypt, 0x00, data_length);
+	memset(decrypt, 0x00, data_length);
+
+	load_test_data(input_data, data_length, result, tweak, expected_tweak,
+		       tweak_length, key, key_length, 6);
+	memcpy(tmp_tweak, tweak, tweak_length);
+
+	VV_(printf("Test Parameters for iteration = %i\n", 6));
+
+	memcpy(tmp_tweak, tweak, tweak_length);
+	rc = ica_aes_xts(result, decrypt, data_length,
+			 key, key+(key_length/2), (key_length/2),
+			 tmp_tweak, 0);
+	printf("*** rc from ica_aes_xts = %d\n", rc);
+	if (rc) {
+		VV_(printf("ica_aes_xts decrypt failed with rc = %i\n", rc));
+		dump_xts_data(tweak, tweak_length, key, key_length, result,
+			      data_length, decrypt);
+		return TEST_FAIL;
 	}
 
+	if (!rc) {
+		VV_(printf("Decrypt:\n"));
+		dump_xts_data(tweak, tweak_length, key, key_length, result,
+			      data_length, decrypt);
+	}
+
+	if (memcmp(decrypt, input_data, data_length)) {
+		printf("*** should not be here ...\n");
+		VV_(printf("Decryption Result does not match the original data!\n"));
+		VV_(printf("Original data:\n"));
+		dump_array(input_data, data_length);
+		VV_(printf("Decryption Result:\n"));
+		dump_array(decrypt, data_length);
+		rc++;
+	} else {
+		printf("*** looks like it works.\n");
+	}
+
+	if (rc)
+		return TEST_FAIL;
+
+	return TEST_SUCC;
 }
 
 int kat_aes_xts(int iteration)
@@ -803,31 +914,36 @@ int main(int argc, char **argv)
 
 	set_verbosity(argc, argv);
 
-	for (iteration = 1; iteration <= NR_TESTS; iteration++) {
-		rc = kat_aes_xts(iteration);
-		if (rc) {
-			V_(printf("kat_aes_xts failed with rc = %i\n", rc));
-			error_count++;
-		}
-	}
-
-	for (iteration = 1; iteration <= NR_TESTS; iteration++) {
-		rc = kat_aes_xts_ex(iteration);
-		if (rc) {
-			V_(printf("kat_aes_xts_ex failed with rc = %i\n", rc));
-			error_count++;
-		}
-	}
-
-	for (iteration = 1; iteration <= NR_RANDOM_TESTS; iteration++) {
-		rc = random_aes_xts(iteration, data_length);
-		if (rc) {
-			V_(printf("random_aes_xts failed with rc = %i\n", rc));
-			error_count++;
-			goto out;
-		}
-		data_length += sizeof(ica_aes_vector_t) / 2;
-	}
+//	for (iteration = 1; iteration <= NR_TESTS; iteration++) {
+//		rc = kat_aes_xts(iteration);
+//		if (rc) {
+//			V_(printf("kat_aes_xts failed with rc = %i\n", rc));
+//			error_count++;
+//		}
+//	}
+
+	/* Perform NIST decrypt test */
+	rc = kat_nist_decrypt_xts();
+
+
+
+//	for (iteration = 1; iteration <= NR_TESTS; iteration++) {
+//		rc = kat_aes_xts_ex(iteration);
+//		if (rc) {
+//			V_(printf("kat_aes_xts_ex failed with rc = %i\n", rc));
+//			error_count++;
+//		}
+//	}
+
+//	for (iteration = 1; iteration <= NR_RANDOM_TESTS; iteration++) {
+//		rc = random_aes_xts(iteration, data_length);
+//		if (rc) {
+//			V_(printf("random_aes_xts failed with rc = %i\n", rc));
+//			error_count++;
+//			goto out;
+//		}
+//		data_length += sizeof(ica_aes_vector_t) / 2;
+//	}
 
 out:
 	if (error_count) {
-- 
2.44.0.windows.1

openSUSE Build Service is sponsored by