Esempio n. 1
0
File: secure.c Progetto: xtra72/s805
/*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;
}
Esempio n. 2
0
File: secure.c Progetto: xtra72/s805
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;
}
Esempio n. 3
0
File: secure.c Progetto: xtra72/s805
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;
}
Esempio n. 4
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
	{