Update aes.c

This commit is contained in:
kokke
2017-12-06 02:30:35 +01:00
committed by GitHub
parent 79458d2162
commit 4346d1f006

24
aes.c
View File

@@ -66,7 +66,6 @@ NOTE: String length must be evenly divisible by 16byte (str_len % 16 == 0)
/*****************************************************************************/ /*****************************************************************************/
/* Private variables: */ /* Private variables: */
/*****************************************************************************/ /*****************************************************************************/
@@ -75,7 +74,6 @@ typedef uint8_t state_t[4][4];
// The lookup-tables are marked const so they can be placed in read-only storage instead of RAM // The lookup-tables are marked const so they can be placed in read-only storage instead of RAM
// The numbers below can be computed dynamically trading ROM for RAM - // The numbers below can be computed dynamically trading ROM for RAM -
// This can be useful in (embedded) bootloader applications, where ROM is often limited. // This can be useful in (embedded) bootloader applications, where ROM is often limited.
@@ -227,15 +225,18 @@ static void KeyExpansion(uint8_t* RoundKey,const uint8_t* Key)
} }
} }
void AES_init_ctx(struct AES_ctx *ctx,const uint8_t* key){ void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key)
{
KeyExpansion(ctx->RoundKey, key); KeyExpansion(ctx->RoundKey, key);
} }
#if defined(CBC) && (CBC == 1) #if defined(CBC) && (CBC == 1)
void AES_init_ctx_iv(struct AES_ctx *ctx,const uint8_t* key,const uint8_t* iv){ void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv)
{
KeyExpansion(ctx->RoundKey, key); KeyExpansion(ctx->RoundKey, key);
memcpy (ctx->Iv, iv, AES_BLOCKLEN); memcpy (ctx->Iv, iv, AES_BLOCKLEN);
} }
void AES_ctx_set_iv(struct AES_ctx *ctx,const uint8_t* iv) { void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv)
{
memcpy (ctx->Iv, iv, AES_BLOCKLEN); memcpy (ctx->Iv, iv, AES_BLOCKLEN);
} }
#endif #endif
@@ -488,7 +489,7 @@ void AES_ECB_decrypt(struct AES_ctx *ctx,const uint8_t* buf)
static void XorWithIv(uint8_t* buf, uint8_t* Iv) static void XorWithIv(uint8_t* buf, uint8_t* Iv)
{ {
uint8_t i; uint8_t i;
for (i = 0; i < AES_BLOCKLEN; ++i) //WAS for(i = 0; i < KEYLEN; ++i) but the block in AES is always 128bit so 16 bytes! for (i = 0; i < AES_BLOCKLEN; ++i) // The block in AES is always 128bit no matter the key size
{ {
buf[i] ^= Iv[i]; buf[i] ^= Iv[i];
} }
@@ -506,7 +507,7 @@ void AES_CBC_encrypt_buffer(struct AES_ctx *ctx,uint8_t* buf, uint32_t length)
buf += AES_BLOCKLEN; buf += AES_BLOCKLEN;
//printf("Step %d - %d", i/16, i); //printf("Step %d - %d", i/16, i);
} }
//store Iv in ctx for next call /* store Iv in ctx for next call */
memcpy(ctx->Iv, Iv, AES_BLOCKLEN); memcpy(ctx->Iv, Iv, AES_BLOCKLEN);
} }
@@ -538,9 +539,9 @@ void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length)
unsigned i; unsigned i;
int bi; int bi;
for (i = 0,bi=AES_BLOCKLEN; i < length; ++i,bi++) for (i = 0, bi = AES_BLOCKLEN; i < length; ++i, ++bi)
{ {
if (bi == AES_BLOCKLEN) //we need to regen xor compliment in buffer if (bi == AES_BLOCKLEN) /* we need to regen xor compliment in buffer */
{ {
memcpy(buffer, ctx->Iv, AES_BLOCKLEN); memcpy(buffer, ctx->Iv, AES_BLOCKLEN);
@@ -549,13 +550,14 @@ void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length)
/* Increment Iv and handle overflow */ /* Increment Iv and handle overflow */
for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi) for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi)
{ {
if (ctx->Iv[bi] == 255) { //inc will owerflow /* inc will owerflow */
if (ctx->Iv[bi] == 255)
{
ctx->Iv[bi] = 0; ctx->Iv[bi] = 0;
continue; continue;
} }
ctx->Iv[bi] += 1; ctx->Iv[bi] += 1;
break; break;
} }
bi = 0; bi = 0;
} }