Home | History | Annotate | Download | only in inc
      1  /*
      2   * Copyright (C) 2015 NXP Semiconductors
      3   *
      4   * Licensed under the Apache License, Version 2.0 (the "License");
      5   * you may not use this file except in compliance with the License.
      6   * You may obtain a copy of the License at
      7   *
      8   *      http://www.apache.org/licenses/LICENSE-2.0
      9   *
     10   * Unless required by applicable law or agreed to in writing, software
     11   * distributed under the License is distributed on an "AS IS" BASIS,
     12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13   * See the License for the specific language governing permissions and
     14   * limitations under the License.
     15   */
     16 #ifndef ALA_H_
     17 #define ALA_H_
     18 
     19 #define NXP_LS_AID
     20 #include "data_types.h"
     21 #include "IChannel.h"
     22 #include <stdio.h>
     23 
     24 typedef struct Ala_ChannelInfo
     25 {
     26     UINT8 channel_id;
     27     bool  isOpend;
     28 }Ala_ChannelInfo_t;
     29 
     30 typedef struct Ala_TranscieveInfo
     31 {
     32     INT32 timeout;
     33     UINT8 sRecvData[1024];
     34     UINT8 sSendData[1024];
     35     INT32 sSendlength;
     36     int   sRecvlength;
     37     UINT8 sTemp_recvbuf[1024];
     38 }Ala_TranscieveInfo_t;
     39 
     40 #if(NXP_LDR_SVC_VER_2 == TRUE)
     41 typedef struct Ala_ImageInfo
     42 {
     43     FILE                 *fp;
     44     int                  fls_size;
     45     char                 fls_path[384];
     46     int                  bytes_read;
     47     FILE                 *fResp;
     48     int                  fls_RespSize;
     49     char                 fls_RespPath[384];
     50     int                  bytes_wrote;
     51     Ala_ChannelInfo_t    Channel_Info[10];
     52     UINT8                channel_cnt;
     53 }Ala_ImageInfo_t;
     54 typedef enum
     55 {
     56     LS_Default = 0x00,
     57     LS_Cert = 0x7F21,
     58     LS_Sign = 0x60,
     59     LS_Comm = 0x40
     60 }Ls_TagType;
     61 #else
     62 typedef struct Ala_ImageInfo
     63 {
     64     FILE                 *fp;
     65     int                  fls_size;
     66     char                 fls_path[256];
     67     int                  bytes_read;
     68     Ala_ChannelInfo_t    Channel_Info[10];
     69     UINT8                channel_cnt;
     70 }Ala_ImageInfo_t;
     71 #endif
     72 typedef struct Ala_lib_Context
     73 {
     74     IChannel_t            *mchannel;
     75     Ala_ImageInfo_t       Image_info;
     76     Ala_TranscieveInfo_t  Transcv_Info;
     77 }Ala_Dwnld_Context_t,*pAla_Dwnld_Context_t;
     78 
     79 static UINT8 OpenChannel[] = {0x00, 0x70, 0x00, 0x00, 0x01};
     80 #if(NXP_LDR_SVC_VER_2 == TRUE)
     81 static UINT8 GetData[] = {0x80, 0xCA, 0x00, 0x46, 0x00};
     82 #ifndef NXP_LS_AID
     83 static UINT8 SelectAla[] = {0x00, 0xA4, 0x04, 0x00, 0x0D, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C, 0x41, 0x01, 0x43, 0x4F, 0x52, 0x01};
     84 #else
     85 static UINT8 SelectAla[] = {0x00, 0xA4, 0x04, 0x00, 0x0F, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x54, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0B
     86 , 0x00,0x01};
     87 #endif
     88 #else
     89 static UINT8 SelectAla[] = {0x00, 0xA4, 0x04, 0x00, 0x0D, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C, 0x41, 0x01, 0x43, 0x4F, 0x52, 0x01};
     90 #endif
     91 /*ALA2*/
     92 #if(NXP_LDR_SVC_VER_2 == TRUE)
     93 #define NOOFAIDS     0x03
     94 #define LENOFAIDS    0x16
     95 #ifndef NXP_LS_AID
     96 static UINT8 ArrayOfAIDs[NOOFAIDS][LENOFAIDS] = {
     97         {0x12, 0x00, 0xA4, 0x04, 0x00, 0x0D, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C, 0x41, 0x01, 0x4C, 0x44, 0x52, 0x01,0x00,0x00,0x00},
     98         {0x12, 0x00, 0xA4, 0x04, 0x00, 0x0D, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x41, 0x4C, 0x41, 0x01, 0x43, 0x4F, 0x52, 0x01,0x00,0x00,0x00},
     99         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    100 };
    101 #else
    102 static UINT8 ArrayOfAIDs[NOOFAIDS][LENOFAIDS] = {
    103         {0x14, 0x00, 0xA4, 0x04, 0x00, 0x0F, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x54, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0B,0x00,0x02,0x00},
    104         {0x14, 0x00, 0xA4, 0x04, 0x00, 0x0F, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x54, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0B,0x00,0x01,0x00},
    105         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    106 };
    107 #endif
    108 #define TAG_CERTIFICATE     0x7F21
    109 #define TAG_LSES_RESP       0x4E
    110 #define TAG_LSES_RSPLEN     0x02
    111 #define TAG_SERIAL_NO       0x93
    112 #define TAG_LSRE_ID         0x42
    113 #define TAG_LSRE_SIGNID     0x45
    114 #define TAG_CERTFHOLD_ID    0x5F20
    115 #define TAG_KEY_USAGE       0x95
    116 #define TAG_EFF_DATE        0x5F25
    117 #define TAG_EXP_DATE        0x5F24
    118 #define TAG_CCM_PERMISSION  0x53
    119 #define TAG_SIG_RNS_COMP    0x5F37
    120 
    121 #define TAG_LS_VER1         0x9F
    122 #define TAG_LS_VER2         0x08
    123 #define LS_DEFAULT_STATUS   0x6340
    124 #define LS_SUCCESS_STATUS   0x9000
    125 #define TAG_RE_KEYID        0x65
    126 
    127 #define LS_ABORT_SW1        0x69
    128 #define LS_ABORT_SW2        0x87
    129 #define AID_MEM_PATH       "/data/vendor/ese/AID_MEM.txt"
    130 #define LS_STATUS_PATH     "/data/vendor/ese/LS_Status.txt"
    131 #define LS_SRC_BACKUP      "/data/vendor/ese/LS_Src_Backup.txt"
    132 #define LS_DST_BACKUP      "/data/vendor/ese/LS_Dst_Backup.txt"
    133 #define MAX_CERT_LEN        (255+137)
    134 
    135 #endif
    136 /*ALA2*/
    137 
    138 #define JCOP3_WR
    139 #define APPLET_PATH        "/data/ala/"
    140 #define MAX_SIZE            0xFF
    141 #define PARAM_P1_OFFSET     0x02
    142 #define FIRST_BLOCK         0x05
    143 #define LAST_BLOCK          0x84
    144 #define ONLY_BLOCK          0x85
    145 #define CLA_BYTE            0x80
    146 #define JSBL_HEADER_LEN     0x03
    147 #define ALA_CMD_HDR_LEN     0x02
    148 
    149 /* Definations for TAG ID's present in the script file*/
    150 #define TAG_SELECT_ID       0x6F
    151 #define TAG_ALA_ID          0x84
    152 #define TAG_PRO_DATA_ID     0xA5
    153 #define TAG_JSBL_HDR_ID     0x60
    154 #define TAG_JSBL_KEY_ID     0x61
    155 #define TAG_SIGNATURE_ID    0x41
    156 #define TAG_ALA_CMD_ID      0x40
    157 #define TAG_JSBL_CER_ID     0x44
    158 
    159 /*Definitions for Install for load*/
    160 #define INSTAL_LOAD_ID      0xE6
    161 #define LOAD_CMD_ID         0xE8
    162 #define LOAD_MORE_BLOCKS    0x00
    163 #define LOAD_LAST_BLOCK     0x80
    164 
    165 #define STORE_DATA_CLA      0x80
    166 #define STORE_DATA_INS      0xE2
    167 #define STORE_DATA_LEN      32
    168 #define STORE_DATA_TAG      0x4F
    169 
    170 /*******************************************************************************
    171 **
    172 ** Function:        initialize
    173 **
    174 ** Description:     Initialize all member variables.
    175 **                  native: Native data.
    176 **
    177 ** Returns:         True if ok.
    178 **
    179 *******************************************************************************/
    180 BOOLEAN initialize (IChannel_t *channel);
    181 
    182 /*******************************************************************************
    183 **
    184 ** Function:        finalize
    185 **
    186 ** Description:     Release all resources.
    187 **
    188 ** Returns:         None
    189 **
    190 *******************************************************************************/
    191 void finalize ();
    192 
    193 #if(NXP_LDR_SVC_VER_2 == TRUE)
    194 tJBL_STATUS Perform_ALA(const char *path,const char *dest, const UINT8 *pdata, UINT16 len, UINT8 *respSW);
    195 #else
    196 tJBL_STATUS Perform_ALA(const char *path, const UINT8 *pdata, UINT16 len);
    197 #endif
    198 tJBL_STATUS GetJsbl_Certificate_Refkey(UINT8 *pkey, INT32 *pKeylen);
    199 
    200 static tJBL_STATUS
    201 ALA_OpenChannel(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo);
    202 
    203 static tJBL_STATUS
    204 ALA_SelectAla(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo);
    205 
    206 static tJBL_STATUS
    207 ALA_StoreData(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo);
    208 
    209 static tJBL_STATUS
    210 ALA_loadapplet(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    211 
    212 #if(NXP_LDR_SVC_VER_2 == TRUE)
    213 static tJBL_STATUS
    214 ALA_update_seq_handler(tJBL_STATUS (*seq_handler[])(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo), const char *name, const char *dest);
    215 
    216 tJBL_STATUS GetLs_Version(UINT8 *pKey);
    217 
    218 tJBL_STATUS GetVer_seq_handler(tJBL_STATUS (*seq_handler[])(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo));
    219 
    220 tJBL_STATUS Write_Response_To_OutFile(Ala_ImageInfo_t *image_info, UINT8* RecvData, INT32 recvlen, Ls_TagType tType);
    221 
    222 tJBL_STATUS Check_Certificate_Tag(UINT8 *read_buf, UINT16 *offset1);
    223 
    224 tJBL_STATUS Check_SerialNo_Tag(UINT8 *read_buf, UINT16 *offset1);
    225 
    226 tJBL_STATUS Check_LSRootID_Tag(UINT8 *read_buf, UINT16 *offset1);
    227 
    228 tJBL_STATUS Check_CertHoldID_Tag(UINT8 *read_buf, UINT16 *offset1);
    229 
    230 tJBL_STATUS Check_Date_Tag(UINT8 *read_buf, UINT16 *offset1);
    231 
    232 tJBL_STATUS Check_45_Tag(UINT8 *read_buf, UINT16 *offset1, UINT8 *tag45Len);
    233 
    234 tJBL_STATUS Certificate_Verification(Ala_ImageInfo_t *Os_info, Ala_TranscieveInfo_t
    235 *pTranscv_Info, UINT8 *read_buf, UINT16 *offset1, UINT8 *tag45Len);
    236 
    237 tJBL_STATUS Check_Complete_7F21_Tag(Ala_ImageInfo_t *Os_info,
    238        Ala_TranscieveInfo_t *pTranscv_Info, UINT8 *read_buf, UINT16 *offset);
    239 BOOLEAN ALA_UpdateExeStatus(UINT16 status);
    240 tJBL_STATUS ALA_getAppletLsStatus(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    241 tJBL_STATUS Get_LsStatus(UINT8 *pVersion);
    242 tJBL_STATUS Get_LsAppletStatus(UINT8 *pVersion);
    243 #else
    244 static tJBL_STATUS
    245 ALA_update_seq_handler(tJBL_STATUS (*seq_handler[])(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo), const char *name);
    246 #endif
    247 static tJBL_STATUS
    248 JsblCerId_seq_handler(tJBL_STATUS (*seq_handler[])(Ala_ImageInfo_t* pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo));
    249 
    250 tJBL_STATUS ALA_SendtoEse(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    251 #if(NXP_LDR_SVC_VER_2 == TRUE)
    252 tJBL_STATUS GetLsStatus_seq_handler(tJBL_STATUS (*seq_handler[])(Ala_ImageInfo_t*
    253         pContext, tJBL_STATUS status, Ala_TranscieveInfo_t* pInfo));
    254 tJBL_STATUS ALA_SendtoAla(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info, Ls_TagType tType);
    255 #else
    256 tJBL_STATUS ALA_SendtoAla(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    257 #endif
    258 tJBL_STATUS ALA_CloseChannel(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    259 #if(NXP_LDR_SVC_VER_2 == TRUE)
    260 tJBL_STATUS ALA_ProcessResp(Ala_ImageInfo_t *image_info, INT32 recvlen, Ala_TranscieveInfo_t *trans_info, Ls_TagType tType);
    261 #else
    262 tJBL_STATUS ALA_ProcessResp(Ala_ImageInfo_t *image_info, INT32 recvlen, Ala_TranscieveInfo_t *trans_info);
    263 #endif
    264 #if(NXP_LDR_SVC_VER_2 == TRUE)
    265 tJBL_STATUS ALA_Check_KeyIdentifier(Ala_ImageInfo_t *Os_info, tJBL_STATUS status,
    266    Ala_TranscieveInfo_t *pTranscv_Info, UINT8* temp_buf, tJBL_STATUS flag,
    267    INT32 wNewLen);
    268 #else
    269 tJBL_STATUS ALA_Check_KeyIdentifier(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    270 #endif
    271 tJBL_STATUS ALA_ReadScript(Ala_ImageInfo_t *Os_info, UINT8 *read_buf);
    272 
    273 tJBL_STATUS Process_EseResponse(Ala_TranscieveInfo_t *pTranscv_Info, INT32 recv_len, Ala_ImageInfo_t *Os_info);
    274 
    275 tJBL_STATUS Process_SelectRsp(UINT8* Recv_data, INT32 Recv_len);
    276 #ifdef JCOP3_WR
    277 tJBL_STATUS Send_Backall_Loadcmds(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    278 
    279 tJBL_STATUS Bufferize_load_cmds(Ala_ImageInfo_t *Os_info, tJBL_STATUS status, Ala_TranscieveInfo_t *pTranscv_Info);
    280 #endif
    281 UINT8 Numof_lengthbytes(UINT8 *read_buf, INT32 *wLen);
    282 #endif /*ALA_H*/
    283