|
|
@ -555,7 +555,7 @@ namespace crypto |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// AES
|
|
|
|
// AES
|
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
#define KeyExpansion256(round0,round1) \ |
|
|
|
#define KeyExpansion256(round0,round1) \ |
|
|
|
"pshufd $0xff, %%xmm2, %%xmm2 \n" \ |
|
|
|
"pshufd $0xff, %%xmm2, %%xmm2 \n" \ |
|
|
|
"movaps %%xmm1, %%xmm4 \n" \ |
|
|
|
"movaps %%xmm1, %%xmm4 \n" \ |
|
|
@ -580,7 +580,7 @@ namespace crypto |
|
|
|
"movaps %%xmm3, "#round1"(%[sched]) \n" |
|
|
|
"movaps %%xmm3, "#round1"(%[sched]) \n" |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
void ECBCryptoAESNI::ExpandKey (const AESKey& key) |
|
|
|
void ECBCryptoAESNI::ExpandKey (const AESKey& key) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -621,7 +621,7 @@ namespace crypto |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
#define EncryptAES256(sched) \ |
|
|
|
#define EncryptAES256(sched) \ |
|
|
|
"pxor (%["#sched"]), %%xmm0 \n" \ |
|
|
|
"pxor (%["#sched"]), %%xmm0 \n" \ |
|
|
|
"aesenc 16(%["#sched"]), %%xmm0 \n" \ |
|
|
|
"aesenc 16(%["#sched"]), %%xmm0 \n" \ |
|
|
@ -642,7 +642,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void ECBEncryption::Encrypt (const ChipherBlock * in, ChipherBlock * out) |
|
|
|
void ECBEncryption::Encrypt (const ChipherBlock * in, ChipherBlock * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -660,7 +660,7 @@ namespace crypto |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
#define DecryptAES256(sched) \ |
|
|
|
#define DecryptAES256(sched) \ |
|
|
|
"pxor 224(%["#sched"]), %%xmm0 \n" \ |
|
|
|
"pxor 224(%["#sched"]), %%xmm0 \n" \ |
|
|
|
"aesdec 208(%["#sched"]), %%xmm0 \n" \ |
|
|
|
"aesdec 208(%["#sched"]), %%xmm0 \n" \ |
|
|
@ -681,7 +681,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void ECBDecryption::Decrypt (const ChipherBlock * in, ChipherBlock * out) |
|
|
|
void ECBDecryption::Decrypt (const ChipherBlock * in, ChipherBlock * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -699,7 +699,7 @@ namespace crypto |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
#define CallAESIMC(offset) \ |
|
|
|
#define CallAESIMC(offset) \ |
|
|
|
"movaps "#offset"(%[shed]), %%xmm0 \n" \ |
|
|
|
"movaps "#offset"(%[shed]), %%xmm0 \n" \ |
|
|
|
"aesimc %%xmm0, %%xmm0 \n" \ |
|
|
|
"aesimc %%xmm0, %%xmm0 \n" \ |
|
|
@ -708,7 +708,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void ECBEncryption::SetKey (const AESKey& key) |
|
|
|
void ECBEncryption::SetKey (const AESKey& key) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ExpandKey (key); |
|
|
|
ExpandKey (key); |
|
|
@ -722,7 +722,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void ECBDecryption::SetKey (const AESKey& key) |
|
|
|
void ECBDecryption::SetKey (const AESKey& key) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
ExpandKey (key); // expand encryption key first
|
|
|
|
ExpandKey (key); // expand encryption key first
|
|
|
@ -754,7 +754,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void CBCEncryption::Encrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out) |
|
|
|
void CBCEncryption::Encrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -799,7 +799,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void CBCEncryption::Encrypt (const uint8_t * in, uint8_t * out) |
|
|
|
void CBCEncryption::Encrypt (const uint8_t * in, uint8_t * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -823,7 +823,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void CBCDecryption::Decrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out) |
|
|
|
void CBCDecryption::Decrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -869,7 +869,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void CBCDecryption::Decrypt (const uint8_t * in, uint8_t * out) |
|
|
|
void CBCDecryption::Decrypt (const uint8_t * in, uint8_t * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -893,7 +893,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void TunnelEncryption::Encrypt (const uint8_t * in, uint8_t * out) |
|
|
|
void TunnelEncryption::Encrypt (const uint8_t * in, uint8_t * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
@ -934,7 +934,7 @@ namespace crypto |
|
|
|
|
|
|
|
|
|
|
|
void TunnelDecryption::Decrypt (const uint8_t * in, uint8_t * out) |
|
|
|
void TunnelDecryption::Decrypt (const uint8_t * in, uint8_t * out) |
|
|
|
{ |
|
|
|
{ |
|
|
|
#ifdef __AES__ |
|
|
|
#if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
if(i2p::cpu::aesni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
__asm__ |
|
|
|
__asm__ |
|
|
|