亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bjst.c

?? dvb ca 移植接口代碼及文檔說明。有對ST、V、I、C卡的處理說明
?? C
字號:
/*
本代碼僅作為學(xué)習(xí)研究之目的使用,請您于24小時內(nèi)自覺將其刪除,請勿應(yīng)用于商業(yè)活動或其它贏利性活動中,
否則后果自負!
*/


/******************************************************
 * 文件名:bjst.c
 * 功  能:處理BCA命令
 * 作  者:
 * 日  期:
 *****************************************************/

#include "bjst.h"

Bjst_Info_t* pstBjstInfo = NULL;

static Smart_ErrorCode_t bjst_transfer(Smart_Handle_t Handle,
								   U8*			    ins,
								   U16			   NumberToWrite,
								   U8*			   Response,
								   U16*			   Read,
								   U8* Status);//數(shù)據(jù)傳輸
static bool bjst_begincmd(Smart_Handle_t Handle);
static bool bjst_get_key(Smart_Handle_t Handle);//讀取key,用作將卡中送出的cw解密
static bool bjst_get_sn(Smart_Handle_t Handle);//讀取智能卡號

static U8 keywords[9] = {0};//讀取key,用作將卡中送出的cw解密


/************************************************************************/
/* 初始化, 主要工作是讀取卡內(nèi)的基本信息,如卡號、運營商等信息
   
   輸入     handle -- smart card 句柄
   輸出     無
   返回值   true -- 初始化成功 false -- 初始化失敗
   其他                                                                 */
/************************************************************************/
bool bjst_init(Smart_Handle_t handle)
{
	pstBjstInfo = &bjst;
	memset(pstBjstInfo,0,sizeof(Bjst_Info_t));

	if(!bjst_begincmd(handle))
	{
		printf("bjst init : get ppua failed !!\n");
//		return false;
	}


	if(!bjst_get_sn(handle))
	{
		printf("bjst init : get sn failed !!\n");
//		return false;
	}

	if(!bjst_get_key(handle))
	{
		printf("bjst init : get key failed !!\n");
		return false;
	}

	printf("bjst Init OK !!\n");
	return true;
}


/************************************************************************/
/* 起始指令,  這三個命令在智能卡 Reset 后必須首先執(zhí)行,之后才可以執(zhí)行其他的命令 

   輸入     Handle -- smart card 句柄
   輸出     無
   返回值   true -- 命令執(zhí)行成功 false -- 命令執(zhí)行失敗
   其他                                    
                                                                       */
/************************************************************************/
static bool bjst_begincmd(Smart_Handle_t Handle)
{
	U8	response[50]={0};
	U16 cmdlen	=0;
	U16	resplen =0;
	U8  pbword[2]={0};
	Smart_ErrorCode_t bresult=SMC_NO_ERROR;
	int i = 0;

	U8 cmd1[100] = {0x00, 0x84, 0x00, 0x00, 0x10};
	U8 cmd2[100] = {0x00, 0x0C, 0x00, 0x00, 0x10};
	U8 cmd3[100] = {0x00, 0x0B, 0x00, 0x00, 0x10};

	cmdlen = 5;
	bresult=bjst_transfer(Handle,cmd1,cmdlen,response,&resplen,pbword);

	if(bresult!=SMC_NO_ERROR)
	{
		bresult=bjst_transfer(Handle,cmd1,cmdlen,response,&resplen,pbword);
	}

	memcpy(cmd2+5,response,8);
    cmd2[13] = 0x56;

    cmdlen = 14;

	bresult=bjst_transfer(Handle,cmd2,cmdlen,response,&resplen,pbword);

	if(bresult!=SMC_NO_ERROR)
	{
		bresult=bjst_transfer(Handle,cmd2,cmdlen,response,&resplen,pbword);
		return false;
	}
	
	memcpy(cmd3+5,response,8);
    cmd3[13] = 0x56;

    cmdlen = 14;
	bresult=bjst_transfer(Handle,cmd3,cmdlen,response,&resplen,pbword);

	if(bresult!=SMC_NO_ERROR)
	{
		bresult=bjst_transfer(Handle,cmd3,cmdlen,response,&resplen,pbword);
		return false;
	}
	
	return true;
}

/************************************************************************/
/* 讀取智能卡號,就是st卡片上顯示的數(shù)字,也用來做授權(quán)尋址

   輸入     Handle -- smart card 句柄
   輸出     無
   返回值   true -- 獲取卡號成功 false -- 獲取卡號失敗
   其他     得到的卡號存儲于全局變量pstBjstInfo中,可用于OSD顯示                               

通訊示例:


00 00 05 81 D4 00 01 05 54 
00 00 07 00 xx xx xx xx 90 00   //卡號 xx xx xx xx (十六進制)                     */
/************************************************************************/


