FreeCalypso > hg > tcs211-c139
diff g23m/condat/com/src/comlib/sec_drv_prim.h @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/com/src/comlib/sec_drv_prim.h Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,111 @@ +#ifndef _SEC_DRV_PRIM_H_ +#define _SEC_DRV_PRIM_H_ + + +/******************************************* + Feature flags & constants +*******************************************/ +// TODO: Set properly! +//#define SEC_TRACES_ENABLED +#define FFS_MODE_ENABLED /* MEPD file is located in FFS */ +#define NON_ENCRYPTED_MODE /* MEPD file wont be encrypted */ +//#define IMEI_FROM_OTP /* IMEI is placed in OTP */ +//#define FIRSTBOOT_ENABLED +//#define FIRSTBOOT_FFS_BACKUP_ENABLED /* MEPD backup during firstboot is placed in FFS */ +//#define FIRSTBOOT_RSA_ENABLED /* RSA Part of external MEPD is decrypted */ +//#define FIRSTBOOT_DES_ENABLED /* DES encrypted data in external MEPD is decrypted */ +//#define RSA_FROM_CERT_ENABLED /* Key for RSA is taken from certificate */ +//#define USE_RSAHEAP_FOR_FLASH /* Use the RSA heap (SEC_DRV_RSA_HEAP) for flash writing algorithm */ +//#define RSA_HEAP_IS_INTERNAL /* Buffer for RSA heap is allocated as global array! */ +//#define DSP_DES_KEY_ENABLED /* DES key is taken from the DSP */ + + +/* Flash interface constants */ +extern volatile const UINT8 d_mepd_data; +#define SEC_BASE d_mepd_data /* address on secure flash area goes here */ +#define SEC_DEV_BASE SEC_BASE /* address to offset the flashdrivers from */ +#define SEC_FLASH_SIZE 8192 /* size of the flash sector */ + + +/* RSA heap or Flash buffer constants */ +#if defined(FIRSTBOOT_RSA_ENABLED) || (defined(USE_RSAHEAP_FOR_FLASH) && !defined(FFS_MODE_ENABLED)) +#define RSA_HEAP_SIZE 8192 +#ifndef RSA_HEAP_IS_INTERNAL +#error "we need a 8K RAM buffer for heap during RSA decryption" +#define SEC_DRV_RSA_HEAP xxx /* address from where we can use 8K during firstboot */ +#else /* RSA_HEAP_IS_INTERNAL */ +#define SEC_DRV_RSA_HEAP &sec_drv_buffer[0] +#endif /* RSA_HEAP_IS_INTERNAL */ +#endif /* defined(FIRSTBOOT_RSA_ENABLED) || defined(USE_RSAHEAP_FOR_FLASH) */ + + +#define SEC_PATTERN_INITIALIZED 0xAA +#define SEC_PATTERN_UNINITIALIZED 0x55 + +#define SEC_DRV_KEY_MAX_LEN 16 +#define DES_KEY_SIZE 8 +#define SHA1_SIZE 20 +#define IMEI_SIZE 8 +#define CRYPT_BLOCK_SIZE 8 + +#define FFS_MEPD_FILENAME "/MEPD_File.bin" +#define FLASH_BACKUP_NAME "/flash_backup.bin" +#define BACKUP_BUF_SIZE 128 + + +/******************************************* + Macros +*******************************************/ +#define ALIGN_CRYPT_BLOCK(x) ((x%CRYPT_BLOCK_SIZE)? x+CRYPT_BLOCK_SIZE-(x%CRYPT_BLOCK_SIZE) : x) + +#ifdef SEC_TRACES_ENABLED +#define TRACE(a) test_trace(a) +#define HEXTRACE(str, data, size) hex_trace(str, data, size) +extern void test_trace(const char *str); +extern void hex_trace(const char *str, const void *in, unsigned long int size); +#else +#define TRACE(a) ((void)(0)) +#define HEXTRACE(str, data, size) ((void)(0)) +#endif + + +/******************************************* + Type definitions +*******************************************/ +typedef struct +{ + UINT8 firstboot_pattern; +} T_SEC_DRV_GLOBAL_CONF; + +typedef struct +{ + UINT8 digit[SEC_DRV_KEY_MAX_LEN]; +} T_SEC_DRV_KEY; + + +/******************************************* + Prototypes +*******************************************/ +extern INT8 sec_drv_fast_write; +void sec_drv_flash_backup(void); +void sec_drv_remove_backup(void); +void sec_drv_erase_flash(void); +void sec_drv_read_flash(UINT32 offset, void *pDest, UINT32 size); +void sec_drv_write_flash(UINT32 offset, const void *pSrc, UINT32 size); + +extern BOOL sec_prim_get_global_conf(T_SEC_DRV_GLOBAL_CONF *pGlobalConf); +extern BOOL sec_prim_set_global_conf(const T_SEC_DRV_GLOBAL_CONF *pGlobalConf); + +extern BOOL sec_prim_get_configuration(T_SEC_DRV_CONFIGURATION *pConf); +extern BOOL sec_prim_set_configuration(const T_SEC_DRV_CONFIGURATION *pConf); + +extern BOOL sec_prim_get_key(int rec_num, T_SEC_DRV_KEY *pKey); +extern BOOL sec_prim_set_key(int rec_num, const T_SEC_DRV_KEY *pKey); + +extern BOOL sec_prim_get_cat_header(int rec_num, T_SEC_DRV_CAT_HDR *pHdr); +extern BOOL sec_prim_set_cat_header(int rec_num, const T_SEC_DRV_CAT_HDR *pHdr); + +extern BOOL sec_prim_get_cat_body(int rec_num, void *pBody, UINT16 size); +extern BOOL sec_prim_set_cat_body(int rec_num, const void *pBody, UINT16 size); + +#endif /* _SEC_DRV_PRIM_H_ */