ESAM接口函数源代码.pdf

上传人:b****1 文档编号:3210154 上传时间:2022-11-20 格式:PDF 页数:27 大小:214.19KB
下载 相关 举报
ESAM接口函数源代码.pdf_第1页
第1页 / 共27页
ESAM接口函数源代码.pdf_第2页
第2页 / 共27页
ESAM接口函数源代码.pdf_第3页
第3页 / 共27页
ESAM接口函数源代码.pdf_第4页
第4页 / 共27页
ESAM接口函数源代码.pdf_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

ESAM接口函数源代码.pdf

《ESAM接口函数源代码.pdf》由会员分享,可在线阅读,更多相关《ESAM接口函数源代码.pdf(27页珍藏版)》请在冰豆网上搜索。

ESAM接口函数源代码.pdf

ESAM接口函数源代码接口函数源代码在DSP程序中共设计了12个ESAM接口函数,用来实现安全保护策略所需的全部指令功能,其源代码分别介绍如下:

一、一、ESAM接口函数源代码:

接口函数源代码:

/*/*函数名:

Reset_Esam()*/*功能:

对ESAM卡复位,并取得返回的复位应答信息*/*参数:

*/*DataPtr-指向存放序列号的数组的指针*/*返回值:

*/*返回unsignedshortint型的16bits整数*/*如果正确,返回值等于9000*/*/externUint16Reset_Esam(Uint16*DataPtr)Uint16i,FeedValue;/*初始化接收ESAM卡应答信号的数据结构*/for(i=0;iDATALENGTH;i+)ReplyDatai=0;/*RST信号变为低电平*/SYSCNTL2=0x00;Delay_Time(200);/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收复位应答信号*/SYSCNTL1=0x20;Delay_Time(200);/*让复位信号等待一段时间,满足复位时序要求*/Delay_Time(RSTTIME);/*让ESAM脱离复位状态,从而实现ESAM复位*/SYSCNTL2=0x08;/*读复位应答信号*/Read_Esam(ReplyData,13);/*从复位应答信号中分离出序列号*/for(i=0;i8;i+)*DataPtr+=ReplyDatai+5;/*获取状态字*/FeedValue=0x9000;returnFeedValue;/*/*函数名:

Get_Response()*/*功能:

取回ESAM反馈的数据和MAC码*/*参数:

*/*DataPtr-指向存放返回数据指针数组的指针*/*DataLen-欲取回的数据和MAC码总长度(以16进制*/*表示,单字节长度)*/*返回值:

*/*返回unsignedshortint型的16bits整数*/*如果正确,返回值等于9000*/*/externUint16Get_Response(Uint16*DataPtr,Uint16DataLen)Uint16i,State;/*清空命令缓冲区和接收数据缓冲区*/for(i=0;iDATALENGTH;i+)Commandi=0;/*填写接收返回数据的命令报文*/CommandLength=5;Command0=0x00;Command1=0xC0;Command2=0x00;Command3=0x00;Command4=DataLen;/*将ESAM卡的I/O端设为输入,准备向ESAM卡发接收返回数据命令*/SYSCNTL1=0x60;Delay_Time(200);/*向ESAM卡发接收返回数据命令*/Write_Esam();/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收返回信息*/SYSCNTL1=0x20;Delay_Time(200);/*先清除接收缓冲区*/i=UART_RGET(URRBR);/*取出ESAM反馈的命令报文中的第二个字节,丢弃*/while(!

UART_FGET(URLSR,DR);i=UART_RGET(URRBR);/*获取返回信息*/Read_Esam(ReplyData,DataLen+2);/*从返回信息中分离出数据和MAC码*/for(i=0;iDataLen;i+)*DataPtr+=ReplyDatai;/*获取状态字*/State=(ReplyDataDataLen8)|ReplyDataDataLen+1;returnState;/*/*函数名:

Del_Direct()*/*功能:

删除以前建立的目录文件(不包括MF文件)*/*参数:

*/*无*/*返回值:

*/*返回unsignedshortint型的16bits整数*/*如果正确,返回值等于9000*/*/externUint16Del_Direct(void)Uint16i,State;/*清空命令缓冲区*/for(i=0;iDATALENGTH;i+)Commandi=0;/*填写删除目录的命令报文*/CommandLength=5;Command0=0x80;Command1=0x0E;Command2=0x00;Command3=0x00;Command4=0x00;/*将ESAM卡的I/O端设为输入,准备向ESAM卡发删除目录命令*/SYSCNTL1=0x60;Delay_Time(200);/*向ESAM卡发删除目录命令*/Write_Esam();/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收返回信息*/SYSCNTL1=0x20;Delay_Time(200);/*先清除接收缓冲区*/i=UART_RGET(URRBR);/*获取返回信息*/Read_Esam(ReplyData,2);/*获取状态字*/State=(ReplyData08)|ReplyData1;returnState;/*/*函数名:

Create_Keyfile()*/*功能:

建立密钥文件*/*参数:

*/*FileID-2字节长度的文件标识符*/*FileLen-2字节长度的文件空间大小*/*IncRight-增加密钥权限*/*返回值:

*/*返回unsignedshortint型的16bits整数*/*如果正确,返回值等于9000*/*/externUint16Create_Keyfile(Uint16FileID,Uint16FileLen,Uint16IncRight)Uint16i,State;/*清空命令缓冲区和接收返回信息的数据结构*/for(i=0;i8;Command3=FileID&0x00FF;Command4=0x07;/*将ESAM卡的I/O端设为输入,准备向ESAM卡发创建Key文件命令*/SYSCNTL1=0x60;Delay_Time(200);/*发送创建Key文件命令的命令头域*/Write_Esam();/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收返回状态*/SYSCNTL1=0x20;Delay_Time(200);/*读空接收缓冲区*/i=UART_RGET(URRBR);/*读返回的状态信号,以确定创建Key文件操作是否正确*/Read_Esam(ReplyData,1);/*第二次发送创建Key文件命令的数据域,如果正确,应该返回状态9000*/CommandLength=7;Command0=0x3F;/填写命令报文的数据域Command1=(FileLen&0xFF00)8;Command2=FileLen&0x00FF;Command3=0xFF;Command4=IncRight;Command5=0xFF;Command6=0xFF;/*将ESAM卡的I/O端设为输入,准备向ESAM卡发送创建Key文件命令的数据域*/SYSCNTL1=0x60;Delay_Time(200);/*向ESAM卡发创建Key文件命令的数据域*/Write_Esam();/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收返回状态*/SYSCNTL1=0x20;Delay_Time(200);/*读空接收缓冲区*/i=UART_RGET(URRBR);/*读返回的状态信号,以确定创建Key文件操作是否正确*/Read_Esam(ReplyData,2);/*获取状态字*/State=(ReplyData08)|ReplyData1;returnState;/*/*函数名:

Increase_Key()*/*功能:

建立(39-外部认证/主控或36-线路保护)密钥*/*参数:

*/*KeyID-密钥标识符*/*KeyType-密钥类型(0x39或0x36)*/*UseRight-密钥使用权*/*AltRight-密钥更改权限*/*NextState-后续状态(如果密钥类型0x36保留为0xFF)*/*ErrCount-错误计数器*/*Keys-指向存放欲建立密钥的数组的指针*/*Mode-加解密密钥方式(如果是8字节密钥选*/*DES8=0;否则为16字节密钥选DES16=1)*/*返回值:

*/*返回unsignedshortint型的16bits整数*/*如果正确,返回值等于9000*/*/externUint16Increase_Key(Uint16KeyID,Uint16KeyType,Uint16UseRight,Uint16AltRight,Uint16NextState,Uint16ErrCount,Uint16*Keys,Uint16Mode)Uint16i,State,KeyLen;/*清空命令缓冲区和接收返回信息的数据结构*/for(i=0;iDATALENGTH;i+)ReplyDatai=0;Commandi=0;if(Mode=DES8)KeyLen=8;elseKeyLen=16;/*第一次发送创建Key的命令头,如果正确,应该返回0xD4*/CommandLength=5;Command0=0x80;/填写命令报文的头域Command1=0xD4;Command2=0x01;Command3=KeyID;Command4=KeyLen+5;/*将ESAM卡的I/O端设为输入,准备向ESAM卡发创建Key命令*/SYSCNTL1=0x60;Delay_Time(200);/*发送创建Key命令的命令头域*/Write_Esam();/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收返回状态*/SYSCNTL1=0x20;Delay_Time(200);/*读空接收缓冲区*/i=UART_RGET(URRBR);/*读返回的状态信号,以确定创建Key操作是否正确*/Read_Esam(ReplyData,1);/*第二次发送创建Key命令的数据域,如果正确,应该返回状态9000*/CommandLength=KeyLen+5;Command0=KeyType;/填写命令报文的数据域Command1=UseRight;Command2=AltRight;if(KeyType=0x39)/如果是外部认证密钥,有后续状态Command3=NextState;else/如果是线路保护密钥,该域保留为0xFFCommand3=0xFF;Command4=ErrCount;for(i=0;iKeyLen;i+)Command5+i=*Keys+;/*将ESAM卡的I/O端设为输入,准备向ESAM卡发送创建Key命令的数据域*/SYSCNTL1=0x60;Delay_Time(200);/*向ESAM卡发创建Key命令的数据域*/Write_Esam();/*将ESAM卡的I/O端设为输出,准备从ESAM卡接收返回状态*/SYSCNTL1=0x20;Delay_Time(200);/*读空接收缓冲区*/i=UART_RGET(URRBR);/*读返回的状态信号,以确定创建Key操作是否正确*/Read_Esam(ReplyData,2);/*获取状态字*/State=(ReplyData08)|ReplyData1;returnState;/*/*函数名:

Creat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1