static bool bjst_get_sn(Smart_Handle_t Handle)
{
	U8	cmd[]={0x81,0xD4,0x00,0x01,0x05};
	U8	response[100];
	U8	pbword[2]={0};
	U16	cmdlen=0;
	U16	replen=0;
	Smart_ErrorCode_t bresult=SMC_NO_ERROR;
	
	cmdlen = 5;

	bresult=bjst_transfer(Handle,cmd,cmdlen,response,&replen,pbword);

	if((bresult!=SMC_NO_ERROR)&&(replen<5))
	{
		printf("數(shù)據(jù)錯誤 \n");
		return false;
	}
	
	pstBjstInfo->uCardNumber=(response[1]<<24)+(response[2]<<16)+(response[3]<<8)+response[4];
	printf("card number = %8d\n", pstBjstInfo->uCardNumber);
	return true;
}



/************************************************************************/
/* 讀取加密cw的密鑰,在將ECM傳給智能卡,智能卡解出CW傳給機頂盒的時候就是用
這組數(shù)做的加密(雖然算法比較簡單,但是至少是有這個意識的,所以很鄙視tf和sm的
做法,還到處宣揚什么安全性,無語...),其實當時弄這個地方還是花費了不少時間的!

   輸入     Handle -- smart card 句柄
   輸出     無
   返回值   true -- 讀取數(shù)據(jù)成功 false -- 讀取數(shù)據(jù)失敗
   其他     得到的信息存儲于全局變量keywords中                               

通訊示例:


00 00 05 81 D0 00 01 08 5D 
00 00 0A xx xx xx xx xx xx xx xx 90 00                      */
/************************************************************************/

bool bjst_get_key(Smart_Handle_t Handle)
{
	U8	cmd[]={0x81,0xD0,0x00,0x01,0x08};
	U8	response[100];
	U8	pbword[2]={0};
	U16	cmdlen=0;
	U16	replen=0;
	Smart_ErrorCode_t bresult=SMC_NO_ERROR;
	
	int i = 0;

	cmdlen = 5;

	bresult=bjst_transfer(Handle,cmd,cmdlen,response,&replen,pbword);

	if((bresult!=SMC_NO_ERROR)&&(replen<5))
	{
		printf("數(shù)據(jù)錯誤 \n");
		return false;
	}
	
	memcpy(keywords, response, 8);

	return true;
}

/************************************************************************/
/* 處理解析ECM,得到CW,得到它我們就可以看節(jié)目了!收取ECM的時候設(shè)置filter
的第一個字節(jié)0x80/0x81就ok了

   輸入     Handle -- smart card 句柄  buf -- ECM信息,從0x80/0x81開始
   輸出     pucCW  -- 就是cw啦,16個字節(jié),不是奇偶,就是奇偶,根據(jù)情況你自己試驗
   返回值   true -- 解析ECM成功 false --解析ECM失敗
   其他       
                                                                        */
/************************************************************************/
bool bjst_parse_ecm(Smart_Handle_t Handle,U8* buf,U8* pucCW)
{ 
	U8	cmd[100]	={0x80,0xEA,0x80,0x00};
	U8	cmd2[100]	={0x00,0x84,0x00,0x00,0x10};
	U8	response[50]={0};
	U16 cmdlen	=0;
	U16	resplen =0;
	U8  pbword[2]={0};
	Smart_ErrorCode_t bresult=SMC_NO_ERROR;
	int i = 0;
	U8  tempcw[16] = {0};

	memcpy(cmd+4,buf+4,0x43);

	cmd[4+0x43]		= 0x01;
	cmd[4+0x43+1]	= 0x00;
	
	cmdlen			= 0x49;

	bresult=bjst_transfer(Handle,cmd,cmdlen,response,&resplen,pbword);

	if((bresult!=SMC_NO_ERROR)&&(resplen<17))
	{
		printf("傳送數(shù)據(jù)發(fā)生錯誤!!!\n");
		return false;
	}
	else if ((response[0]==0x6B)&&(response[1]==0x01))
	{
		printf("沒有授權(quán)\n");
		return false;
	}

	for (i=0; i<16; i++)
	{
		tempcw[i] = response[i+1]^keywords[i%8];
	}
	
	memcpy(pucCW,tempcw,16);

	return true;
}


