forked from wolfSSL/wolfssl
move aesni cbc encrypt align check down to crypto layer
This commit is contained in:
@ -1702,10 +1702,32 @@ int AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
|
|||||||
printf("aes->rounds = %d\n", aes->rounds);
|
printf("aes->rounds = %d\n", aes->rounds);
|
||||||
printf("sz = %d\n", sz);
|
printf("sz = %d\n", sz);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* check alignment, decrypt doesn't need alignment */
|
||||||
|
if ((word)in % 16) {
|
||||||
|
#ifndef NO_CYASSL_ALLOC_ALIGN
|
||||||
|
byte* tmp = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (tmp == NULL) return MEMORY_E;
|
||||||
|
|
||||||
|
XMEMCPY(tmp, in, sz);
|
||||||
|
AES_CBC_encrypt(tmp, tmp, (byte*)aes->reg, sz, (byte*)aes->key,
|
||||||
|
aes->rounds);
|
||||||
|
/* store iv for next call */
|
||||||
|
XMEMCPY(aes->reg, tmp + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE);
|
||||||
|
|
||||||
|
XMEMCPY(out, tmp, sz);
|
||||||
|
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return BAD_ALIGN_E;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
AES_CBC_encrypt(in, out, (byte*)aes->reg, sz, (byte*)aes->key,
|
AES_CBC_encrypt(in, out, (byte*)aes->reg, sz, (byte*)aes->key,
|
||||||
aes->rounds);
|
aes->rounds);
|
||||||
/* store iv for next call */
|
/* store iv for next call */
|
||||||
XMEMCPY(aes->reg, out + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE);
|
XMEMCPY(aes->reg, out + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -297,6 +297,10 @@ void CTaoCryptErrorString(int error, char* buffer)
|
|||||||
XSTRNCPY(buffer, "DeCompress error", max);
|
XSTRNCPY(buffer, "DeCompress error", max);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BAD_ALIGN_E:
|
||||||
|
XSTRNCPY(buffer, "Bad alignment error, no alloc help", max);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
XSTRNCPY(buffer, "unknown error number", max);
|
XSTRNCPY(buffer, "unknown error number", max);
|
||||||
|
|
||||||
|
@ -108,6 +108,8 @@ enum {
|
|||||||
DECOMPRESS_INIT_E = -185, /* DeCompress init error */
|
DECOMPRESS_INIT_E = -185, /* DeCompress init error */
|
||||||
DECOMPRESS_E = -186, /* DeCompress error */
|
DECOMPRESS_E = -186, /* DeCompress error */
|
||||||
|
|
||||||
|
BAD_ALIGN_E = -187, /* Bad alignment for operation, no alloc */
|
||||||
|
|
||||||
MIN_CODE_E = -200 /* errors -101 - -199 */
|
MIN_CODE_E = -200 /* errors -101 - -199 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3424,20 +3424,6 @@ static INLINE int Encrypt(CYASSL* ssl, byte* out, const byte* input, word32 sz)
|
|||||||
|
|
||||||
#ifdef BUILD_AES
|
#ifdef BUILD_AES
|
||||||
case aes:
|
case aes:
|
||||||
#ifdef CYASSL_AESNI
|
|
||||||
if ((word)input % 16) {
|
|
||||||
int ret;
|
|
||||||
byte* tmp = (byte*)XMALLOC(sz, ssl->heap,
|
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (tmp == NULL) return MEMORY_E;
|
|
||||||
XMEMCPY(tmp, input, sz);
|
|
||||||
ret = AesCbcEncrypt(ssl->encrypt.aes, tmp, tmp, sz);
|
|
||||||
XMEMCPY(out, tmp, sz);
|
|
||||||
XFREE(tmp, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
return ret;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return AesCbcEncrypt(ssl->encrypt.aes, out, input, sz);
|
return AesCbcEncrypt(ssl->encrypt.aes, out, input, sz);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user