📄 psam.c
字号:
#include <api.h>
#include <console.h>
#include "string.h"
#include "stdio.h"
unsigned char ResetResponse(unsigned char *ptr, unsigned char *len)
{
ICC_interface_power(ICC_POWER_ON);
ICC_select_sock(ICC_SOCK_MAIN);
if(ICC_cpucard_ATR(ptr,len, ICC_CLOCK_4M, ICC_VOLTAGE_5, 0x11, 1)==0)
return 1;
else
return 0;
}
unsigned char GetChallenge(unsigned char *ptr)
{
unsigned short sw;
if(ICC_T0_TPDU(1,0x00,0x84,0x00,0x00,0x08,ptr,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char SelectFile(unsigned char mode,unsigned short file_ID)
{
unsigned char cmd[40];
unsigned short sw;
cmd[0] = file_ID/256;
cmd[1] = file_ID%256;
if(ICC_T0_TPDU(0,0x00,0xa4,mode,0x00,0x02,cmd,&sw))
return 0;
else
{
/* clr_scr();
move_cursor(0,0);
set_console_english();
Dispbcd(0,0, &sw, 2);
set_console_chinese();
*/ if ((sw & 0xff00)== 0x6100)
return 1;
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char GetResponse(unsigned char *ptr,unsigned char cLength)
{
unsigned short sw;
if(ICC_T0_TPDU(1,0x00,0xc0,0x00,0x00,cLength,ptr,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char InternalAuth(unsigned char *ptr, unsigned char Keyno)
{
unsigned short sw;
if(ICC_T0_TPDU(0,0x00,0x88,0x00,Keyno,0x08,ptr,&sw))
return 0;
else
{
if ((sw&0xff00) == 0x6100)
return (sw&0xff);
else
return 0;
}
}
unsigned char ExternalAuth(unsigned char *ptr, unsigned char Keyno)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, 8);
if(ICC_T0_TPDU(0,0x00,0x82,0x00,Keyno,0x08,cmd,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char ReadBinary(unsigned char file_ID,unsigned char offset,unsigned char cLength,unsigned char *ptr)
{
unsigned short sw;
if(ICC_T0_TPDU(1,0x00,0xb0,file_ID|0x80,offset,cLength,ptr,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char UpdateBinary(unsigned char cla,unsigned char file_ID,unsigned char offset,unsigned char cLength,unsigned char *ptr)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, cLength);
if(ICC_T0_TPDU(0,cla,0xd6,file_ID|0x80,offset,cLength,cmd,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char ReadRecord(unsigned char file_ID,unsigned char recordNO,unsigned char cLength,unsigned char *ptr)
{
unsigned short sw, buf[10];
if(ICC_T0_TPDU(1,0x00,0xb2,recordNO,(file_ID<<3)|0x04,cLength,ptr,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char AppendRecord(unsigned char file_ID,unsigned char cLength,unsigned char *ptr)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, cLength);
if(ICC_T0_TPDU(0,0x00,0xe2,0x00,file_ID<<3,cLength,cmd,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char UpdateRecord(unsigned char file_ID,unsigned char recordNO,unsigned char cLength,unsigned char *ptr)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, cLength);
if(ICC_T0_TPDU(0,0x00,0xdc,recordNO,(file_ID<<3)|0x04,cLength,cmd,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char GetMifKey(unsigned char KID, unsigned char MACKID, unsigned char *ptr, unsigned char len)
{
unsigned char cmd[80], clen;
unsigned short sw;
memcpy(cmd, ptr, len);
if(ICC_T0_TPDU(0,0x80,0xfc,KID,MACKID,len,cmd,&sw))
return 0;
else
{
// clr_scr();
// move_cursor(0,0);
// set_console_english();
// Dispbcd(0,0, &sw, 2);
// set_console_chinese();
if ((sw&0xff00) == 0x6100)
return (sw&0xff);
else
return 0;
}
}
unsigned char InitForDescrypt(unsigned char SepGeneLen, unsigned char *SepGene, unsigned char KeyTpye, unsigned char keyno)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, SepGene, SepGeneLen);
if(ICC_T0_TPDU(1,0x80,0x1a,KeyTpye,keyno,SepGeneLen,cmd,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
unsigned char Descrypt(unsigned char mode,unsigned char cLength,unsigned char *ptr)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, cLength);
if(ICC_T0_TPDU(1,0x80,0xfa,mode,0x00,cLength,cmd,&sw))
return 0;
else
{
if ((sw&0xff00) == 0x6100)
return (sw&0xff);
else
return 0;
}
}
unsigned char MAC(unsigned char cLength, unsigned char *ptr)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, cLength);
if(ICC_T0_TPDU(1,0x80,0xfa,0x05,0x00,cLength,cmd,&sw))
return 0;
else
{
if ((sw&0xff00) == 0x6100)
return (sw&0xff);
else
return 0;
}
}
unsigned char VerifyPIN(unsigned char cLength, unsigned char *ptr)
{
unsigned char cmd[40];
unsigned short sw;
memcpy(cmd, ptr, cLength);
if(ICC_T0_TPDU(0,0x00,0x20,0x00,0x00,cLength,cmd,&sw))
return 0;
else
{
if (sw == 0x9000)
return 1;
else
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -