mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-04 05:04:41 +02:00
Added comments in aes.c for locating software implementation of algorithm using Software AES
.
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user