/************************************************************************/
/* 處理EMM,主要就是完成對卡授權(quán)了。收取EMM的時候設(shè)置filter的第一個字節(jié)0x82,
5,6,7,8個字節(jié)就是卡號了。可以僅設(shè)置第一個字節(jié),多收幾個EMM研究研究哦! 

   輸入     Handle -- smart card 句柄  data -- EMM信息,len -- 數(shù)據(jù)長度
   輸出     無
   返回值   true -- 解析EMM成功 false --解析EMM失敗
   其他                                                                   */
/************************************************************************/

bool bjst_parse_emm(Smart_Handle_t Handle,U8* data,U16 len)
{
	U8  cmd1[100]={0};
	U8  cmd2[10]={0x00,0xc0,0x00,0x00};
	U8	reponse[100];
	U16 writelen = 0;
	U16	replen=0;
	U8  status[2];

	writelen = data[15]+5;
	memcpy(cmd1,data+11,writelen);
	bjst_transfer(Handle,cmd1,writelen,reponse,&replen,status);
	
	if (replen > 2)
	{
		return true;
		
	}else
	{
		return false;
	}

	return true;
}

/************************************************************************/
/* 數(shù)據(jù)傳輸,機頂盒和智能卡通訊的接口,其實也可以不用封裝,直接調(diào)用Smart_Transfer,
在這主要是加打印調(diào)試用的

   輸入     Handle -- smart card 句柄,ins -- 要傳送的數(shù)據(jù),NumberToWrite -- 
 要傳送的數(shù)據(jù)長度
   輸出     Response -- 回應(yīng)數(shù)據(jù), Read -- 回應(yīng)的數(shù)據(jù)長度,Status -- 狀態(tài)字節(jié) 
   返回值   數(shù)據(jù)傳輸錯誤類型 SMC_NO_ERROR表示無錯誤
   其他            
                                                                        */
/************************************************************************/

static Smart_ErrorCode_t bjst_transfer(Smart_Handle_t Handle,
								    U8*			 ins,
								    U16			 NumberToWrite,
								    U8*			 Response,
								    U16*		 Read,
								    U8*			 Status)
{
	Smart_ErrorCode_t error = SMC_NO_ERROR;

	U8 tempins[256] = {0x42,0x4a,0x53,0x54};

	memcpy(tempins+4, ins, NumberToWrite);
	
	error = Smart_Transfer(Handle,tempins,NumberToWrite,Response,0,Read,Status);

//	printf("Status[0]=0x%02x   Status[1]=0x%02x error = %d\n",Status[0],Status[1],error);
	return error;
}


