Added comments in aes.c for locating software implementation of algorithm using Software AES.

This commit is contained in:
David Garske
2018-10-12 10:48:26 -07:00
parent 23a0f3cfa1
commit 5904a97378

View File

@@ -29,6 +29,8 @@
#if !defined(NO_AES) #if !defined(NO_AES)
/* Tip: Locate the software cipher modes by searching for "Software AES" */
#if defined(HAVE_FIPS) && \ #if defined(HAVE_FIPS) && \
defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2) defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2)
@@ -737,7 +739,7 @@
#else #else
/* using wolfCrypt software AES implementation */ /* using wolfCrypt software implementation */
#define NEED_AES_TABLES #define NEED_AES_TABLES
#endif #endif
@@ -1360,7 +1362,7 @@ static WC_INLINE word32 PreFetchTe(void)
return x; return x;
} }
/* Software AES - ECB Encrypt */
static void wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock) static void wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
{ {
word32 s0, s1, s2, s3; word32 s0, s1, s2, s3;
@@ -1370,7 +1372,7 @@ static void wc_AesEncrypt(Aes* aes, const byte* inBlock, byte* outBlock)
if (r > 7 || r == 0) { if (r > 7 || r == 0) {
WOLFSSL_MSG("AesEncrypt encountered improper key, set it up"); WOLFSSL_MSG("AesEncrypt encountered improper key, set it up");
return; /* stop instead of segfaulting, set up your keys! */ return; /* stop instead of seg-faulting, set up your keys! */
} }
#ifdef WOLFSSL_AESNI #ifdef WOLFSSL_AESNI
@@ -1579,6 +1581,7 @@ static WC_INLINE word32 PreFetchTd4(void)
return x; return x;
} }
/* Software AES - ECB Decrypt */
static void wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock) static void wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
{ {
word32 s0, s1, s2, s3; word32 s0, s1, s2, s3;
@@ -1588,7 +1591,7 @@ static void wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
const word32* rk = aes->key; const word32* rk = aes->key;
if (r > 7 || r == 0) { if (r > 7 || r == 0) {
WOLFSSL_MSG("AesDecrypt encountered improper key, set it up"); WOLFSSL_MSG("AesDecrypt encountered improper key, set it up");
return; /* stop instead of segfaulting, set up your keys! */ return; /* stop instead of seg-faulting, set up your keys! */
} }
#ifdef WOLFSSL_AESNI #ifdef WOLFSSL_AESNI
if (haveAESNI && aes->use_aesni) { if (haveAESNI && aes->use_aesni) {
@@ -1955,6 +1958,8 @@ static void wc_AesDecrypt(Aes* aes, const byte* inBlock, byte* outBlock)
/* implemented in wolfcrypt/src/port/devcrypto/devcrypto_aes.c */ /* implemented in wolfcrypt/src/port/devcrypto/devcrypto_aes.c */
#else #else
/* Software AES - SetKey */
static int wc_AesSetKeyLocal(Aes* aes, const byte* userKey, word32 keylen, static int wc_AesSetKeyLocal(Aes* aes, const byte* userKey, word32 keylen,
const byte* iv, int dir) const byte* iv, int dir)
{ {
@@ -2828,6 +2833,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
#else #else
/* Software AES - CBC Encrypt */
int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
{ {
word32 blocks = (sz / AES_BLOCK_SIZE); word32 blocks = (sz / AES_BLOCK_SIZE);
@@ -2917,6 +2923,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
} }
#ifdef HAVE_AES_DECRYPT #ifdef HAVE_AES_DECRYPT
/* Software AES - CBC Decrypt */
int wc_AesCbcDecrypt(Aes* aes, byte* out, const byte* in, word32 sz) int wc_AesCbcDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
{ {
word32 blocks; word32 blocks;
@@ -3171,6 +3178,7 @@ int wc_AesSetIV(Aes* aes, const byte* iv)
} }
} }
/* Software AES - CTR Encrypt */
int wc_AesCtrEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) int wc_AesCtrEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
{ {
byte* tmp; byte* tmp;
@@ -3348,7 +3356,7 @@ static void GenerateM0(Aes* aes)
#endif /* GCM_TABLE */ #endif /* GCM_TABLE */
/* Software AES - GCM SetKey */
int wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len) int wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len)
{ {
int ret; int ret;
@@ -8367,6 +8375,7 @@ int AES_GCM_encrypt_C(Aes* aes, byte* out, const byte* in, word32 sz,
return ret; return ret;
} }
/* Software AES - GCM Encrypt */
int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz, int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
const byte* iv, word32 ivSz, const byte* iv, word32 ivSz,
byte* authTag, word32 authTagSz, byte* authTag, word32 authTagSz,
@@ -8452,8 +8461,6 @@ int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz,
} }
#endif /* WOLFSSL_ASYNC_CRYPT */ #endif /* WOLFSSL_ASYNC_CRYPT */
/* Software AES-GCM */
#ifdef WOLFSSL_AESNI #ifdef WOLFSSL_AESNI
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags)) { if (IS_INTEL_AVX2(intel_flags)) {
@@ -8765,6 +8772,7 @@ int AES_GCM_decrypt_C(Aes* aes, byte* out, const byte* in, word32 sz,
return ret; return ret;
} }
/* Software AES - GCM Decrypt */
int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz, int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
const byte* iv, word32 ivSz, const byte* iv, word32 ivSz,
const byte* authTag, word32 authTagSz, const byte* authTag, word32 authTagSz,
@@ -8852,8 +8860,6 @@ int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz,
} }
#endif /* WOLFSSL_ASYNC_CRYPT */ #endif /* WOLFSSL_ASYNC_CRYPT */
/* software AES GCM */
#ifdef WOLFSSL_AESNI #ifdef WOLFSSL_AESNI
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
if (IS_INTEL_AVX2(intel_flags)) { if (IS_INTEL_AVX2(intel_flags)) {
@@ -9155,10 +9161,9 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
} }
#endif /* HAVE_AES_DECRYPT */ #endif /* HAVE_AES_DECRYPT */
/* software AES CCM */
#else #else
/* Software CCM */
static void roll_x(Aes* aes, const byte* in, word32 inSz, byte* out) static void roll_x(Aes* aes, const byte* in, word32 inSz, byte* out)
{ {
/* process the bulk of the data */ /* process the bulk of the data */
@@ -9231,6 +9236,7 @@ static WC_INLINE void AesCcmCtrInc(byte* B, word32 lenSz)
} }
} }
/* Software AES - CCM Encrypt */
/* return 0 on success */ /* return 0 on success */
int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz, int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
const byte* nonce, word32 nonceSz, const byte* nonce, word32 nonceSz,
@@ -9299,6 +9305,7 @@ int wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
} }
#ifdef HAVE_AES_DECRYPT #ifdef HAVE_AES_DECRYPT
/* Software AES - CCM Decrypt */
int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz, int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
const byte* nonce, word32 nonceSz, const byte* nonce, word32 nonceSz,
const byte* authTag, word32 authTagSz, const byte* authTag, word32 authTagSz,
@@ -9390,7 +9397,7 @@ int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz,
} }
#endif /* HAVE_AES_DECRYPT */ #endif /* HAVE_AES_DECRYPT */
#endif /* software AES CCM */ #endif /* software CCM */
/* abstract functions that call lower level AESCCM functions */ /* abstract functions that call lower level AESCCM functions */
#ifndef WC_NO_RNG #ifndef WC_NO_RNG
@@ -9584,7 +9591,7 @@ int wc_AesGetKeySize(Aes* aes, word32* keySize)
#else #else
/* software implementation */ /* Software AES - ECB */
int wc_AesEcbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) int wc_AesEcbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
{ {
word32 blocks = sz / AES_BLOCK_SIZE; word32 blocks = sz / AES_BLOCK_SIZE;
@@ -9631,6 +9638,7 @@ int wc_AesEcbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
* *
* returns 0 on success and negative error values on failure * returns 0 on success and negative error values on failure
*/ */
/* Software AES - CFB Encrypt */
int wc_AesCfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) int wc_AesCfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
{ {
byte* tmp = NULL; byte* tmp = NULL;
@@ -9692,6 +9700,7 @@ int wc_AesCfbEncrypt(Aes* aes, byte* out, const byte* in, word32 sz)
* *
* returns 0 on success and negative error values on failure * returns 0 on success and negative error values on failure
*/ */
/* Software AES - CFB Decrypt */
int wc_AesCfbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz) int wc_AesCfbDecrypt(Aes* aes, byte* out, const byte* in, word32 sz)
{ {
byte* tmp; byte* tmp;
@@ -10070,7 +10079,7 @@ static int _AesXtsHelper(Aes* aes, byte* out, const byte* in, word32 sz, int dir
word32 j; word32 j;
byte carry = 0; byte carry = 0;
/* multiply by shift left and propogate carry */ /* multiply by shift left and propagate carry */
for (j = 0; j < AES_BLOCK_SIZE && outSz > 0; j++, outSz--) { for (j = 0; j < AES_BLOCK_SIZE && outSz > 0; j++, outSz--) {
byte tmpC; byte tmpC;
@@ -10108,6 +10117,7 @@ static int _AesXtsHelper(Aes* aes, byte* out, const byte* in, word32 sz, int dir
* *
* returns 0 on success * returns 0 on success
*/ */
/* Software AES - XTS Encrypt */
int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz, int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
const byte* i, word32 iSz) const byte* i, word32 iSz)
{ {
@@ -10160,7 +10170,7 @@ int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
#endif #endif
xorbuf(out, tmp, AES_BLOCK_SIZE); xorbuf(out, tmp, AES_BLOCK_SIZE);
/* multiply by shift left and propogate carry */ /* multiply by shift left and propagate carry */
for (j = 0; j < AES_BLOCK_SIZE; j++) { for (j = 0; j < AES_BLOCK_SIZE; j++) {
byte tmpC; byte tmpC;
@@ -10215,6 +10225,7 @@ int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
* *
* returns 0 on success * returns 0 on success
*/ */
/* Software AES - XTS Decrypt */
int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz, int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
const byte* i, word32 iSz) const byte* i, word32 iSz)
{ {
@@ -10274,7 +10285,7 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
#endif #endif
xorbuf(out, tmp, AES_BLOCK_SIZE); xorbuf(out, tmp, AES_BLOCK_SIZE);
/* multiply by shift left and propogate carry */ /* multiply by shift left and propagate carry */
for (j = 0; j < AES_BLOCK_SIZE; j++) { for (j = 0; j < AES_BLOCK_SIZE; j++) {
byte tmpC; byte tmpC;
@@ -10298,7 +10309,7 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
byte buf[AES_BLOCK_SIZE]; byte buf[AES_BLOCK_SIZE];
byte tmp2[AES_BLOCK_SIZE]; byte tmp2[AES_BLOCK_SIZE];
/* multiply by shift left and propogate carry */ /* multiply by shift left and propagate carry */
for (j = 0; j < AES_BLOCK_SIZE; j++) { for (j = 0; j < AES_BLOCK_SIZE; j++) {
byte tmpC; byte tmpC;