1 /**
2     *****************************************************************************
3     * @file     cmem7_aes.c
4     *
5     * @brief    CMEM7 AES source file
6     *
7     *
8     * @version  V1.0
9     * @date     3. September 2013
10     *
11     * @note
12     *
13     *****************************************************************************
14     * @attention
15     *
16     * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
17     * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
18     * TIME. AS A RESULT, CAPITAL-MICRO SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
19     * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
20     * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
21     * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
22     *
23     * <h2><center>&copy; COPYRIGHT 2013 Capital-micro </center></h2>
24     *****************************************************************************
25     */
26 
27 #include "cmem7_aes.h"
28 
AES_Decrypt(const void * src,void * dst,uint32_t len)29 BOOL AES_Decrypt(const void *src, void *dst, uint32_t len)
30 {
31     uint32_t *po = dst;
32     const uint32_t *pi = src;
33 
34     if (len & 0xF)
35         return FALSE;
36 
37     AES->FIFO_CLEAR = 1;
38     AES->FIFO_CLEAR = 0;
39     GLOBAL_CTRL->AES_BURST_TYPE = 0x1;                      // Cannot be 0
40     while (len > 0) {
41         while (0 == GLOBAL_CTRL->AES_STATUS_b.IDLE);        // 0x41007010
42         udelay(2);
43         GLOBAL_CTRL->AES_TARGET_ADDR = (uint32_t)po;        // 0x41800000;
44         po += 4;
45         len -= 4 * sizeof(uint32_t);
46         while (0 == GLOBAL_CTRL->AES_STATUS_b.RD_EMPTY);    // 0x41007010
47         AES->FIFO = *pi++;
48         AES->FIFO = *pi++;
49         AES->FIFO = *pi++;
50         AES->FIFO = *pi++;
51     }
52     return TRUE;
53 }
54