aes selftest: determine selftest loop limit in runtime

Signed-off-by: Yanray Wang <yanray.wang@arm.com>
This commit is contained in:
Yanray Wang 2023-05-11 12:04:23 +08:00
parent 62c9991a5b
commit 59c2dfa48c

View File

@ -1820,7 +1820,11 @@ int mbedtls_aes_self_test(int verbose)
/* /*
* ECB mode * ECB mode
*/ */
for (i = 0; i < 6; i++) { {
static const int num_tests =
sizeof(aes_test_ecb_dec) / sizeof(*aes_test_ecb_dec);
for (i = 0; i < num_tests << 1; i++) {
u = i >> 1; u = i >> 1;
keybits = 128 + u * 64; keybits = 128 + u * 64;
mode = i & 1; mode = i & 1;
@ -1830,13 +1834,6 @@ int mbedtls_aes_self_test(int verbose)
(mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc"); (mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc");
} }
#if defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
if (keybits > 128) {
mbedtls_printf("skipped\n");
continue;
}
#endif /* MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH */
memset(buf, 0, 16); memset(buf, 0, 16);
if (mode == MBEDTLS_AES_DECRYPT) { if (mode == MBEDTLS_AES_DECRYPT) {
@ -1879,12 +1876,17 @@ int mbedtls_aes_self_test(int verbose)
if (verbose != 0) { if (verbose != 0) {
mbedtls_printf("\n"); mbedtls_printf("\n");
} }
}
#if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_CIPHER_MODE_CBC)
/* /*
* CBC mode * CBC mode
*/ */
for (i = 0; i < 6; i++) { {
static const int num_tests =
sizeof(aes_test_cbc_dec) / sizeof(*aes_test_cbc_dec);
for (i = 0; i < num_tests << 1; i++) {
u = i >> 1; u = i >> 1;
keybits = 128 + u * 64; keybits = 128 + u * 64;
mode = i & 1; mode = i & 1;
@ -1894,13 +1896,6 @@ int mbedtls_aes_self_test(int verbose)
(mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc"); (mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc");
} }
#if defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
if (keybits > 128) {
mbedtls_printf("skipped\n");
continue;
}
#endif /* MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH */
memset(iv, 0, 16); memset(iv, 0, 16);
memset(prv, 0, 16); memset(prv, 0, 16);
memset(buf, 0, 16); memset(buf, 0, 16);
@ -1954,13 +1949,18 @@ int mbedtls_aes_self_test(int verbose)
if (verbose != 0) { if (verbose != 0) {
mbedtls_printf("\n"); mbedtls_printf("\n");
} }
}
#endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_CIPHER_MODE_CBC */
#if defined(MBEDTLS_CIPHER_MODE_CFB) #if defined(MBEDTLS_CIPHER_MODE_CFB)
/* /*
* CFB128 mode * CFB128 mode
*/ */
for (i = 0; i < 6; i++) { {
static const int num_tests =
sizeof(aes_test_cfb128_key) / sizeof(*aes_test_cfb128_key);
for (i = 0; i < num_tests << 1; i++) {
u = i >> 1; u = i >> 1;
keybits = 128 + u * 64; keybits = 128 + u * 64;
mode = i & 1; mode = i & 1;
@ -1970,13 +1970,6 @@ int mbedtls_aes_self_test(int verbose)
(mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc"); (mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc");
} }
#if defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
if (keybits > 128) {
mbedtls_printf("skipped\n");
continue;
}
#endif /* MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH */
memcpy(iv, aes_test_cfb128_iv, 16); memcpy(iv, aes_test_cfb128_iv, 16);
memcpy(key, aes_test_cfb128_key[u], keybits / 8); memcpy(key, aes_test_cfb128_key[u], keybits / 8);
@ -2020,13 +2013,18 @@ int mbedtls_aes_self_test(int verbose)
if (verbose != 0) { if (verbose != 0) {
mbedtls_printf("\n"); mbedtls_printf("\n");
} }
}
#endif /* MBEDTLS_CIPHER_MODE_CFB */ #endif /* MBEDTLS_CIPHER_MODE_CFB */
#if defined(MBEDTLS_CIPHER_MODE_OFB) #if defined(MBEDTLS_CIPHER_MODE_OFB)
/* /*
* OFB mode * OFB mode
*/ */
for (i = 0; i < 6; i++) { {
static const int num_tests =
sizeof(aes_test_ofb_key) / sizeof(*aes_test_ofb_key);
for (i = 0; i < num_tests << 1; i++) {
u = i >> 1; u = i >> 1;
keybits = 128 + u * 64; keybits = 128 + u * 64;
mode = i & 1; mode = i & 1;
@ -2036,13 +2034,6 @@ int mbedtls_aes_self_test(int verbose)
(mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc"); (mode == MBEDTLS_AES_DECRYPT) ? "dec" : "enc");
} }
#if defined(MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH)
if (keybits > 128) {
mbedtls_printf("skipped\n");
continue;
}
#endif /* MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH */
memcpy(iv, aes_test_ofb_iv, 16); memcpy(iv, aes_test_ofb_iv, 16);
memcpy(key, aes_test_ofb_key[u], keybits / 8); memcpy(key, aes_test_ofb_key[u], keybits / 8);
@ -2086,13 +2077,18 @@ int mbedtls_aes_self_test(int verbose)
if (verbose != 0) { if (verbose != 0) {
mbedtls_printf("\n"); mbedtls_printf("\n");
} }
}
#endif /* MBEDTLS_CIPHER_MODE_OFB */ #endif /* MBEDTLS_CIPHER_MODE_OFB */
#if defined(MBEDTLS_CIPHER_MODE_CTR) #if defined(MBEDTLS_CIPHER_MODE_CTR)
/* /*
* CTR mode * CTR mode
*/ */
for (i = 0; i < 6; i++) { {
static const int num_tests =
sizeof(aes_test_ctr_key) / sizeof(*aes_test_ctr_key);
for (i = 0; i < num_tests << 1; i++) {
u = i >> 1; u = i >> 1;
mode = i & 1; mode = i & 1;
@ -2134,6 +2130,7 @@ int mbedtls_aes_self_test(int verbose)
mbedtls_printf("passed\n"); mbedtls_printf("passed\n");
} }
} }
}
if (verbose != 0) { if (verbose != 0) {
mbedtls_printf("\n"); mbedtls_printf("\n");
@ -2141,14 +2138,14 @@ int mbedtls_aes_self_test(int verbose)
#endif /* MBEDTLS_CIPHER_MODE_CTR */ #endif /* MBEDTLS_CIPHER_MODE_CTR */
#if defined(MBEDTLS_CIPHER_MODE_XTS) #if defined(MBEDTLS_CIPHER_MODE_XTS)
/*
* XTS mode
*/
{ {
static const int num_tests = static const int num_tests =
sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key);
mbedtls_aes_xts_context ctx_xts; mbedtls_aes_xts_context ctx_xts;
/*
* XTS mode
*/
mbedtls_aes_xts_init(&ctx_xts); mbedtls_aes_xts_init(&ctx_xts);
for (i = 0; i < num_tests << 1; i++) { for (i = 0; i < num_tests << 1; i++) {