/*m6_rsa_dec_pub_apage * index: m6 chip index * src : buff size fixed 128byte * out : buff size fixed 124byte * */ static int m6_rsa_dec_pub_apage(int index,aml_intx *n,aml_intx *e,unsigned char *src,unsigned char *out) { aml_intx c,m; t_func_v3 fp_00 = (t_func_v3)m6_g_action[index][0]; t_func_v3 fp_02 = (t_func_v3)m6_g_action[index][2]; func_rsa_exp fp_03 = (func_rsa_exp)m6_g_action[index][3]; fp_00((int)&c,0,sizeof(aml_intx)); fp_00((int)&m,0,sizeof(aml_intx)); fp_02((int)&c.dp[0],(int)src,128); c.used=32; fp_clamp(&c); fp_03(&c,e,n,&m); fp_02((int)out,(int)&m.dp[0],124); return 0; }
int get_2RSA(int index,aml_intx *n,aml_intx *e, unsigned char *key,int keylen) { int ret=-1; unsigned char szRSAPUK1[256]; int nOutLen=256; unsigned char szRSAPUK1Hash[32]; unsigned char efuseHash[32]; t_func_v3 fp_00 = (t_func_v3)m6_g_action[index][0]; t_func_r3 fp_01 = (t_func_r3)m6_g_action[index][1]; t_func_v3 fp_02 = (t_func_v3)m6_g_action[index][2]; t_func_v3 fp_05 = (t_func_v3)m6_g_action[index][5]; fp_00((int)&szRSAPUK1Hash[0],0,sizeof(szRSAPUK1Hash)); fp_00((int)&efuseHash[0],0,sizeof(efuseHash)); fp_00((int)&szRSAPUK1[0],0,sizeof(szRSAPUK1)); keylen = 256; m6_rsa_dec_pub(index,n,e,key,keylen,szRSAPUK1,&nOutLen); //fp_00((int)n,0,sizeof(*n)); //fp_00((int)e,0,sizeof(*e)); fp_05((int)&efuseHash[0],136,sizeof(efuseHash)); ret = -1; sha2_sum( szRSAPUK1Hash,szRSAPUK1,128+4); if(!fp_01((int)&szRSAPUK1Hash[0],(int)&efuseHash[0],32)){ fp_02((int)(&n->dp[0]),(int)&szRSAPUK1[0],128); n->used = 32; fp_02((int)(&e->dp[0]),(int)(&szRSAPUK1[0]+128),4); e->used = 1; ret = 0; fp_02((int)key,(int)&szRSAPUK1[0],keylen); //int i; } return ret; }
int m6_aes_decrypt(int index,unsigned char *ct,int ctlen,unsigned char *key,int keylen) { int len; aml_aes256_ctx_t_x ctx; t_func_v2 fp_06 = (t_func_v2)m6_g_action[index][6]; t_func_v3 fp_00 = (t_func_v3)m6_g_action[index][0]; t_func_v3 fp_02 = (t_func_v3)m6_g_action[index][2]; if(keylen>(14*sizeof(aml_aes_key_t_x))){ keylen = 14*sizeof(aml_aes_key_t_x); } fp_00((int)&ctx,0,sizeof(ctx)); fp_02((int)&ctx.key[0],(int)key,keylen); for(len=0;len<ctlen;len+=16){ fp_06((int)(ct+len),(int)&ctx); } return 0; }
static int aml_m6tvd_sec_boot_check(unsigned char *pSRC,unsigned char *pkey1,int nkey1Len,unsigned char *pkey2,int nkey2Len) { #if defined(AML_SECURE_PROCESS_MSG_SHOW) #if defined(CONFIG_AMLROM_SPL) #define AML_MSG_FAIL ("Aml log : ERROR! TPL secure check fail!\n") #define AML_MSG_PASS ("Aml log : TPL secure check pass!\n") #define MSG_SHOW serial_puts #else #define AML_MSG_FAIL ("Aml log : ERROR! Image secure check fail!\n") #define AML_MSG_PASS ("Aml log : Image secure check pass!\n") #define MSG_SHOW printf #endif #endif //#if defined(AML_SECURE_PROCESS_MSG_SHOW) #define AMLOGIC_CHKBLK_ID (0x434C4D41) //414D4C43 AMLC #define AMLOGIC_CHKBLK_VER (1) typedef struct { unsigned int nSizeH; ////4@0 unsigned int nLength1; ////4@4 unsigned int nLength2; ////4@8 unsigned int nLength3; ////4@12 unsigned int nLength4; ////4@16 unsigned char szkey1[116]; ////116@20 unsigned char szkey2[108]; ////108@136 unsigned int nSizeT; ////4@244 unsigned int nVer; ////4@248 unsigned int unAMLID; ////4@252 }st_aml_chk_blk; //256 typedef struct{ int ver; int len; unsigned char szBuf1[12]; unsigned char szBuf2[188]; } st_crypto_blk1; typedef struct{ int nr; unsigned int buff[80]; } st_crypto_blk2; int i; int nRet = -1; st_crypto_blk1 cb1_ctx; st_crypto_blk2 cb2_ctx; st_aml_chk_blk chk_blk; unsigned char szkey[32+16]; unsigned int *ct32 = (unsigned int *)(pSRC); unsigned char *pBuf = (unsigned char *)&chk_blk; int nStep = 0; switch(* (unsigned int *)0xd9040004) { case 0x7ac: break; default: goto exit;break; } t_func_v3 fp_00 = (t_func_v3)g_action[nStep][0]; //void rsa_init(1,2,3) t_func_r3 fp_01 = (t_func_r3)g_action[nStep][1]; //int mpi_read_string(1,2,3) t_func_v3 fp_02 = (t_func_v3)g_action[nStep][2]; //void efuse_read(1,2,3) t_func_r2 fp_03 = (t_func_r2)g_action[nStep][3]; //int boot_rsa_read_puk(a,b) t_func_r3 fp_04 = (t_func_r3)g_action[nStep][4]; //int rsa_public(1,2,3) t_func_v2 fp_05 = (t_func_v2)g_action[nStep][5]; //void boot_aes_setkey_dec(1,2) t_func_v1 fp_06 = (t_func_v1)g_action[nStep][6]; //void boot_aes_setiv_init(1) t_func_v4 fp_07 = (t_func_v4)g_action[nStep][7]; //void boot_aes_crypt_cbc(1,2,3,4) t_func_v4 fp_08 = (t_func_v4)g_action[nStep][8]; //void sha2(1,2,3,4) t_func_r3 fp_09 = (t_func_r3)g_action[nStep][9]; //int memcpy(1,2,3) t_func_r3 fp_10 = (t_func_r3)g_action[nStep][10];//int memcmp(1,2,3) t_func_r1 fp_11 = (t_func_r1)g_action[nStep][11];//int mpi_msb(1) fp_00(&cb1_ctx,0,0); if(pkey1 && pkey2) { if(fp_01(cb1_ctx.szBuf1,pkey1,nkey1Len) || fp_01(cb1_ctx.szBuf2,pkey2,nkey2Len)) goto exit; cb1_ctx.len = ( fp_11( cb1_ctx.szBuf1 ) + 7 ) >> 3; } else {