FreeCalypso > hg > freecalypso-reveng
diff fluid-mnf/calplus/secure_types.h @ 311:9cecc930d78f
fluid-mnf: original source from TI,
defenestrated line endings and rearranged directory structure,
but no *.[ch] source file content changes yet
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 29 Feb 2020 05:36:07 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fluid-mnf/calplus/secure_types.h Sat Feb 29 05:36:07 2020 +0000 @@ -0,0 +1,508 @@ +/* %Z% nom : %M% SID: %I% date : %G% */ +/* Filename: %M% */ +/* Version: %I% */ +/****************************************************************************** + * WIRELESS COMMUNICATION SYSTEM DEVELOPMENT + * + * (C) 2002 Texas Instruments France. All rights reserved + * + * Author : Constantin HAIDAMOUS + * + * + * Important Note + * -------------- + * + * This S/W is a preliminary version. It contains information on a product + * under development and is issued for evaluation purposes only. Features + * characteristics, data and other information are subject to change. + * + * The S/W is furnished under Non Disclosure Agreement and may be used or + * copied only in accordance with the terms of the agreement. It is an offence + * to copy the software in any way except as specifically set out in the + * agreement. No part of this document may be reproduced or transmitted in any + * form or by any means, electronic or mechanical, including photocopying and + * recording, for any purpose without the express written permission of Texas + * Instruments Inc. + * + ****************************************************************************** + * + * FILE NAME: secure_types.h + * + * + * PURPOSE: + * + * + * FILE REFERENCES: + * + * Name IO Description + * ------------- -- --------------------------------------------- + * + * + * + * EXTERNAL VARIABLES: + * + * Source: none + * + * Name Type IO Description + * ------------------- --------------- -- ---------------------------- + * + * + * + * ABNORMAL TERMINATION CONDITIONS, ERROR AND WARNING MESSAGES: + * + * + * + * ASSUMPTION, CONSTRAINTS, RESTRICTIONS: + * + * + * + * NOTES: + * + * + * + * REQUIREMENTS/FUNCTIONAL SPECIFICATION REFERENCES: + * + * + * + * + * DEVELOPMENT HISTORY: + * + * Date Name(s) Version Description + * ---------- -------------------- ------- --------------------------------- + * 04/12/2002 Constantin HAIDAMOUS V1.0.0 First release + * 22-Apr-02 Francois AMAND V1.0.1 Update of secure status to + * facilitate integration in final + * ROM code. + * Data alignment in struture to + * optimize memory requirement. + * Management of global secure data. + * 28-Apr-02 Francois AMAND V1.0.2 Update some constants to be + * compliant with certificate + * definition. + * Add CALYPSO PLUS specific + * parameters structure. + * Differentiate Manufacturer and + * Platform certificate. + * Add debug request field in Manu- + * facturer certificate. + * Optimize certificate field size. + * Change commentary wrapper to be + * ANSI compliant. + * 29-Apr-02 Francois AMAND V1.0.3 Remove unused constant. + * Set under compilation flag the + * secure services. + * 14-May-02 Francois AMAND V1.0.4 Add CONF_CSI field in T_CONF_PARAM + * structure definition. + * Change name of CS_MODE to EX_CTRL + * Change size of DCCTRL_CSx to 8 + * bits to optimize size and alignment. + * 17-May-02 Francois AMAND V1.0.5 Modification of hashing size for + * binding/unbinding. + * 17-May-02 Constantin HAIDAMOUS V1.0.6 Integration of data structure for + * binding/unbinding services API . + * 17-May-02 Francois AMAND V1.0.7 Integration of RSA S/W and Check + * ROM in Secure Services. + * Update of Secure Services manage- + * ment. + * 22-May-02 Constantin HAIDAMOUS V1.0.8 Changing RSA modulus length , Max + * RSA length =2048 bits. Adding initial + * vectore for Binding structure. + * 27-May-02 Francois AMAND V1.0.9 Changing SAMSON to CALYPSO. + * Addition of Secure Services for + * RUN Time checker. + * 28-May-02 Constantin HAIDAMOUS V1.0.10 Changing C_PLAT_SIG_SIZE to 4. + * + * 06-June-02 Constantin HAIDAMOUS V1.0.11 Changing Secure service API. + * + * 12-Jun-02 Francois AMAND V1.0.12 Update of T_CONF_PARAM according + * to last memory interface spec. + * 13-Jun-02 Constantin HAIDAMOUS V1.0.13 Update of T_UNBINDCTX for segmented + * unbind operation optimization. + * 14-Jun-02 Constantin HAIDAMOUS V1.0.14 Update of T_BINDCTX for segmented + * bind operation . + * 14-Jun-02 Francois AMAND V1.0.15 Force d_temp in Secure RAM. + * Remove other definitions. + * 25-Jun-02 Francois AMAND V1.0.16 Addition of Platform unbinding + * during boot concept under compi- + * lation flag C_PLATFORM_UNBIND_BOOT. + * 27-Jun-02 Constantin HAIDAMOUS V1.0.17 Adding C_SECURE_RNG_ALARM to E_SECURE_STATUS + * C_SECURE_RNG_ALARM = C_RNG_ALARM from Safenet + * 09-Jul-02 Constantin HAIDAMOUS V1.0.18 Adding Application ID and Timeout for Bind function + * 16-Jul-02 Francois AMAND V1.0.19 Add S/W pseudo-random generator. + * 19-Jul-02 Francois AMAND V1.0.20 Remove S/W pseudo-random. + * 01-Aug-02 Constantin HAIDAMOUS V1.0.21 Removing boolean b_HashDone in Bind and Unbind Context + * 27-Jan-03 Francois AMAND V2.0.0 Remove of C_PLATFORM_UNBIND_BOOT flag + * 27-Jan-03 Francois AMAND V2.0.1 Add compliance with SW@P 2.0 (REQ03047) + * 20-Mar-03 Francois AMAND V2.0.2 Code cleaning + * + * ALGORITHM: + * + * + *******************************************************************************/ + + +#include "standard.h" + +#ifndef _SECURE_TYPES_H + #define _SECURE_TYPES_H + + #ifndef C_SECURE_SERVICES + #define C_SECURE_SERVICES 1 + #endif + + #ifndef C_CHIPSET + #define C_CHIPSET_CALYPSO 4 + #define C_CHIPSET_CALYPSOPLUS 11 + #define C_CHIPSET C_CHIPSET_CALYPSOPLUS + #endif + + + + /**************************************************************************** + * Constants + ****************************************************************************/ + + #define C_WORD32LGB 4 + +// #ifndef NULL /* To avoid conflict with other compilers */ +// #define NULL (UWORD32 *) 0x00000000L +// #endif + + /* Certificate block */ + + /* Length in long word (32 bits) */ + + #define C_SHA1HASHLG 5 + #define C_MD5HASHLG 4 + + #define C_RSAKEYLG 64 /* Max Modulus size : 2048 bits */ + #define C_RSASIGLG C_RSAKEYLG + + #define C_DIE_ID_SIZE 2 /* DIE ID defined on 64-bits */ + + #define C_PLATFORM_DATA_SIZE 16048 /* Maximum value to have CertSize coded on 16-bits */ + + #if C_SECURE_SERVICES == 1 + #define C_IVLG 2 + #define C_TDESKEYLG 4 + #define C_TDESKEYLGB C_TDESKEYLG * C_WORD32LGB + #define C_PLAT_SIG_SIZE 4 /* Must be a multiple of 64 bits */ + #endif + + #define C_MANUF_SIG_SIZE C_RSASIGLG + + + /* Certificate Type */ + + #define C_CERTTYPE_MAN 0x00 + #define C_CERTTYPE_PLAT 0x01 + + #if C_SECURE_SERVICES == 1 + /* Confidentiality request */ + + #define C_CRYPTVOID 0x00 + #define C_CRYPTNOREQUEST 0x00 + #define C_CRYPTREQUEST 0x01 + #endif + + + /* Debug request */ + + #define C_DEBUGNOREQUEST 0x00 + #define C_DEBUGREQUEST 0x01 + + + /* CS image check request */ + + #define C_CSIMGNOREQUEST 0x00 + #define C_CSIMGREQUEST 0x01 + + + /* Temporary block */ + + #define C_TEMPDATALG 32 + #define C_TEMPDATALGB C_TEMPDATALG * C_WORD32LGB + + #define C_CERT_TEMP_SWKEY 0 + #define C_CERT_TEMP_DATA C_CERT_TEMP_SWKEY + C_TDESKEYLG + + + /**************************************************************************** + * Structures + ****************************************************************************/ + + /* CALYPSO PLUS Parameters */ + typedef struct { + /* External Memory Interface configuration */ + UWORD16 d_conf_cs5; + UWORD16 d_exws_cs5; + UWORD16 d_ex_ctrl; + + /* Authentication configuration */ + UWORD16 d_cs_img_req; + UWORD32 d_flash_size; + UWORD32 d_granularity; + } T_CONF_PARAM; + + + /* RSA Public key */ + + typedef struct + { + UWORD32 a_Modulus[C_RSAKEYLG]; /* Public Modulus */ + UWORD32 d_ModulusLength; /* Public Modulus length in bytes */ + UWORD32 d_Exponent; /* Public Exponent */ + } T_RSAPUBKEY; + + + /*Certificate Structure*/ + + typedef struct + { + UWORD16 d_Certsize; /* Size of Certificate */ + UWORD8 d_Certtype; /* Type of Certificate */ + UWORD8 d_Debugrequest; /* Debug Request */ + UWORD32 d_Addcode; /* Start Address of Code */ + UWORD32 d_Codesize; /* Size of Code */ + UWORD32 d_CodeStartAdd; /* Entry Point Address */ + T_RSAPUBKEY d_Manpubkey; /* Manufacturer Public Key */ + T_RSAPUBKEY d_Origpubkey; /* Originator Public Key */ + UWORD32 a_Origpubkeysig[C_MANUF_SIG_SIZE]; /* Originator Public Key Signature */ + UWORD32 a_Swsig[C_MANUF_SIG_SIZE]; /* Software Signature */ + T_CONF_PARAM d_Confparam; /* Configuration Parameters */ + UWORD32 a_die_id[C_DIE_ID_SIZE]; /* Die Id */ + } T_MANUFACTURER_CERTIFICATE; + + + /* + * Manufacturer Certificate structure containing dynamic Platform Data + */ + typedef struct + { + T_MANUFACTURER_CERTIFICATE d_manufacturer_certificate; + UWORD32 a_platform_data[C_PLATFORM_DATA_SIZE]; /* Platform Data */ + UWORD32 a_Certsig[C_MANUF_SIG_SIZE]; /* Certificate Signature */ + } T_MANUFACTURER_CERTIFICATE_PLATFORM_DATA; + + + /* + * Manufacturer Certificate structure for the flash programmer without the dynamic Platform Data + */ + typedef struct + { + UWORD16 d_Certsize; /* Size of Certificate */ + UWORD8 d_Certtype; /* Type of Certificate */ + UWORD8 d_Debugrequest; /* Debug Request */ + UWORD32 d_Addcode; /* Start Address of Code */ + UWORD32 d_Codesize; /* Size of Code */ + UWORD32 d_CodeStartAdd; /* Entry Point Address */ + T_RSAPUBKEY d_Manpubkey; /* Manufacturer Public Key */ + T_RSAPUBKEY d_Origpubkey; /* Originator Public Key */ + UWORD32 a_Origpubkeysig[C_MANUF_SIG_SIZE]; /* Originator Public Key Signature */ + UWORD32 a_Swsig[C_MANUF_SIG_SIZE]; /* Software Signature */ + T_CONF_PARAM d_Confparam; /* Configuration Parameters */ + UWORD32 a_die_id[C_DIE_ID_SIZE]; /* Die Id */ + UWORD32 a_Certsig[C_MANUF_SIG_SIZE]; /* Certificate Signature */ + } T_MANUFACTURER_CERTIFICATE_FLASH_PROGRAMMER; + + + #if C_SECURE_SERVICES == 1 + /* + * Define ROM secure service entry point address + */ + #define C_ROM_SSERVICE_ENTRY_POINT_ADDR 0x00000024L + + /* + * Definition of function pointer to use ROM Secure Services + */ + typedef UWORD16 (*T_ROM_SSERVICE) (UWORD16, void *, void *); + + + typedef struct + { + UWORD16 d_Certsize; /* Size of Certificate */ + UWORD8 d_Certtype; /* Type of Certificate */ + UWORD8 d_Confrequest; /* Confidentiality Request */ + UWORD32 d_Addcode; /* Start Address of Code */ + UWORD32 d_Codesize; /* Size of Code */ + UWORD32 d_AppID; /* Application Id */ + UWORD32 a_iv[C_IVLG]; /* Initial Vector for TDES CBC */ + UWORD32 a_Encswkey[C_TDESKEYLG]; /* Encrypted S/W Key */ + UWORD32 a_Swsig[C_PLAT_SIG_SIZE]; /* Software Signature */ + UWORD32 a_Certsig[C_PLAT_SIG_SIZE]; /* Certificate Signature */ + } T_PLATFORM_CERTIFICATE; + + + /* Unbind Context Structure used for segmented Unbind operation */ + + typedef struct + { + UWORD32 d_Startpos; /* Start Position of Data to Process */ + UWORD32 d_Currentpos; /* Current Position of Data to Process */ + UWORD32 a_Currentdigest[C_MD5HASHLG]; /* Current Digest */ + UWORD32 d_Digcount; /* Digest Count */ + UWORD32 a_Currentiv[C_IVLG]; /* Current Initial Vector */ + UWORD32 a_Encswkey[C_TDESKEYLG]; /* Encrypted TDES Software Key */ + UWORD32 a_iv[C_IVLG]; /* Initial Vector */ + UWORD32 d_Codesize; /* Code Size */ + UWORD32 d_AppID; /* Application Id */ + UWORD32 a_Swsig[C_PLAT_SIG_SIZE]; /* Software Signature */ + UWORD8 d_Confrequest; /* Confidentiality Request */ + BOOLEAN b_UnbindDone; /* Set to 1 if Data Unbinding is Done */ + } T_UNBINDCTX; + + + /* Bind Context Structure used for segmented Bind operation */ + + typedef struct + { + UWORD32 d_Startpos; /* Start Position of Data to Process */ + UWORD32 d_Currentpos; /* Current Position of Data to Process */ + UWORD32 a_Currentdigest[C_MD5HASHLG]; /* Current Digest */ + UWORD32 d_Digcount; /* Digest Count */ + UWORD32 a_Currentiv[C_IVLG]; /* Current Initial Vector */ + UWORD32 a_Encswkey[C_TDESKEYLG]; /* Encrypted TDES Software Key */ + UWORD32 a_iv[C_IVLG]; /* Initial Vector */ + UWORD32 d_Addcode; /* Store Address of Code */ + UWORD32 d_Codesize; /* Code Size */ + UWORD32 d_AppID; /* Application Id */ + UWORD8 d_Confrequest; /* Confidentiality Request */ + BOOLEAN b_KeyCreateDone; /* Set to 1 if TDES Software Key Creation is Done */ + BOOLEAN b_BindDone; /* Set to 1 if Data Binding is Done */ + } T_BINDCTX; + + + typedef struct + { + T_PLATFORM_CERTIFICATE* p_Cert; + UWORD32* p_Code; + T_PLATFORM_CERTIFICATE* p_CertCtx; + T_UNBINDCTX* p_UnbindCtx; + UWORD32 d_Steplength; + BOOLEAN b_start; + } T_SSERVICE_UNBIND; + + + + typedef struct + { + T_PLATFORM_CERTIFICATE* p_Cert; + UWORD32* p_Code; + T_PLATFORM_CERTIFICATE* p_CertCtx; + T_BINDCTX* p_BindCtx; + UWORD32 d_Steplength; + UWORD32 d_timeout; + BOOLEAN b_start; + } T_SSERVICE_BIND; + + + /* + * Structure definition for RSA S/W secure services + */ + typedef struct + { + UWORD32 * p_datain; + UWORD32 * p_dataout; + UWORD32 output_length; + T_RSAPUBKEY * p_rsapubkey; + UWORD32 * p_rsaheap; + } T_SSERVICE_RSA; + + + /* + * Structure definition for Checker ROM secure services + */ + typedef struct + { + UWORD16 d_checksum; + UWORD16 d_rom_id; + } T_SSERVICE_CHECKROM; + + + /* + * Structure definition for Run Time Checker secure services + */ + typedef struct + { + UWORD32 * p_rsaheap; + T_MANUFACTURER_CERTIFICATE * p_certificate; + } T_SSERVICE_RUNTIMECHECKER; + + + /* + * Structure definition for Run Time Platform Data Checker secure services + */ + typedef struct + { + T_PLATFORM_CERTIFICATE* p_Cert; + } T_SSERVICE_RUNTIME_PLAT_CHECKER; + + + #endif /* C_SECURE_SERVICES == 1 */ + + /**************************************************************************** + * Global variables + ****************************************************************************/ + #ifndef SECURE_GLOBAL + #define SECURE_GLOBAL extern + #endif + + #ifdef _TMS470 + #pragma DATA_SECTION(d_temp,".secdata") + #pragma DATA_SECTION(a_hash_certificate,".secdata") + #endif + + SECURE_GLOBAL UWORD32 d_temp[C_TEMPDATALG]; /* Temporary data in Secure RAM */ + SECURE_GLOBAL UWORD32 a_hash_certificate[C_SHA1HASHLG]; /* SHA-1 hashing of Manufacturer Certificate */ + + /**************************************************************************** + * Status + ****************************************************************************/ + + typedef enum + { + C_SECURE_ERROR = 0, + C_SECURE_SUCCESS = 1, + C_SECURE_INVALID_ID = 2, + C_SECURE_RNG_ALARM = 3, + C_SECURE_INVALID_DIE_ID = 4, + C_SECURE_BLANK_DIE_ID = 5 + } E_SECURE_STATUS; + + + /**************************************************************************** + * Function prototype for secure services + ****************************************************************************/ + + #if C_SECURE_SERVICES == 1 + #define C_MAX_DEFINED_ID 6 + #define C_SEC_SERVICE_BINDING_ID 0x0000 + #define C_SEC_SERVICE_UNBINDING_ID 0x0001 + #define C_SEC_SERVICE_RSA_ID 0x0002 + #define C_SEC_SERVICE_CHECKROM_ID 0x0003 + #define C_SEC_SERVICE_RUN_TIME_CHECKER_ID 0x0004 + #define C_SEC_SERVICE_RUN_TIME_PLATFORM_DATA_CHECKER 0x0005 + + E_SECURE_STATUS ROM_Sservice_Unbind(UWORD16 reserved, + T_SSERVICE_UNBIND* p_StructUnbind); + + E_SECURE_STATUS ROM_Sservice_Bind(UWORD16 reserved, + T_SSERVICE_BIND* p_StructBind); + + E_SECURE_STATUS ROM_Sservice_Rsa(UWORD16 reserved, + T_SSERVICE_RSA* p_StructRsa); + + E_SECURE_STATUS ROM_Sservice_CheckRom(UWORD16 reserved, + T_SSERVICE_CHECKROM* p_StructCheckRom); + + E_SECURE_STATUS ROM_Sservice_RunTimeChecker( + UWORD16 reserved, + T_SSERVICE_RUNTIMECHECKER* p_StructRunTimeChecker); + + E_SECURE_STATUS ROM_Sservice_RunTimePlatformDataChecker( + UWORD16 reserved, + T_SSERVICE_RUNTIME_PLAT_CHECKER* p_StructRunTimePlatChecker); + + #endif + +#endif /* _SECURE_TYPES_H */