]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - lib/aes.c
dts: am57xx-beagle-x15: disable UHS and HS200 support
[people/ms/u-boot.git] / lib / aes.c
index 05c97cd740982f38a57a069507494372adf28e96..2b0849c7e04ed46983035c485b2795b788a1f9e6 100644 (file)
--- a/lib/aes.c
+++ b/lib/aes.c
@@ -27,7 +27,7 @@
 #else
 #include <string.h>
 #endif
-#include "aes.h"
+#include "uboot_aes.h"
 
 /* forward s-box */
 static const u8 sbox[256] = {
@@ -593,16 +593,7 @@ static void debug_print_vector(char *name, u32 num_bytes, u8 *data)
 #endif
 }
 
-/**
- * Apply chain data to the destination using EOR
- *
- * Each array is of length AES_KEY_LENGTH.
- *
- * @cbc_chain_data     Chain data
- * @src                        Source data
- * @dst                        Destination data, which is modified here
- */
-static void apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
+void aes_apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
 {
        int i;
 
@@ -610,12 +601,11 @@ static void apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
                *dst++ = *src++ ^ *cbc_chain_data++;
 }
 
-void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks)
+void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *iv, u8 *src, u8 *dst,
+                           u32 num_aes_blocks)
 {
-       u8 zero_key[AES_KEY_LENGTH] = { 0 };
        u8 tmp_data[AES_KEY_LENGTH];
-       /* Convenient array of 0's for IV */
-       u8 *cbc_chain_data = zero_key;
+       u8 *cbc_chain_data = iv;
        u32 i;
 
        for (i = 0; i < num_aes_blocks; i++) {
@@ -623,7 +613,7 @@ void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks)
                debug_print_vector("AES Src", AES_KEY_LENGTH, src);
 
                /* Apply the chain data */
-               apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
+               aes_apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
                debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
 
                /* Encrypt the AES block */
@@ -637,13 +627,15 @@ void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks)
        }
 }
 
-void aes_cbc_decrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks)
+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];
        /* Convenient array of 0's for IV */
-       u8 cbc_chain_data[AES_KEY_LENGTH] = { 0 };
+       u8 cbc_chain_data[AES_KEY_LENGTH];
        u32 i;
 
+       memcpy(cbc_chain_data, iv, AES_KEY_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);
@@ -655,7 +647,7 @@ void aes_cbc_decrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks)
                debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
 
                /* Apply the chain data */
-               apply_cbc_chain_data(cbc_chain_data, tmp_data, dst);
+               aes_apply_cbc_chain_data(cbc_chain_data, tmp_data, dst);
                debug_print_vector("AES Dst", AES_KEY_LENGTH, dst);
 
                /* Update pointers for next loop. */