forked from wolfSSL/wolfssl
fix rabbit and hc128 CTaoCrypt test buffers for aligned access only, allow TLS on intel w/o aligned stream buffers, otherwise align
This commit is contained in:
@@ -1194,11 +1194,16 @@ int hc128_test(void)
|
|||||||
HC128 enc;
|
HC128 enc;
|
||||||
HC128 dec;
|
HC128 dec;
|
||||||
|
|
||||||
Hc128_SetKey(&enc, (byte*)keys[i], (byte*)ivs[i]);
|
/* align keys/ivs in plain/cipher buffers */
|
||||||
Hc128_SetKey(&dec, (byte*)keys[i], (byte*)ivs[i]);
|
memcpy(plain, keys[i], 16);
|
||||||
|
memcpy(cipher, ivs[i], 16);
|
||||||
|
|
||||||
Hc128_Process(&enc, cipher, (byte*)test_hc128[i].input,
|
Hc128_SetKey(&enc, plain, cipher);
|
||||||
(word32)test_hc128[i].outLen);
|
Hc128_SetKey(&dec, plain, cipher);
|
||||||
|
|
||||||
|
/* align input */
|
||||||
|
memcpy(plain, test_hc128[i].input, test_hc128[i].outLen);
|
||||||
|
Hc128_Process(&enc, cipher, plain, (word32)test_hc128[i].outLen);
|
||||||
Hc128_Process(&dec, plain, cipher, (word32)test_hc128[i].outLen);
|
Hc128_Process(&dec, plain, cipher, (word32)test_hc128[i].outLen);
|
||||||
|
|
||||||
if (memcmp(plain, test_hc128[i].input, test_hc128[i].outLen))
|
if (memcmp(plain, test_hc128[i].input, test_hc128[i].outLen))
|
||||||
@@ -1219,22 +1224,17 @@ int rabbit_test(void)
|
|||||||
byte cipher[16];
|
byte cipher[16];
|
||||||
byte plain[16];
|
byte plain[16];
|
||||||
|
|
||||||
const char* keys[] = /* align with 3 extra bytes cause null is added */
|
const char* keys[] =
|
||||||
{
|
{
|
||||||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||||
"\x00\x00\x00",
|
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
|
||||||
"\x00\x00\x00",
|
|
||||||
"\xAC\xC3\x51\xDC\xF1\x62\xFC\x3B\xFE\x36\x3D\x2E\x29\x13\x28\x91"
|
"\xAC\xC3\x51\xDC\xF1\x62\xFC\x3B\xFE\x36\x3D\x2E\x29\x13\x28\x91"
|
||||||
"\x00\x00\x00"
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ivs[] = /* align with 3 extra bytes casue null is added */
|
const char* ivs[] =
|
||||||
{
|
{
|
||||||
"\x00\x00\x00\x00\x00\x00\x00\x00"
|
"\x00\x00\x00\x00\x00\x00\x00\x00",
|
||||||
"\x00\x00\x00",
|
"\x59\x7E\x26\xC1\x75\xF5\x73\xC3",
|
||||||
"\x59\x7E\x26\xC1\x75\xF5\x73\xC3"
|
|
||||||
"\x00\x00\x00",
|
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1265,12 +1265,21 @@ int rabbit_test(void)
|
|||||||
for (i = 0; i < times; ++i) {
|
for (i = 0; i < times; ++i) {
|
||||||
Rabbit enc;
|
Rabbit enc;
|
||||||
Rabbit dec;
|
Rabbit dec;
|
||||||
|
byte* iv;
|
||||||
|
|
||||||
RabbitSetKey(&enc, (byte*)keys[i], (byte*)ivs[i]);
|
/* align keys/ivs in plain/cipher buffers */
|
||||||
RabbitSetKey(&dec, (byte*)keys[i], (byte*)ivs[i]);
|
memcpy(plain, keys[i], 16);
|
||||||
|
if (ivs[i]) {
|
||||||
|
memcpy(cipher, ivs[i], 8);
|
||||||
|
iv = cipher;
|
||||||
|
} else
|
||||||
|
iv = NULL;
|
||||||
|
RabbitSetKey(&enc, plain, iv);
|
||||||
|
RabbitSetKey(&dec, plain, iv);
|
||||||
|
|
||||||
RabbitProcess(&enc, cipher, (byte*)test_rabbit[i].input,
|
/* align input */
|
||||||
(word32)test_rabbit[i].outLen);
|
memcpy(plain, test_rabbit[i].input, test_rabbit[i].outLen);
|
||||||
|
RabbitProcess(&enc, cipher, plain, (word32)test_rabbit[i].outLen);
|
||||||
RabbitProcess(&dec, plain, cipher, (word32)test_rabbit[i].outLen);
|
RabbitProcess(&dec, plain, cipher, (word32)test_rabbit[i].outLen);
|
||||||
|
|
||||||
if (memcmp(plain, test_rabbit[i].input, test_rabbit[i].outLen))
|
if (memcmp(plain, test_rabbit[i].input, test_rabbit[i].outLen))
|
||||||
|
@@ -72,6 +72,13 @@
|
|||||||
|
|
||||||
#include <cyassl/ctaocrypt/visibility.h>
|
#include <cyassl/ctaocrypt/visibility.h>
|
||||||
|
|
||||||
|
/* stream ciphers except arc4 need 32bit alignment, intel ok without */
|
||||||
|
#if defined(__x86_64__) || defined(__ia64__) || defined(__i386__)
|
||||||
|
#define NO_XSTREAM_ALIGNMENT
|
||||||
|
#else
|
||||||
|
#define XSTREAM_ALIGNMENT
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef IPHONE
|
#ifdef IPHONE
|
||||||
#define SIZEOF_LONG_LONG 8
|
#define SIZEOF_LONG_LONG 8
|
||||||
#endif
|
#endif
|
||||||
|
@@ -227,7 +227,8 @@ enum {
|
|||||||
DYNAMIC_TYPE_DTLS_POOL = 34,
|
DYNAMIC_TYPE_DTLS_POOL = 34,
|
||||||
DYNAMIC_TYPE_SOCKADDR = 35,
|
DYNAMIC_TYPE_SOCKADDR = 35,
|
||||||
DYNAMIC_TYPE_LIBZ = 36,
|
DYNAMIC_TYPE_LIBZ = 36,
|
||||||
DYNAMIC_TYPE_ECC = 37
|
DYNAMIC_TYPE_ECC = 37,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER = 38
|
||||||
};
|
};
|
||||||
|
|
||||||
/* stack protection */
|
/* stack protection */
|
||||||
|
@@ -3000,12 +3000,36 @@ static INLINE int Encrypt(CYASSL* ssl, byte* out, const byte* input, word32 sz)
|
|||||||
|
|
||||||
#ifdef HAVE_HC128
|
#ifdef HAVE_HC128
|
||||||
case hc128:
|
case hc128:
|
||||||
|
#ifdef XSTREAM_ALIGNMENT
|
||||||
|
if ((word)input % 4) {
|
||||||
|
byte* tmp = (byte*)XMALLOC(sz, ssl->heap,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (tmp == NULL) return MEMORY_E;
|
||||||
|
XMEMCPY(tmp, input, sz);
|
||||||
|
Hc128_Process(ssl->encrypt.hc128, tmp, tmp, sz);
|
||||||
|
XMEMCPY(out, tmp, sz);
|
||||||
|
XFREE(tmp, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
Hc128_Process(ssl->encrypt.hc128, out, input, sz);
|
Hc128_Process(ssl->encrypt.hc128, out, input, sz);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BUILD_RABBIT
|
#ifdef BUILD_RABBIT
|
||||||
case rabbit:
|
case rabbit:
|
||||||
|
#ifdef XSTREAM_ALIGNMENT
|
||||||
|
if ((word)input % 4) {
|
||||||
|
byte* tmp = (byte*)XMALLOC(sz, ssl->heap,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (tmp == NULL) return MEMORY_E;
|
||||||
|
XMEMCPY(tmp, input, sz);
|
||||||
|
RabbitProcess(ssl->encrypt.rabbit, tmp, tmp, sz);
|
||||||
|
XMEMCPY(out, tmp, sz);
|
||||||
|
XFREE(tmp, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
RabbitProcess(ssl->encrypt.rabbit, out, input, sz);
|
RabbitProcess(ssl->encrypt.rabbit, out, input, sz);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user