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