fix for cfb1 mode and add EVP tests

This commit is contained in:
Jacob Barthelmeh
2020-01-29 14:04:58 -07:00
committed by Eric Blankenhorn
parent d6be24c4f7
commit d7c1b9561f
2 changed files with 80 additions and 8 deletions

View File

@ -7552,6 +7552,7 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
word32 sz, byte dir) word32 sz, byte dir)
{ {
byte tmp; byte tmp;
byte cur = 0; /* hold current work in order to handle inline in=out */
byte* pt; byte* pt;
int bit = 7; int bit = 7;
@ -7563,7 +7564,6 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
return 0; return 0;
} }
out[0] = 0;
while (sz > 0) { while (sz > 0) {
wc_AesEncryptDirect(aes, (byte*)aes->tmp, (byte*)aes->reg); wc_AesEncryptDirect(aes, (byte*)aes->tmp, (byte*)aes->reg);
if (dir == AES_DECRYPTION) { if (dir == AES_DECRYPTION) {
@ -7572,6 +7572,7 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
/* LSB + CAT */ /* LSB + CAT */
tmp = (0X01 << bit) & in[0]; tmp = (0X01 << bit) & in[0];
tmp = tmp >> bit; tmp = tmp >> bit;
tmp &= 0x01;
shiftLeftArray((byte*)aes->reg, 1); shiftLeftArray((byte*)aes->reg, 1);
pt[AES_BLOCK_SIZE - 1] |= tmp; pt[AES_BLOCK_SIZE - 1] |= tmp;
} }
@ -7579,9 +7580,9 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
/* MSB + XOR */ /* MSB + XOR */
tmp = (0X01 << bit) & in[0]; tmp = (0X01 << bit) & in[0];
pt = (byte*)aes->tmp; pt = (byte*)aes->tmp;
tmp = pt[0] ^ (tmp >> bit); tmp = (pt[0] >> 7) ^ (tmp >> bit);
tmp &= 0x01; tmp &= 0x01;
out[0] |= (tmp << bit); cur |= (tmp << bit);
if (dir == AES_ENCRYPTION) { if (dir == AES_ENCRYPTION) {
@ -7594,19 +7595,22 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
bit--; bit--;
if (bit < 0) { if (bit < 0) {
out[0] = cur;
out += 1; out += 1;
in += 1; in += 1;
sz -= 1; sz -= 1;
bit = 7; bit = 7;
if (sz > 0) { cur = 0;
out[0] = 0;
}
} }
else { else {
sz -= 1; sz -= 1;
} }
} }
if (bit > 0) {
out[0] = cur;
}
return 0; return 0;
} }
@ -7616,7 +7620,7 @@ static int wc_AesFeedbackCFB1(Aes* aes, byte* out, const byte* in,
* aes structure holding key to use for encryption * aes structure holding key to use for encryption
* out buffer to hold result of encryption (must be at least as large as input * out buffer to hold result of encryption (must be at least as large as input
* buffer) * buffer)
* in buffer to encrypt * in buffer to encrypt (packed to left, i.e. 101 is 0x90)
* sz size of input buffer * sz size of input buffer
* *
* returns 0 on success and negative values on failure * returns 0 on success and negative values on failure

View File

@ -6298,12 +6298,12 @@ EVP_TEST_END:
#endif #endif
int ret = 0; int ret = 0;
#ifdef WOLFSSL_AES_128
const byte iv[] = { const byte iv[] = {
0x4d,0xbb,0xdc,0xaa,0x59,0xf3,0x63,0xc9, 0x4d,0xbb,0xdc,0xaa,0x59,0xf3,0x63,0xc9,
0x2a,0x3b,0x98,0x43,0xad,0x20,0xe2,0xb7 0x2a,0x3b,0x98,0x43,0xad,0x20,0xe2,0xb7
}; };
#ifdef WOLFSSL_AES_128
const byte key1[] = const byte key1[] =
{ {
0xcd,0xef,0x9d,0x06,0x61,0xba,0xe4,0x73, 0xcd,0xef,0x9d,0x06,0x61,0xba,0xe4,0x73,
@ -6320,6 +6320,53 @@ EVP_TEST_END:
0xC0 0xC0
}; };
#endif /* WOLFSSL_AES_128 */ #endif /* WOLFSSL_AES_128 */
#ifdef WOLFSSL_AES_192
const byte iv2[] = {
0x57,0xc6,0x89,0x7c,0x99,0x52,0x28,0x13,
0xbf,0x67,0x9c,0xe1,0x13,0x70,0xaf,0x5e
};
const byte key2[] =
{
0xba,0xa1,0x58,0xa1,0x6b,0x50,0x4a,0x10,
0x8e,0xd4,0x33,0x2e,0xe7,0xf2,0x9b,0xf6,
0xd1,0xac,0x46,0xa8,0xde,0x5a,0xfe,0x7a
};
const byte cipher2[] =
{
0x30
};
const byte msg2[] =
{
0x80
};
#endif /* WOLFSSL_AES_192 */
#ifdef WOLFSSL_AES_256
const byte iv3[] = {
0x63,0x2e,0x9f,0x83,0x1f,0xa3,0x80,0x5e,
0x52,0x02,0xbc,0xe0,0x6d,0x04,0xf9,0xa0
};
const byte key3[] =
{
0xf6,0xfa,0xe4,0xf1,0x5d,0x91,0xfc,0x50,
0x88,0x78,0x4f,0x84,0xa5,0x37,0x12,0x7e,
0x32,0x63,0x55,0x9c,0x62,0x73,0x88,0x20,
0xc2,0xcf,0x3d,0xe1,0x1c,0x2a,0x30,0x40
};
const byte cipher3[] =
{
0xF7, 0x00
};
const byte msg3[] =
{
0x41, 0xC0
};
#endif /* WOLFSSL_AES_256 */
if (wc_AesInit(&enc, HEAP_HINT, devId) != 0) if (wc_AesInit(&enc, HEAP_HINT, devId) != 0)
return -4739; return -4739;
@ -6385,6 +6432,27 @@ EVP_TEST_END:
#endif #endif
#endif /* WOLFSSL_AES_256 */ #endif /* WOLFSSL_AES_256 */
#ifdef WOLFSSL_AES_192
/* 192 key tests */
#ifdef OPENSSL_EXTRA
ret = EVP_test(EVP_aes_192_cfb1(), key2, iv2, msg2, sizeof(msg2),
cipher2, 4);
if (ret != 0) {
return ret;
}
#endif
#endif /* WOLFSSL_AES_192 */
#ifdef WOLFSSL_AES_256
/* 256 key tests */
#ifdef OPENSSL_EXTRA
ret = EVP_test(EVP_aes_256_cfb1(), key3, iv3, msg3, sizeof(msg3),
cipher3, 10);
if (ret != 0) {
return ret;
}
#endif
#endif /* WOLFSSL_AES_192 */
return ret; return ret;
} }