⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 EMU_FTAbox_ref441328_code_source ali m3327
💻 C
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************
*
*  ALi 
*
*  File: key.c
*
*  Description: 
*             
*  History:
*      Date        		Author         	Version   	Comment
*      ====        	      ======         	=======   	=======
*  		
*
****************************************************************************/

#include "ucas.h" // Strut of Provaider's

#include   "keydata.h" // Define Caid's and Strut of Him Max 7

#define MEMCPY(a,b,c)			ali_memcpy(a,b,c)
#define MEMCPY_I(a,b,c)			ali_memcpy(b,a,c)

#define MEMCMP(a,b,c)			ali_memcmp(a,b,c)
#define MEMSET(a,b,c)			ali_memset(a,b,c)
#define MEMMOVE(a,b,c)			ali_memmove(a,b,c)

#define STRCPY(a,b)				ali_strcpy(a,b)
#define STRCMP(a,b)				ali_strcmp(a,b)
#define STRLEN(a)				ali_strlen(a)

#define ITOA(a,b)					ali_itoa(a,b)
#define ATOI(a)					ali_atoi(a)
#define ATOI16(a)				ali_atoi16(a)
#define RAND(max_val)			ali_rand(max_val)


unsigned char g_pcw[16];
#if 1
NAGRA2KEYINFOR EvNagra2KeyInfor_static[MAX_NAGRA2_KEY]=
{
   {
    0x4101,
    {
     0xD9,0x1F,0xB4,0x82,0xF5,0x4C,0x45,0x35,0x62,0x1D,0x84,0x5F,0x7E,0xC4,0xAB,0x4D,
     0xC9,0x30,0x9D,0xED,0x26,0xB5,0x40,0x30,0x84,0x8E,0xB6,0x39,0x68,0x97,0x75,0x29,
     0xFE,0x8F,0xF1,0x86,0x13,0x27,0x61,0x71,0xE5,0x7B,0xDA,0x8A,0x47,0xAC,0x99,0x37,
     0x03,0xCC,0xE2,0xA1,0xCB,0x07,0x19,0x98,0xEC,0xCB,0x32,0x7E,0xF6,0x3C,0xCE,0xA7
    }, 
    {
    0xD7 ,0x4A ,0x18 ,0x9F ,0xB7 ,0xB6 ,0x55 ,0xA7 ,0x73 ,0xA7 ,0x69 ,0x6D ,0x02 ,0x1D ,0x44 ,0x85, 
   //  0x8C,0x8D,0x68,0x0F,0x45,0x02,0xAB,0x84,0xE3,0x68,0xBA,0x74,0x20,0x26,0xAE,0x0B, /*2006-05-15, added by DDF*/
     0x08 ,0x78 ,0xC0 ,0x7E ,0x6F ,0x76 ,0x23 ,0x13 ,0x57 ,0xA2 ,0xBE ,0xF8 ,0x7D ,0x6B ,0x6F ,0xE5 //Add by EDEN 20060527 TEST OK
//	 0x3E,0xAC,0xB6,0x2C,0x71,0xE7,0x6E,0xBD,0xBA,0x5C,0x28,0x25,0xFF,0x33,0x55,0xB9 /*add by DDF 200605-25 08 78 C0 7E 6F 76 23 13 57 A2 BE F8 7D 6B 6F E5 */
    },
    "TVBco",
   },
   {
    0x4901,
    {
	0xF3,0x51,0x83,0xAA,0x9B,0x3C,0xF4,0x14,0x7D,0xA9,0x20,0x1E,0x16,0xFB,0x44,0x85,
	0x73,0x66,0xC1,0x5C,0x03,0x5E,0xFB,0x87,0xCB,0x62,0x11,0x28,0x23,0x62,0x4F,0x50,
	0x11,0xF5,0x56,0x93,0x5E,0x4F,0x98,0x7A,0x7A,0x89,0x74,0x8F,0x3B,0x9D,0x48,0xCC,
	0xB1,0xAD,0xCD,0x2F,0xEF,0xF9,0xF4,0xD4,0x45,0x2C,0xFB,0x52,0x1D,0x49,0x61,0x86
    },
    {
	//0x68 ,0x06 ,0xED ,0x53 ,0x18 ,0xD3 ,0xCC ,0x9D ,0xDC ,0x63 ,0x85 ,0x60 ,0x2D ,0x02 ,0xA2 ,0x9B , /*更新于2006-05-19新的也可以*/
    
     0x0F ,0x69 ,0x12 ,0x43 ,0x4C ,0x3F ,0xDF ,0xC8 ,0x58 ,0x1B ,0x9E ,0xD4 ,0x5F ,0xF1 ,0x71 ,0x53,/*对应 旧的的也可以*/
  //   0x9D,0x5C,0xB5,0x43,0x85,0x12,0x4E,0x9F,0xD6,0x39,0x09,0x71,0xE0,0x02,0x83,0x08,/*2006-04-20*/
     0xF2 ,0xAB ,0x55 ,0x83 ,0x75 ,0xEC ,0x2A ,0x51 ,0xB0 ,0x4F ,0x9E ,0x8B ,0x6F ,0x07 ,0x6A ,0x7C
    },
    "AB SAT",
	
   },
   {
    0x7101,
    {
     0xA1,0x08,0x6D,0x68,0x25,0xFE,0xA2,0x55,0xAE,0x50,0x8D,0x6D,0x2C,0xBA,0x9B,0xBA,
     0x8f,0x32,0xE2,0x7E,0xCC,0xF8,0xEE,0xD2,0xE3,0xD9,0x70,0x83,0xEC,0x56,0xB9,0xB9,
     0xA0,0xC3,0xAC,0x7C,0xCC,0x9A,0x1B,0xB6,0x09,0xB9,0xA4,0xAB,0x05,0xA0,0x58,0x2B,
     0x78,0xD4,0xB4,0x26,0x81,0x05,0x94,0xAA,0xCB,0x9C,0x85,0xF7,0x1F,0x9B,0x64,0xA3
    },
    {
     0x0A,0xA3,0x12,0x42,0x62,0x5E,0x2C,0x2C,0x5A,0x86,0x00,0xD1,0xF9,0xE9,0x3B,0x33 ,
     0xBA,0xDF,0xE5,0x63,0x9F,0x6A,0x8B,0xA9,0xE9,0x1B,0x93,0x10,0x70,0x8C,0xB3,0x1D 
    },
    "D+",
	
   }
};


