clear

reset

maclength   = 8

auto_response on

data[ 450 ] = 00        // 明文
call run_jcop_extauth

message "成功!完全成功!!!!"

end

run_jcop_extauth:
    
// 输入条件

    
// data[ 450 ]是认证级别
    maclength   = 8

    
data[ 451 ] = 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f

    
//data[ 452 ] = 1122334455667788            //主机随机数
    data[ 452 ] = random( 8 )

    
80 50 00 00 ( $data[ 452 ] )
    
if sw != 9000
        
?
        
message "外部认证错误"
        
pause
    
endif
    
set resp
    
data[ 453 ] = mid( $resp, 0, 10 )       //Key diversification data
    data[ 454 ] = mid( $resp, 10, 2 )       //Key information
    data[ 455 ] = mid( $resp, 12, 2 )       //Sequence counter
    data[ 456 ] = mid( $resp, 14, 6 )       //Card challenge
    data[ 457 ] = mid( $resp, 20, 8 )       //Card cryptogram


    
message "Key diversification data        " $data[ 453 ]
    
message "Key information                 " $data[ 454 ]
    
message "Sequence counter                " $data[ 455 ]
    
message "Card challenge                  " $data[ 456 ]
    
message "Card cryptogram                 " $data[ 457 ]

    
message "S-ENC = 2 byte constant + 2 byte sequence counter + 12 byte 00"
    
data[ 460 ] = 01 82 $data[ 455 ] 00000000 00000000 00000000
    
message "S-ENC                          " $data[ 460 ]

    
message "C-MAC = 2 byte constant + 2 byte sequence counter + 12 byte 00"
    
data[ 461 ] = 01 01 $data[ 455 ] 00000000 00000000 00000000
    
message "C-MAC                          " $data[ 461 ]

    
message "C-DEK   = 2 byte constant + 2 byte sequence counter + 12 byte 00"
    
data[ 462 ] = 01 81 $data[ 455 ] 00000000 00000000 00000000
    
message "C-DEK                          " $data[ 462 ]

    
data[ 463 ] = 3des_encode_cbc( 0000000000000000, $data[ 460 ], $data[ 451 ] )
    
message "session key                    " $data[ 463 ]

    
data[ 464 ] = 3des_encode_cbc( 0000000000000000, $data[ 461 ], $data[ 451 ] )
    
message "c-mac key                      " $data[ 464 ]

    
data[ 465 ] = 3des_encode_cbc( 0000000000000000, $data[ 462 ], $data[ 451 ] )
    
message "dek                            " $data[ 465 ]

    
message "Host Authenticate Cryptogram = sequence counter(2Byte) + card challenge(6) + host challenge(8) +80000000 00000000"
    
data[ 470 ] = $data[ 455 ]   $data[ 456 ]   $data[ 452 ]    80000000 00000000
    
message "host authenticate cryptogram   " $data[ 470 ]

    
data[ 471 ] = 3des_encode_cbc( 00000000, $data[ 470 ], $data[ 463 ] )
    
message $data[ 471 ]
    
data[ 472 ] = mid( $data[ 471 ], 16, 8 )
    
message "外部认证的数据域为             " $data[ 472 ]

    
message "组成外部认证指令"
    
data[ 473 ] = 84 82 00 $data[ 450 ] < $data[ 472 ] >
    
data[ 474 ] = fixed80( $data[ 473 ] )
    
message "外部认证的指令为               " $data[ 473 ]

    
data[ 475 ] = des_3des_mac( 0000000000000000, $data[ 474 ], $data[ 464 ] )
    
message "外部认证的mac为                " $data[ 475 ]

    
message "外部认证最终指令为             " $data[ 473 ]  $data[ 475 ]

    
sendtext $data[ 473 ] $data[ 475 ]
    
if sw != 9000
        
?
        
message "外部认证错误"
        
pause
    
endif

return