clear
set mac_length = 4
auto_response on
//===================================================================================
// 交易流程正确性_复合交易流程
//===================================================================================
reset
call create_filesystem
reset
//-----------------------------------------交易测试
//---------------电子存折数据
//电子存折余额
set iedbal=00000000
//电子存折联机交易序号(用于修改透支限额、圈存、圈提)
set wedljjyxh=0000
//电子存折脱机交易序号(消费、取现)
set wedtjjyxh=0000
//电子存折透支限额(3字节)
set iedlimit=000000
//---------------电子钱包数据
//电子钱包余额
set iepbal=00000000
//电子钱包联机交易序号(用于修改透支限额、圈存)
set wepljjyxh=0000
//电子钱包脱机交易序号(消费)
set weptjjyxh=0000
//电子钱包透支限额(3字节,总是0)
set ieplimit=000000
//----------------交易中MAC1、MAC2、TAC变量定义
//$updatetac: 修改透支限额的TAC
//$edloadtac: 电子存折圈存的TAC
//$eploadtac: 电子钱包圈存的TAC
//$unloadmac3: 圈提的MAC3
//$edpmac2: 电子存折消费的MAC2
//$edptac: 电子存折消费的TAC
//$eppmac2: 电子钱包消费的MAC2
//$epptac: 电子钱包消费的TAC
//$edcashmac2: 取现的MAC2
//$edcashtac: 取现的TAC
//===============================================================================
// 读DIR文件
//===============================================================================
00 a4 04 00 0E 31 50 41 59 2E 53 59 53 2E 4444 46 30 31
//if sw != 6F 15 84 0E 31 50 41 59 2E 53 5953 2E 44 44 46 30 31 A5 03 88 01 01 90 00
if sw != 9000
pause
endif
//读第1条记录
00 b2 01 0c 13
if sw != 9000
pause
endif
set tmp
if $tmp != 61 11 4F 09 A0 00 00 00 03 86 98 07 01 5004 50 42 4F 43
pause
endif
//读第2条记录
00 b2 02 0c 13
if sw != 9000
pause
endif
set tmp
if $tmp != 61 11 4F 09 A0 00 00 00 03 86 98 07 02 5004 50 42 4F 43
pause
endif
//读第3条记录(不存在)
00 b2 03 0c 13
if sw != 6a 83
pause
endif
//选不存在的文件,返回6a82
00 a4 04 00 09 A0 00 00 00 03 86 98 07 13
if sw != 6a 82
pause
endif
//===============================================================================
// 选择文件
//===============================================================================
00 a4 04 00 0E 31 50 41 59 2E 53 59 53 2E 4444 46 30 31
if sw != 9000
pause
endif
set tmp
if $tmp != 6F 15 84 0E 31 50 41 59 2E 53 59 53 2E 4444 46 30 31 A5 03 88 01 01
pause
endif
00 a4 04 00 09 A0 00 00 00 03 86 98 07 02
if sw != 9000
pause
endif
set tmp
if $tmp != 6F 11 84 09 A0 00 00 00 03 86 98 07 02 A504 9F 08 01 02
pause
endif
//===============================================================================
// 临时锁定应用
//===============================================================================
00 20 00 00 02 11 11
if sw != 63 c2
pause
endif
00 20 00 00 02 11 11
if sw != 63 c1
pause
endif
00 20 00 00 02 11 11
if sw != 63 c0
pause
endif
00 20 00 00 02 11 11
if sw != 69 83
pause
endif
//应用未锁定,不能应用解锁
//解锁应用无效
00 84 00 00 04
if sw != 9000
pause
endif
set myrand
set rcmd=84 18 00 00 04
set tmp = fixed80( $rcmd )
set mymac = des_3des_mac( $myrand, $tmp, $damk )
84 18 00 00 ( $mymac )
if sw != 6985
pause
endif
//未取随机数
84 1E 00 00 04 01 02 03 04
if sw != 6984
pause
endif
//MAC不正确
00 84 00 00 04
if sw != 9000
pause
endif
84 1E 00 00 04 01 02 03 04
//临时锁定应用
00 84 00 00 04
if sw != 9000
pause
endif
set myrand
set rcmd=84 1e 00 00 04
set tmp = fixed80( $rcmd )
set mymac = des_3des_mac( $myrand, $tmp, $damk )
84 1e 00 00 ( $mymac )
if sw != 9000
pause
endif
//---临时锁定应用后,相关命令执行无效
//选择当前应用无效,但T=1和非接返回FCI和6a81
00 a4 04 00 09 A0 00 00 00 03 86 98 07 02
if sw != 6a81
pause
endif
set tmp
set len = datalen( $tmp )
if $len == 0000
00 c000 00 13
set tmp
endif
if $tmp != 6F 11 84 09 A0 00 00 00 03 86 98 0702 A5 04 9F 08 01 02
pause
endif
//PIN解锁无效
00 84 00 00 04
if sw != 9000
pause
endif
set myrand
set rand
set tmp = 3des_encode_ecb( $pin, $dpuk )
set cipherkey = $dpuk
des_3des_mac 84 24 00 00 < $tmp >
if sw != 69 85
pause
endif
//PIN重装无效
set newpin=112233445566
set cnewpinlen=@strlen($newpin)
set cp3=$cnewpinlen 4
//计算MAC
set myrand=0000000000000000
set tmp1 = mid( $drpk, 0, 8 )
set tmp2 = mid( $drpk, 8, 8 )
set drpsesk= xor( $tmp1, $tmp2 )
set tmp = fixed80( $newpin )
set mac= des_des_mac( $myrand, $tmp, $drpsesk )
80 5e 00 00 ( $newpin $mac )
if sw != 69 85
pause
endif
//修改二进制文件无效
00 84 00 00 04
if sw != 9000
pause
endif
set rand
//50h个字节
set old= random( 80 ) // 10进制80个
set cipherkey = $damk
des_3des_mac 04 d6 97 00 < $old >
if sw != 69 85
pause
endif
00a40000020009
if sw != 6985
pause
endif
//APPEND RECORD无效
00 84 00 00 04
if sw != 9000
pause
endif
set rand
//50h个字节
set old= random( 80 ) // 80个
des_3des_mac 04 dc 00 03 < $old >
if sw != 69 85
pause