1 #ifndef _SECURE_BOOT_H_
2 #define _SECURE_BOOT_H_
4 #define KEY_INFO_SIZ (512)
5 #define CUSTOM_DATA_SIZ (1024)
6 #define VLR_INFO_SIZ (512)
8 #if defined(CONFIG_SPX30G)
9 #define INTER_RAM_BEGIN 0x50003000
11 #define INTER_RAM_BEGIN 0x50005000
13 #define CONFIG_SEC_LOAD_LEN 0xC00
14 #define CONFIG_SYS_NAND_U_BOOT_LOAD_LEN 0x80000
16 #define KEY_INFO_OFF (INTER_RAM_BEGIN + CONFIG_SPL_LOAD_LEN - KEY_INFO_SIZ - VLR_INFO_SIZ)
17 #define VLR_INFO_OFF (CONFIG_SYS_NAND_U_BOOT_START + CONFIG_SYS_NAND_U_BOOT_SIZE - VLR_INFO_SIZ)
19 #ifdef CONFIG_NAND_SPL
20 #define panic(x...) do{}while(0)
21 #define printf(x...) do{}while(0)
24 #define MIN_UNIT (512)
25 #define HEADER_NAME "SPRD-SECUREFLAG"
27 #define VLR_NAME (0x3A524C56)
28 #define PUK_NAME (0x3A4B5550)
29 #define CODE_NAME (0x45444F43)
32 #define SHA1HashSize 20
33 typedef unsigned int uint32_t;
34 typedef unsigned char uint8_t;
36 * This structure will hold context information for the SHA-1
39 typedef struct SHA1Context32 {
40 unsigned int Intermediate_Hash[5]; /* Message Digest */
41 unsigned int Length_Low; /* Message length in bits */
42 unsigned int Length_High; /* Message length in bits */
43 /* Index into message block array */
44 unsigned int Message_Block_Index;
45 unsigned int W[80]; /* 512-bit message blocks */
56 uint8_t header_magic[16];
59 uint8_t header_ver_padding[8];
61 uint8_t reserved[432];
73 #define VLR_MAGIC (0x524C56FF)
83 uint32_t intermediate_hash[5];
86 uint32_t msg_block_idx;
93 void (*efuse_init) (void);
94 void (*efuse_close) (void);
95 uint32_t(*efuse_read) (uint32_t block_id, uint32_t * data);
96 uint32_t(*sha1reset_32) (sha1context_32 *);
97 uint32_t(*sha1input_32) (sha1context_32 *, const uint32_t *, uint32_t);
98 uint32_t(*sha1result_32) (sha1context_32 *, uint8_t *);
99 void (*rsa_modpower) (uint32_t * p, uint32_t * m, uint32_t * r2, uint32_t e);
100 } rom_callback_func_t;
103 rom_callback_func_t *rom_callback;
104 void (*secure_check) (uint8_t * data, uint32_t data_len, uint8_t * data_hash, uint8_t * data_key);
105 } sec_callback_func_t;
107 void secure_check(uint8_t * data, uint32_t data_len, uint8_t * data_hash, uint8_t * data_key);
108 int cal_md5(void *data, uint32_t len, void *harsh_data);
109 int secureboot_enabled(void);
112 * Function Prototypes
114 PUBLIC int SHA1Reset_32(SHA1Context_32 *);
115 PUBLIC int SHA1Input_32(SHA1Context_32 *, const unsigned int *message, unsigned int len);
116 PUBLIC int SHA1Result_32(SHA1Context_32 * context, unsigned char *Message_Digest);