mirror of https://github.com/wolfSSL/wolfssl.git
linuxkm/lkcapi_glue.c: add native test coverage for WOLFSSL_AESXTS_STREAM.
wolfcrypt/test/test.c: * add WOLFSSL_AESXTS_STREAM testing to the LARGE_XTS_SZ exercise in aes_xts_128_test(). * add the LARGE_XTS_SZ exercise to aes_xts_256_test(). * add aes_xts_192_test(). * fix -Werror=frame-larger-than=2048 in ed25519_test().pull/7522/head
parent
4331bc092b
commit
1469aab109
|
@ -799,7 +799,7 @@ static int gcmAesAead_loaded = 0;
|
|||
(defined(LINUXKM_LKCAPI_REGISTER_ALL) || \
|
||||
defined(LINUXKM_LKCAPI_REGISTER_AESXTS))
|
||||
|
||||
#ifndef WOLFSSL_AESGCM_STREAM
|
||||
#ifndef WOLFSSL_AESXTS_STREAM
|
||||
#error LKCAPI registration of AES-XTS requires WOLFSSL_AESXTS_STREAM (--enable-aesxts-stream).
|
||||
#endif
|
||||
|
||||
|
@ -2022,6 +2022,25 @@ static int aes_xts_128_test(void)
|
|||
|
||||
XMEMSET(buf, 0, AES_XTS_128_TEST_BUF_SIZ);
|
||||
|
||||
XMEMCPY(iv, i2, sizeof(i2));
|
||||
ret = wc_AesXtsEncryptInit(aes, iv, sizeof(iv));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsEncryptUpdate(aes, buf, p2, AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsEncryptUpdate(aes, buf + AES_BLOCK_SIZE,
|
||||
p2 + AES_BLOCK_SIZE,
|
||||
sizeof(p2) - AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
if (XMEMCMP(c2, buf, sizeof(c2))) {
|
||||
ret = LINUXKM_LKCAPI_AES_KAT_MISMATCH_E;
|
||||
goto out;
|
||||
}
|
||||
|
||||
XMEMSET(buf, 0, AES_XTS_128_TEST_BUF_SIZ);
|
||||
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_ENCRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
|
@ -2173,6 +2192,7 @@ static int aes_xts_128_test(void)
|
|||
#define LARGE_XTS_SZ 1024
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
|
||||
large_input = (byte *)XMALLOC(LARGE_XTS_SZ, NULL,
|
||||
DYNAMIC_TYPE_TMP_BUFFER);
|
||||
|
@ -2184,6 +2204,38 @@ static int aes_xts_128_test(void)
|
|||
for (i = 0; i < (int)LARGE_XTS_SZ; i++)
|
||||
large_input[i] = (byte)i;
|
||||
|
||||
/* first, encrypt block by block then decrypt with a one-shot call. */
|
||||
for (j = 16; j < (int)LARGE_XTS_SZ; j++) {
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_ENCRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
XMEMCPY(iv, i1, sizeof(i1));
|
||||
ret = wc_AesXtsEncryptInit(aes, iv, sizeof(iv));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
for (k = 0; k < j; k += AES_BLOCK_SIZE) {
|
||||
ret = wc_AesXtsEncryptUpdate(aes, large_input + k, large_input + k, (j - k) < AES_BLOCK_SIZE*2 ? j - k : AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
if ((j - k) < AES_BLOCK_SIZE*2)
|
||||
break;
|
||||
}
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_DECRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsDecrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
for (i = 0; i < j; i++) {
|
||||
if (large_input[i] != (byte)i) {
|
||||
ret = LINUXKM_LKCAPI_AES_KAT_MISMATCH_E;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* second, encrypt with a one-shot call then decrypt block by block. */
|
||||
for (j = 16; j < (int)LARGE_XTS_SZ; j++) {
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_ENCRYPTION);
|
||||
if (ret != 0)
|
||||
|
@ -2192,14 +2244,20 @@ static int aes_xts_128_test(void)
|
|||
sizeof(i1));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_DECRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsDecrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
XMEMCPY(iv, i1, sizeof(i1));
|
||||
ret = wc_AesXtsDecryptInit(aes, iv, sizeof(iv));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
for (k = 0; k < j; k += AES_BLOCK_SIZE) {
|
||||
ret = wc_AesXtsDecryptUpdate(aes, large_input + k, large_input + k, (j - k) < AES_BLOCK_SIZE*2 ? j - k : AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
if ((j - k) < AES_BLOCK_SIZE*2)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < j; i++) {
|
||||
if (large_input[i] != (byte)i) {
|
||||
ret = LINUXKM_LKCAPI_AES_KAT_MISMATCH_E;
|
||||
|
@ -2425,6 +2483,7 @@ static int aes_xts_256_test(void)
|
|||
struct crypto_skcipher *tfm = NULL;
|
||||
struct skcipher_request *req = NULL;
|
||||
u8 iv[AES_BLOCK_SIZE];
|
||||
byte* large_input = NULL;
|
||||
|
||||
/* 256 key tests */
|
||||
static const unsigned char k1[] = {
|
||||
|
@ -2543,6 +2602,25 @@ static int aes_xts_256_test(void)
|
|||
goto out;
|
||||
}
|
||||
|
||||
XMEMSET(buf, 0, AES_XTS_256_TEST_BUF_SIZ);
|
||||
|
||||
XMEMCPY(iv, i2, sizeof(i2));
|
||||
ret = wc_AesXtsEncryptInit(aes, iv, sizeof(iv));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsEncryptUpdate(aes, buf, p2, AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsEncryptUpdate(aes, buf + AES_BLOCK_SIZE,
|
||||
p2 + AES_BLOCK_SIZE,
|
||||
sizeof(p2) - AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
if (XMEMCMP(c2, buf, sizeof(c2))) {
|
||||
ret = LINUXKM_LKCAPI_AES_KAT_MISMATCH_E;
|
||||
goto out;
|
||||
}
|
||||
|
||||
XMEMSET(buf, 0, AES_XTS_256_TEST_BUF_SIZ);
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_ENCRYPTION);
|
||||
if (ret != 0)
|
||||
|
@ -2596,6 +2674,85 @@ static int aes_xts_256_test(void)
|
|||
goto out;
|
||||
}
|
||||
|
||||
{
|
||||
#define LARGE_XTS_SZ 1024
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
|
||||
large_input = (byte *)XMALLOC(LARGE_XTS_SZ, NULL,
|
||||
DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (large_input == NULL) {
|
||||
ret = MEMORY_E;
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (i = 0; i < (int)LARGE_XTS_SZ; i++)
|
||||
large_input[i] = (byte)i;
|
||||
|
||||
/* first, encrypt block by block then decrypt with a one-shot call. */
|
||||
for (j = 16; j < (int)LARGE_XTS_SZ; j++) {
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_ENCRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
XMEMCPY(iv, i1, sizeof(i1));
|
||||
ret = wc_AesXtsEncryptInit(aes, iv, sizeof(iv));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
for (k = 0; k < j; k += AES_BLOCK_SIZE) {
|
||||
ret = wc_AesXtsEncryptUpdate(aes, large_input + k, large_input + k, (j - k) < AES_BLOCK_SIZE*2 ? j - k : AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
if ((j - k) < AES_BLOCK_SIZE*2)
|
||||
break;
|
||||
}
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_DECRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsDecrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
for (i = 0; i < j; i++) {
|
||||
if (large_input[i] != (byte)i) {
|
||||
ret = LINUXKM_LKCAPI_AES_KAT_MISMATCH_E;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* second, encrypt with a one-shot call then decrypt block by block. */
|
||||
for (j = 16; j < (int)LARGE_XTS_SZ; j++) {
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_ENCRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsEncrypt(aes, large_input, large_input, j, i1,
|
||||
sizeof(i1));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
ret = wc_AesXtsSetKeyNoInit(aes, k1, sizeof(k1), AES_DECRYPTION);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
XMEMCPY(iv, i1, sizeof(i1));
|
||||
ret = wc_AesXtsDecryptInit(aes, iv, sizeof(iv));
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
for (k = 0; k < j; k += AES_BLOCK_SIZE) {
|
||||
ret = wc_AesXtsDecryptUpdate(aes, large_input + k, large_input + k, (j - k) < AES_BLOCK_SIZE*2 ? j - k : AES_BLOCK_SIZE, iv);
|
||||
if (ret != 0)
|
||||
goto out;
|
||||
if ((j - k) < AES_BLOCK_SIZE*2)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < j; i++) {
|
||||
if (large_input[i] != (byte)i) {
|
||||
ret = LINUXKM_LKCAPI_AES_KAT_MISMATCH_E;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* now the kernel crypto part */
|
||||
|
||||
enc2 = XMALLOC(sizeof(p1), NULL, DYNAMIC_TYPE_AES);
|
||||
|
@ -2775,6 +2932,9 @@ static int aes_xts_256_test(void)
|
|||
|
||||
out:
|
||||
|
||||
if (large_input)
|
||||
XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
|
||||
if (aes_inited)
|
||||
wc_AesXtsFree(aes);
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue