mirror of https://github.com/wolfSSL/wolfssl.git
AES-XTS ASM x64: Add Intel x64 implementation of streaming
Changed APIs from wc_AesXts*Start -> wc_AesXts*Init. Enabled ASM for x64 in aes.c. AesXtsDecryptStart_sw same as AesXtsEncryptStart_sw so changed them to AesXtsInit_sw.pull/7522/head
parent
f874d8753d
commit
643f472cfb
|
@ -12530,9 +12530,9 @@ void AES_XTS_encrypt_aesni(const unsigned char *in, unsigned char *out, word32 s
|
||||||
const unsigned char* key2, int nr)
|
const unsigned char* key2, int nr)
|
||||||
XASM_LINK("AES_XTS_encrypt_aesni");
|
XASM_LINK("AES_XTS_encrypt_aesni");
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
void AES_XTS_encrypt_start_aesni(unsigned char* i, const unsigned char* tweak_key,
|
void AES_XTS_init_aesni(unsigned char* i, const unsigned char* tweak_key,
|
||||||
int tweak_nr)
|
int tweak_nr)
|
||||||
XASM_LINK("AES_XTS_encrypt_start_aesni");
|
XASM_LINK("AES_XTS_init_aesni");
|
||||||
void AES_XTS_encrypt_update_aesni(const unsigned char *in, unsigned char *out, word32 sz,
|
void AES_XTS_encrypt_update_aesni(const unsigned char *in, unsigned char *out, word32 sz,
|
||||||
const unsigned char* key, unsigned char *i, int nr)
|
const unsigned char* key, unsigned char *i, int nr)
|
||||||
XASM_LINK("AES_XTS_encrypt_update_aesni");
|
XASM_LINK("AES_XTS_encrypt_update_aesni");
|
||||||
|
@ -12544,9 +12544,9 @@ void AES_XTS_encrypt_avx1(const unsigned char *in, unsigned char *out,
|
||||||
int nr)
|
int nr)
|
||||||
XASM_LINK("AES_XTS_encrypt_avx1");
|
XASM_LINK("AES_XTS_encrypt_avx1");
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
void AES_XTS_encrypt_start_avx1(unsigned char* i, const unsigned char* tweak_key,
|
void AES_XTS_init_avx1(unsigned char* i, const unsigned char* tweak_key,
|
||||||
int tweak_nr)
|
int tweak_nr)
|
||||||
XASM_LINK("AES_XTS_encrypt_start_avx1");
|
XASM_LINK("AES_XTS_init_avx1");
|
||||||
void AES_XTS_encrypt_update_avx1(const unsigned char *in, unsigned char *out, word32 sz,
|
void AES_XTS_encrypt_update_avx1(const unsigned char *in, unsigned char *out, word32 sz,
|
||||||
const unsigned char* key, unsigned char *i, int nr)
|
const unsigned char* key, unsigned char *i, int nr)
|
||||||
XASM_LINK("AES_XTS_encrypt_update_avx1");
|
XASM_LINK("AES_XTS_encrypt_update_avx1");
|
||||||
|
@ -12559,9 +12559,6 @@ void AES_XTS_decrypt_aesni(const unsigned char *in, unsigned char *out, word32 s
|
||||||
const unsigned char* key2, int nr)
|
const unsigned char* key2, int nr)
|
||||||
XASM_LINK("AES_XTS_decrypt_aesni");
|
XASM_LINK("AES_XTS_decrypt_aesni");
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
void AES_XTS_decrypt_start_aesni(unsigned char* i, const unsigned char* tweak_key,
|
|
||||||
int tweak_nr)
|
|
||||||
XASM_LINK("AES_XTS_decrypt_start_aesni");
|
|
||||||
void AES_XTS_decrypt_update_aesni(const unsigned char *in, unsigned char *out, word32 sz,
|
void AES_XTS_decrypt_update_aesni(const unsigned char *in, unsigned char *out, word32 sz,
|
||||||
const unsigned char* key, unsigned char *i, int nr)
|
const unsigned char* key, unsigned char *i, int nr)
|
||||||
XASM_LINK("AES_XTS_decrypt_update_aesni");
|
XASM_LINK("AES_XTS_decrypt_update_aesni");
|
||||||
|
@ -12573,9 +12570,6 @@ void AES_XTS_decrypt_avx1(const unsigned char *in, unsigned char *out,
|
||||||
int nr)
|
int nr)
|
||||||
XASM_LINK("AES_XTS_decrypt_avx1");
|
XASM_LINK("AES_XTS_decrypt_avx1");
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
void AES_XTS_decrypt_start_avx1(unsigned char* i, const unsigned char* tweak_key,
|
|
||||||
int tweak_nr)
|
|
||||||
XASM_LINK("AES_XTS_decrypt_start_avx1");
|
|
||||||
void AES_XTS_decrypt_update_avx1(const unsigned char *in, unsigned char *out, word32 sz,
|
void AES_XTS_decrypt_update_avx1(const unsigned char *in, unsigned char *out, word32 sz,
|
||||||
const unsigned char* key, unsigned char *i, int nr)
|
const unsigned char* key, unsigned char *i, int nr)
|
||||||
XASM_LINK("AES_XTS_decrypt_update_avx1");
|
XASM_LINK("AES_XTS_decrypt_update_avx1");
|
||||||
|
@ -12732,7 +12726,7 @@ static int AesXtsEncrypt_sw(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
*
|
*
|
||||||
* returns 0 on success
|
* returns 0 on success
|
||||||
*/
|
*/
|
||||||
static int AesXtsEncryptStart_sw(XtsAes* xaes, byte* i) {
|
static int AesXtsInit_sw(XtsAes* xaes, byte* i) {
|
||||||
return wc_AesEncryptDirect(&xaes->tweak, i, i);
|
return wc_AesEncryptDirect(&xaes->tweak, i, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12916,7 +12910,7 @@ int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
|
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
|
|
||||||
int wc_AesXtsEncryptStart(XtsAes* xaes, byte* i, word32 iSz)
|
int wc_AesXtsEncryptInit(XtsAes* xaes, byte* i, word32 iSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -12942,30 +12936,28 @@ int wc_AesXtsEncryptStart(XtsAes* xaes, byte* i, word32 iSz)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
if (aes->use_aesni) {
|
if (aes->use_aesni) {
|
||||||
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
||||||
#if defined(HAVE_INTEL_AVX1)
|
#if defined(HAVE_INTEL_AVX1)
|
||||||
if (IS_INTEL_AVX1(intel_flags)) {
|
if (IS_INTEL_AVX1(intel_flags)) {
|
||||||
AES_XTS_encrypt_start_avx1(i,
|
AES_XTS_init_avx1(i, (const byte*)xaes->tweak.key,
|
||||||
(const byte*)xaes->tweak.key,
|
|
||||||
(int)xaes->tweak.rounds);
|
(int)xaes->tweak.rounds);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
AES_XTS_encrypt_start_aesni(i,
|
AES_XTS_init_aesni(i, (const byte*)xaes->tweak.key,
|
||||||
(const byte*)xaes->tweak.key,
|
|
||||||
(int)xaes->tweak.rounds);
|
(int)xaes->tweak.rounds);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
RESTORE_VECTOR_REGISTERS();
|
RESTORE_VECTOR_REGISTERS();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* 0 && defined(WOLFSSL_AESNI) */
|
#endif /* WOLFSSL_AESNI */
|
||||||
{
|
{
|
||||||
ret = AesXtsEncryptStart_sw(xaes, i);
|
ret = AesXtsInit_sw(xaes, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12989,7 +12981,7 @@ int wc_AesXtsEncryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
Aes *aes;
|
Aes *aes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -12997,7 +12989,7 @@ int wc_AesXtsEncryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
aes = &xaes->aes;
|
aes = &xaes->aes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13007,7 +12999,7 @@ int wc_AesXtsEncryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
if (aes->use_aesni) {
|
if (aes->use_aesni) {
|
||||||
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
||||||
#if defined(HAVE_INTEL_AVX1)
|
#if defined(HAVE_INTEL_AVX1)
|
||||||
|
@ -13030,7 +13022,7 @@ int wc_AesXtsEncryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
RESTORE_VECTOR_REGISTERS();
|
RESTORE_VECTOR_REGISTERS();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* 0 && defined(WOLFSSL_AESNI) */
|
#endif /* WOLFSSL_AESNI */
|
||||||
{
|
{
|
||||||
ret = AesXtsEncryptUpdate_sw(xaes, out, in, sz, i);
|
ret = AesXtsEncryptUpdate_sw(xaes, out, in, sz, i);
|
||||||
}
|
}
|
||||||
|
@ -13171,11 +13163,6 @@ static int AesXtsDecrypt_sw(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
|
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
|
|
||||||
static int AesXtsDecryptStart_sw(XtsAes* xaes, byte* i)
|
|
||||||
{
|
|
||||||
return wc_AesEncryptDirect(&xaes->tweak, i, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Block-streaming AES-XTS.
|
/* Block-streaming AES-XTS.
|
||||||
*
|
*
|
||||||
* Same process as encryption but use decrypt key.
|
* Same process as encryption but use decrypt key.
|
||||||
|
@ -13402,7 +13389,7 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
*
|
*
|
||||||
* returns 0 on success
|
* returns 0 on success
|
||||||
*/
|
*/
|
||||||
int wc_AesXtsDecryptStart(XtsAes* xaes, byte* i, word32 iSz)
|
int wc_AesXtsDecryptInit(XtsAes* xaes, byte* i, word32 iSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
Aes *aes;
|
Aes *aes;
|
||||||
|
@ -13427,30 +13414,28 @@ int wc_AesXtsDecryptStart(XtsAes* xaes, byte* i, word32 iSz)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
if (aes->use_aesni) {
|
if (aes->use_aesni) {
|
||||||
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
||||||
#if defined(HAVE_INTEL_AVX1)
|
#if defined(HAVE_INTEL_AVX1)
|
||||||
if (IS_INTEL_AVX1(intel_flags)) {
|
if (IS_INTEL_AVX1(intel_flags)) {
|
||||||
AES_XTS_decrypt_start_avx1(i,
|
AES_XTS_init_avx1(i, (const byte*)xaes->tweak.key,
|
||||||
(const byte*)xaes->tweak.key,
|
|
||||||
(int)xaes->tweak.rounds);
|
(int)xaes->tweak.rounds);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
AES_XTS_decrypt_start_aesni(i,
|
AES_XTS_init_aesni(i, (const byte*)xaes->tweak.key,
|
||||||
(const byte*)xaes->tweak.key,
|
|
||||||
(int)xaes->tweak.rounds);
|
(int)xaes->tweak.rounds);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
RESTORE_VECTOR_REGISTERS();
|
RESTORE_VECTOR_REGISTERS();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* 0 && defined(WOLFSSL_AESNI) */
|
#endif /* WOLFSSL_AESNI */
|
||||||
{
|
{
|
||||||
ret = AesXtsDecryptStart_sw(xaes, i);
|
ret = AesXtsInit_sw(xaes, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -13472,7 +13457,7 @@ int wc_AesXtsDecryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
byte *i)
|
byte *i)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
Aes *aes;
|
Aes *aes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13480,7 +13465,7 @@ int wc_AesXtsDecryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
#ifdef WC_AES_XTS_SUPPORT_SIMULTANEOUS_ENC_AND_DEC_KEYS
|
#ifdef WC_AES_XTS_SUPPORT_SIMULTANEOUS_ENC_AND_DEC_KEYS
|
||||||
aes = &xaes->aes_decrypt;
|
aes = &xaes->aes_decrypt;
|
||||||
#else
|
#else
|
||||||
|
@ -13494,7 +13479,7 @@ int wc_AesXtsDecryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#if 0 && defined(WOLFSSL_AESNI)
|
#ifdef WOLFSSL_AESNI
|
||||||
if (aes->use_aesni) {
|
if (aes->use_aesni) {
|
||||||
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
SAVE_VECTOR_REGISTERS(return _svr_ret;);
|
||||||
#if defined(HAVE_INTEL_AVX1)
|
#if defined(HAVE_INTEL_AVX1)
|
||||||
|
@ -13517,7 +13502,7 @@ int wc_AesXtsDecryptUpdate(XtsAes* xaes, byte* out, const byte* in, word32 sz,
|
||||||
RESTORE_VECTOR_REGISTERS();
|
RESTORE_VECTOR_REGISTERS();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* 0 && defined(WOLFSSL_AESNI) */
|
#endif /* WOLFSSL_AESNI */
|
||||||
{
|
{
|
||||||
ret = AesXtsDecryptUpdate_sw(xaes, out, in, sz, i);
|
ret = AesXtsDecryptUpdate_sw(xaes, out, in, sz, i);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -671,9 +671,9 @@ WOLFSSL_API int wc_AesXtsDecryptConsecutiveSectors(XtsAes* aes,
|
||||||
|
|
||||||
#ifdef WOLFSSL_AESXTS_STREAM
|
#ifdef WOLFSSL_AESXTS_STREAM
|
||||||
|
|
||||||
WOLFSSL_API int wc_AesXtsEncryptStart(XtsAes* aes, byte* i, word32 iSz);
|
WOLFSSL_API int wc_AesXtsEncryptInit(XtsAes* aes, byte* i, word32 iSz);
|
||||||
|
|
||||||
WOLFSSL_API int wc_AesXtsDecryptStart(XtsAes* aes, byte* i, word32 iSz);
|
WOLFSSL_API int wc_AesXtsDecryptInit(XtsAes* aes, byte* i, word32 iSz);
|
||||||
|
|
||||||
WOLFSSL_API int wc_AesXtsEncryptUpdate(XtsAes* aes, byte* out,
|
WOLFSSL_API int wc_AesXtsEncryptUpdate(XtsAes* aes, byte* out,
|
||||||
const byte* in, word32 sz, byte *i);
|
const byte* in, word32 sz, byte *i);
|
||||||
|
|
Loading…
Reference in New Issue