@ -632,3 +632,31 @@ void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks)
dst + = AES_KEY_LENGTH ;
}
}
void aes_cbc_decrypt_blocks ( u8 * key_exp , u8 * src , u8 * dst , u32 num_aes_blocks )
{
u8 tmp_data [ AES_KEY_LENGTH ] , tmp_block [ AES_KEY_LENGTH ] ;
/* Convenient array of 0's for IV */
u8 cbc_chain_data [ AES_KEY_LENGTH ] = { 0 } ;
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 ) ;
memcpy ( tmp_block , src , AES_KEY_LENGTH ) ;
/* Decrypt the AES block */
aes_decrypt ( src , key_exp , tmp_data ) ;
debug_print_vector ( " AES Xor " , AES_KEY_LENGTH , tmp_data ) ;
/* Apply the chain data */
apply_cbc_chain_data ( cbc_chain_data , tmp_data , dst ) ;
debug_print_vector ( " AES Dst " , AES_KEY_LENGTH , dst ) ;
/* Update pointers for next loop. */
memcpy ( cbc_chain_data , tmp_block , AES_KEY_LENGTH ) ;
src + = AES_KEY_LENGTH ;
dst + = AES_KEY_LENGTH ;
}
}