aes: add a define for the size of a block
In the code, we use the size of the key for the size of the block. It's true when the key is 128 bits, but it become false for key of 192 bits and 256 bits. So to prepare the support of aes192 and 256, we introduce a constant for the iaes block size. Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Tom Rini
parent
d7bb6aceb2
commit
7012c04ef3
34
lib/aes.c
34
lib/aes.c
@@ -596,62 +596,62 @@ void aes_apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < AES_KEY_LENGTH; i++)
|
||||
for (i = 0; i < AES_BLOCK_LENGTH; i++)
|
||||
*dst++ = *src++ ^ *cbc_chain_data++;
|
||||
}
|
||||
|
||||
void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *iv, u8 *src, u8 *dst,
|
||||
u32 num_aes_blocks)
|
||||
{
|
||||
u8 tmp_data[AES_KEY_LENGTH];
|
||||
u8 tmp_data[AES_BLOCK_LENGTH];
|
||||
u8 *cbc_chain_data = iv;
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < num_aes_blocks; i++) {
|
||||
debug("encrypt_object: block %d of %d\n", i, num_aes_blocks);
|
||||
debug_print_vector("AES Src", AES_KEY_LENGTH, src);
|
||||
debug_print_vector("AES Src", AES_BLOCK_LENGTH, src);
|
||||
|
||||
/* Apply the chain data */
|
||||
aes_apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
|
||||
debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
|
||||
debug_print_vector("AES Xor", AES_BLOCK_LENGTH, tmp_data);
|
||||
|
||||
/* Encrypt the AES block */
|
||||
aes_encrypt(tmp_data, key_exp, dst);
|
||||
debug_print_vector("AES Dst", AES_KEY_LENGTH, dst);
|
||||
debug_print_vector("AES Dst", AES_BLOCK_LENGTH, dst);
|
||||
|
||||
/* Update pointers for next loop. */
|
||||
cbc_chain_data = dst;
|
||||
src += AES_KEY_LENGTH;
|
||||
dst += AES_KEY_LENGTH;
|
||||
src += AES_BLOCK_LENGTH;
|
||||
dst += AES_BLOCK_LENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
void aes_cbc_decrypt_blocks(u8 *key_exp, u8 *iv, u8 *src, u8 *dst,
|
||||
u32 num_aes_blocks)
|
||||
{
|
||||
u8 tmp_data[AES_KEY_LENGTH], tmp_block[AES_KEY_LENGTH];
|
||||
u8 tmp_data[AES_BLOCK_LENGTH], tmp_block[AES_BLOCK_LENGTH];
|
||||
/* Convenient array of 0's for IV */
|
||||
u8 cbc_chain_data[AES_KEY_LENGTH];
|
||||
u8 cbc_chain_data[AES_BLOCK_LENGTH];
|
||||
u32 i;
|
||||
|
||||
memcpy(cbc_chain_data, iv, AES_KEY_LENGTH);
|
||||
memcpy(cbc_chain_data, iv, AES_BLOCK_LENGTH);
|
||||
for (i = 0; i < num_aes_blocks; i++) {
|
||||
debug("encrypt_object: block %d of %d\n", i, num_aes_blocks);
|
||||
debug_print_vector("AES Src", AES_KEY_LENGTH, src);
|
||||
debug_print_vector("AES Src", AES_BLOCK_LENGTH, src);
|
||||
|
||||
memcpy(tmp_block, src, AES_KEY_LENGTH);
|
||||
memcpy(tmp_block, src, AES_BLOCK_LENGTH);
|
||||
|
||||
/* Decrypt the AES block */
|
||||
aes_decrypt(src, key_exp, tmp_data);
|
||||
debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
|
||||
debug_print_vector("AES Xor", AES_BLOCK_LENGTH, tmp_data);
|
||||
|
||||
/* Apply the chain data */
|
||||
aes_apply_cbc_chain_data(cbc_chain_data, tmp_data, dst);
|
||||
debug_print_vector("AES Dst", AES_KEY_LENGTH, dst);
|
||||
debug_print_vector("AES Dst", AES_BLOCK_LENGTH, dst);
|
||||
|
||||
/* Update pointers for next loop. */
|
||||
memcpy(cbc_chain_data, tmp_block, AES_KEY_LENGTH);
|
||||
src += AES_KEY_LENGTH;
|
||||
dst += AES_KEY_LENGTH;
|
||||
memcpy(cbc_chain_data, tmp_block, AES_BLOCK_LENGTH);
|
||||
src += AES_BLOCK_LENGTH;
|
||||
dst += AES_BLOCK_LENGTH;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user