/////////////////////----The end ----------------

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品情趣| 九色综合狠狠综合久久| 91精品福利在线| 亚洲免费观看高清在线观看| 色综合天天综合网天天狠天天| 亚洲婷婷综合久久一本伊一区| 在线一区二区观看| 三级精品在线观看| 欧美变态tickling挠脚心| 国产伦精品一区二区三区免费| 亚洲国产精品成人久久综合一区| 成人avav影音| 亚瑟在线精品视频| 久久伊人蜜桃av一区二区| www.欧美亚洲| 午夜成人在线视频| 久久久影视传媒| 在线观看视频欧美| 国模冰冰炮一区二区| 国产精品久久久久精k8| 在线视频一区二区免费| 性做久久久久久免费观看欧美| 日韩欧美一区二区不卡| 成人福利在线看| 五月婷婷激情综合网| 日本一区二区三区在线不卡| 欧美午夜片在线观看| 国产在线视视频有精品| 亚洲毛片av在线| 精品国偷自产国产一区| 99精品热视频| 精品制服美女丁香| 亚洲手机成人高清视频| 欧美mv日韩mv国产网站| 日本丶国产丶欧美色综合| 国内精品在线播放| 亚洲综合视频在线观看| 欧美激情一区二区三区蜜桃视频| 欧美日韩一区二区三区高清| 成人天堂资源www在线| 天使萌一区二区三区免费观看| ww久久中文字幕| 69久久99精品久久久久婷婷| av午夜精品一区二区三区| 极品美女销魂一区二区三区免费| 一区二区免费看| 国产欧美精品一区aⅴ影院| 日韩一区二区三区四区| 在线亚洲高清视频| 成+人+亚洲+综合天堂| 国内精品伊人久久久久影院对白| 午夜在线成人av| 亚洲精品欧美在线| 国产精品美女久久久久aⅴ国产馆| 欧美福利一区二区| 91福利在线观看| 99久久精品一区二区| 国产成人精品免费在线| 国产伦精品一区二区三区视频青涩| 婷婷中文字幕一区三区| 亚洲国产视频在线| 综合久久给合久久狠狠狠97色 | 欧美视频在线播放| 成人av在线播放网站| 国产精品自拍三区| 国产伦理精品不卡| 国产麻豆视频精品| 国产一区二区久久| 麻豆成人免费电影| 日韩精品久久理论片| 午夜精品成人在线视频| 亚洲.国产.中文慕字在线| 亚洲成人动漫精品| 日韩专区在线视频| 天堂影院一区二区| 日本伊人午夜精品| 美美哒免费高清在线观看视频一区二区 | 欧美激情一区二区三区全黄| 久久久99精品免费观看| 国产欧美一区二区精品性色| 久久久久久9999| 欧美激情在线看| 中文字幕日韩av资源站| 1000部国产精品成人观看| 亚洲欧美中日韩| 亚洲男人的天堂在线观看| 亚洲一区二区在线播放相泽| 亚洲大型综合色站| 六月婷婷色综合| 国产精品一区二区黑丝| 成人免费看视频| 色综合天天性综合| 在线视频你懂得一区| 欧美日韩三级一区| 日韩一区二区免费在线电影| 精品国产三级a在线观看| 国产日韩一级二级三级| 亚洲欧洲性图库| 亚洲午夜日本在线观看| 蜜臀av性久久久久蜜臀aⅴ| 国产精品亚洲视频| 色综合久久六月婷婷中文字幕| 欧美在线免费视屏| 精品少妇一区二区三区在线播放 | 自拍偷拍亚洲欧美日韩| 亚洲成人自拍网| 国产自产高清不卡| 9色porny自拍视频一区二区| 欧美性大战久久| 精品不卡在线视频| 亚洲免费成人av| 理论电影国产精品| 99re这里只有精品首页| 日韩欧美一区在线| 中文字幕在线观看不卡视频| 日韩精品亚洲一区| 成人中文字幕在线| 6080午夜不卡| 国产精品二区一区二区aⅴ污介绍| 亚洲成人自拍一区| 成人网在线播放| 日韩一区二区在线观看视频 | 欧美日韩中文国产| 久久免费看少妇高潮| 一区二区三区精品视频在线| 久久er99精品| 欧美日韩成人在线| 国产精品久久久久久久久久免费看| 三级成人在线视频| 97久久精品人人做人人爽| 日韩一区二区在线看片| 夜夜操天天操亚洲| 国产成人自拍在线| 337p亚洲精品色噜噜狠狠| 成人欧美一区二区三区在线播放| 久久成人免费电影| 精品视频1区2区3区| 国产精品网站在线| 精品一区二区三区在线播放 | 欧美三级日韩在线| 国产精品美女一区二区三区| 黑人巨大精品欧美一区| 在线不卡免费av| 亚洲图片一区二区| 91丨porny丨蝌蚪视频| 国产午夜精品在线观看| 蜜臀av亚洲一区中文字幕| 欧美丝袜丝交足nylons图片| 中文字幕一区二区三区在线播放 | 精品综合免费视频观看| 91.com视频| 亚洲123区在线观看| 欧美性猛交xxxxxx富婆| 日韩美女啊v在线免费观看| 国产99久久久国产精品| 久久亚洲二区三区| 精品一区在线看| 精品日韩一区二区三区| 久久国产精品色| 欧美本精品男人aⅴ天堂| 美脚の诱脚舐め脚责91| 欧美精品久久99久久在免费线| 亚洲精品乱码久久久久久日本蜜臀| 国产69精品久久99不卡| 国产区在线观看成人精品| 国内精品国产三级国产a久久| 精品国产乱子伦一区| 日本网站在线观看一区二区三区| 欧美日本乱大交xxxxx| 亚洲bt欧美bt精品| 欧美精品自拍偷拍动漫精品| 天天操天天干天天综合网| 欧美日韩你懂得| 天涯成人国产亚洲精品一区av| 欧美精品第一页| 美女www一区二区| 精品福利一区二区三区| 国产成人免费视频精品含羞草妖精 | 高清不卡在线观看av| 国产精品久久一卡二卡| 91蜜桃在线观看| 亚洲综合成人在线| 欧美一区二区成人| 国产一区欧美日韩| 中文字幕在线不卡一区| 欧美特级限制片免费在线观看| 婷婷夜色潮精品综合在线| 欧美大度的电影原声| 成人精品在线视频观看| 亚洲免费资源在线播放| 91精品国产综合久久福利| 狠狠久久亚洲欧美| 17c精品麻豆一区二区免费| 欧美日韩一本到| 麻豆极品一区二区三区| 久久精品一区二区三区四区| 色88888久久久久久影院野外| 亚洲不卡av一区二区三区| 欧美精品一区二区三区很污很色的| 粉嫩久久99精品久久久久久夜 |