/*The following is called by b_nagra.c , it is used to nagra2 decrypt*/
void Nagra2FindRightKey(int ProviderIdent ,unsigned char *ECMKEYx, unsigned char IDEEA86or96,unsigned char*opkeyx)
{
	unsigned char count=0;
	unsigned char IDEEA_Index=0;
	if(IDEEA86or96==0x86)IDEEA_Index=0;
	else if(IDEEA86or96==0x96)IDEEA_Index=1;
	else IDEEA_Index=0;
	for(count=0;count<MAX_NAGRA2_KEY;count++)
	{
		if(EvNagra2KeyInfor[count].ProviderIdent==ProviderIdent)
		{
//libc_printf("ProviderIdent=%04x,,%04x,%d\n",ProviderIdent,EvNagra2KeyInfor[count].ProviderIdent,IDEEA86or96);
			memcpy(ECMKEYx,EvNagra2KeyInfor[count].InitEcmKeyx,64);
			memcpy(opkeyx,EvNagra2KeyInfor[count].InitOpKeyx[IDEEA_Index],16);
		//	libc_printf("HHHHHHHHHHHHHHHHHHHHHHHH\n");
			break;
		}
	}
	return;
}

  void EV_Update_NAGRA2_IDAAE_Key(int ProviderIdent, unsigned char IDEEA86or96, unsigned char *key, unsigned char len)
  {
  		unsigned char count=0;
		unsigned char IDEEA_Index=0;
		if(IDEEA86or96==0x86)IDEEA_Index=0;
		else if(IDEEA86or96==0x96)IDEEA_Index=1;
		else IDEEA_Index=0;
		for(count=0;count<MAX_NAGRA2_KEY;count++)
		{
			if(EvNagra2KeyInfor[count].ProviderIdent==ProviderIdent)
			{
				if((key[0]==key[1])&&(key[2]==key[1])&&(key[3]==key[1]))break;/*Skip the rubish data..*/
				memcpy(EvNagra2KeyInfor[count].InitOpKeyx[IDEEA_Index],key,16);
				break;
			}
		}
  }




int ucas_nag_updata_key(int ident,unsigned char*key0,unsigned char*key1)/**sNagraProviderStatic sNagraProvider*/
{
	   int ii,jj,flagKeyChanged=0;
	   static int imm=0;
          int id=0,count=0,CurIdent=0;	   
	   StartUpdateKEYARR:


#if 1 
	   for(ii=0;ii<sNagraProviderNum;ii++)
	   {
		    id=((sNagraProvider[ii].abPID[0])<<8)+sNagraProvider[ii].abPID[1];
		   if(id==(0xFEFF&ident))
		   {
		   #if 0
		   int i=0;
		   printf("key000\n\n");
		   for (i=0;i<8;i++)
		   printf("0x%0x,",key0[i]);

		   printf("\n\n");
		   #endif
		   #if 1
		   if(  MEMCMP(sNagraProvider[ii].abKey00,key0,8)||
				  MEMCMP(sNagraProvider[ii].abKey01,key1,8)){
					flagKeyChanged=1;
					imm++;
					if(imm>=6)imm=6;
					;
					memcpy(sNagraProvider[ii].abKey00,key0,8);
					memcpy(sNagraProvider[ii].abKey01,key1,8);
			 }
			  break;
		   #endif
			  
		   }

	   }
#endif
	   if((flagKeyChanged)&&(imm<4))//here  store key to flash
	   {
		Test_store_data();	      	   
	   }
	   return 0;
} 

