mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-05 10:40:52 +02:00
handling unaligned ChaCha input key buffer
This commit is contained in:
@@ -52,7 +52,7 @@ Public domain.
|
||||
|
||||
#define U32C(v) (v##U)
|
||||
#define U32V(v) ((word32)(v) & U32C(0xFFFFFFFF))
|
||||
#define U8TO32_LITTLE(p) LITTLE32(((const word32*)(p))[0])
|
||||
#define U8TO32_LITTLE(p) LITTLE32(readUnalignedWord32(p))
|
||||
|
||||
#define ROTATE(v,c) rotlFixed(v, c)
|
||||
#define XOR(v,w) ((v) ^ (w))
|
||||
|
||||
@@ -4487,6 +4487,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t asn_test(void)
|
||||
#ifdef WOLFSSL_MD2
|
||||
static wc_test_ret_t md2_kat_test(void)
|
||||
{
|
||||
wc_test_ret_t ret = 0;
|
||||
wc_Md2 md2;
|
||||
byte hash[WC_MD2_DIGEST_SIZE];
|
||||
|
||||
@@ -10815,6 +10816,45 @@ static wc_test_ret_t chacha_vector_test(ChaCha* enc, ChaCha* dec)
|
||||
if (XMEMCMP(plain + 64, sliver, 64))
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
|
||||
/* Test unaligned input buffer case */
|
||||
{
|
||||
ChaCha encAligned;
|
||||
ChaCha encUnaligned;
|
||||
byte keyBuf[32 + 1];
|
||||
byte ivBuf[12 + 1];
|
||||
byte pt[64];
|
||||
byte ctAligned[64];
|
||||
byte ctUnaligned[64];
|
||||
|
||||
XMEMCPY(keyBuf + 1, keys[0], 32);
|
||||
XMEMCPY(ivBuf + 1, ivs[2], 12);
|
||||
XMEMSET(pt, 0xa5, sizeof(pt));
|
||||
|
||||
ret = wc_Chacha_SetKey(&encAligned, keys[0], 32);
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_Chacha_SetKey(&encUnaligned, keyBuf + 1, 32);
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
|
||||
ret = wc_Chacha_SetIV(&encAligned, ivs[2], 0);
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_Chacha_SetIV(&encUnaligned, ivBuf + 1, 0);
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
|
||||
ret = wc_Chacha_Process(&encAligned, ctAligned, pt, sizeof(pt));
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
ret = wc_Chacha_Process(&encUnaligned, ctUnaligned, pt, sizeof(pt));
|
||||
if (ret != 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
|
||||
if (XMEMCMP(ctAligned, ctUnaligned, sizeof(ctAligned)))
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
}
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
@@ -23345,6 +23385,27 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t XChaCha_test(void) {
|
||||
if (XMEMCMP(buf2, Plaintext, sizeof Plaintext))
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
|
||||
/* Test unaligned input buffer case */
|
||||
{
|
||||
byte keyBuf[sizeof Key + 1];
|
||||
byte ivBuf[sizeof IV + 1];
|
||||
|
||||
XMEMCPY(keyBuf + 1, Key, sizeof Key);
|
||||
XMEMCPY(ivBuf + 1, IV, sizeof IV);
|
||||
|
||||
ret = wc_XChacha_SetKey(chacha, keyBuf + 1, sizeof Key,
|
||||
ivBuf + 1, sizeof IV, 0);
|
||||
if (ret < 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
|
||||
ret = wc_Chacha_Process(chacha, buf2, Plaintext, sizeof Plaintext);
|
||||
if (ret < 0)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||
|
||||
if (XMEMCMP(buf2, Ciphertext, sizeof Plaintext))
|
||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||
|
||||
Reference in New Issue
Block a user