Update aes.c
This commit is contained in:
24
aes.c
24
aes.c
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user