int ShenZhou_GetSpecifyKeyCode(int CA_SystemID,int Ident, unsigned char KeyIndex, unsigned char *RightKey)
{
	int count=0,Index=0;
	int CurIdent=0,NextIdent=0;
									int imd=0;
#ifndef NULL
#define NULL		(void *)0
#define SECA_KEY_LEN 8
#endif

	CA_SystemID=CA_SystemID&0xFF00;
	
	switch(CA_SystemID)
	{
		case 0x0100:/*Check the right CA system*/
			if(sSecaProvider==NULL)
			{
				return;
			}
			for(count=0; count<SecaProviderNum; count++)
			{	
				CurIdent =(sSecaProvider[count].PrvID[0]<<16)|(sSecaProvider[count].PrvID[1]<<8)|sSecaProvider[count].PrvID[2];
				NextIdent=CurIdent/0xFF;
				//printf("Find Ident is 0x%04x\n",CurIdent);
				if(CurIdent==Ident)/*Check the right Ident*/
				{
					//printf("Find the right one====\n");
					switch(KeyIndex)

					 {/*Check the right key Index*/
					      case 0x0C:
					       memcpy(RightKey,sSecaProvider[count].key0C,8);
					       memcpy(RightKey+8,sSecaProvider[count].key0C,8);
					       break;
					      case 0x0D:
					       memcpy(RightKey,sSecaProvider[count].key0D,8);
					       memcpy(RightKey+8,sSecaProvider[count].key0D,8);
					       break;
					      case 0x0E:
					       memcpy(RightKey,sSecaProvider[count].key0E,8);
					       memcpy(RightKey+8,sSecaProvider[count].key0E,8);
					       break;
					      default:
					       memcpy(RightKey,sSecaProvider[count].key0C,8);
					       memcpy(RightKey+8,sSecaProvider[count].key0C,8);
					       break;
					     }

					break;
				}
			}
			break;
		case 0x0500:
			if(sViaccessProvider==NULL)
			{
				return;
			}
			for(count=0; count<via_channel_num; count++)
			{	
				if((sViaccessProvider[count].ident[0]==sViaccessProvider[count].ident[1])&&
					(sViaccessProvider[count].ident[2]==0xFF))
				{
					break;
				}
				CurIdent =(sViaccessProvider[count].ident[0]<<16)|(sViaccessProvider[count].ident[1]<<8)|sViaccessProvider[count].ident[2];


			if(CurIdent==Ident)/*Check the right Ident*/
				{
					switch(KeyIndex)
					{/*Check the right key Index*/
						case 0x08:
							memcpy(RightKey,sViaccessProvider[count].key08,8);
							break;
						case 0x09:
							memcpy(RightKey,sViaccessProvider[count].key09,8);
							break;
						case 0x0A:
							memcpy(RightKey,sViaccessProvider[count].key0a,8);
							break;
						case 0x0B:
							memcpy(RightKey,sViaccessProvider[count].key0b,8);
							break;
						case 0x0C:
							memcpy(RightKey,sViaccessProvider[count].key0c,8);
							break;
						case 0x0D:
							memcpy(RightKey,sViaccessProvider[count].key0d,8);
							break;
						case 0x0E:
							memcpy(RightKey,sViaccessProvider[count].key0e,8);
							break;
						case 0x0F:
							memcpy(RightKey,sViaccessProvider[count].key0f,8);
							break;
						default:
							memcpy(RightKey,sViaccessProvider[count].key08,8);
							break;
					}
				}
			}
			break;

		case 0x1800:
			if(sNagraProvider==NULL)
			{
				return;
			}
			for(count=0; count<sNagraProviderNum; count++)
			{	
				if(Ident==0x4f01)
					Ident=0x4e01;

				CurIdent =(sNagraProvider[count].abPID[0]<<8)|(sNagraProvider[count].abPID[1]);
//				printf("CurIdentCurIdent==%04x\n",CurIdent);

				if(CurIdent==Ident)/*Check the right Ident*/
				{

				switch(KeyIndex)
					{/*Check the right key Index*/
						case 0x00:
							memcpy(RightKey,sNagraProvider[count].abKey00,8);
							break;
						case 0x01:
							memcpy(RightKey,sNagraProvider[count].abKey01,8);

							break;
						default:
							memcpy(RightKey,sNagraProvider[count].abKey00,8);
							break;
					}
					break;
				}
			}
			break;	

		
			default:
				;
			break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -