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_ */