【问题标题】:How to detect interface of incoming command?如何检测传入命令的接口?
【发布时间】:2016-01-05 18:32:59
【问题描述】:
我有一个包含我的小程序的双接口 Java 卡。我想对来自不同接口的单个命令有两个不同的 APDU 响应。
例如,我想在从接触式接口接收到命令时以“Contact”响应00 10 00 00 APDU 命令,当从非接触式接口接收到该命令时响应“ContactLess”。
那么,Java Card API 或 Global Platform API 中是否有任何方法可以检测传入命令的接口?
【问题讨论】:
标签:
javacard
apdu
globalplatform
【解决方案1】:
javacard.framework.APDU 类中有一个名为getProtocol() 的方法:
public static byte getProtocol()
返回 ISO 7816 传输协议类型,低半字节中的 T=1 或 T=0,高半字节中正在使用的传输媒体。
接口编码在返回字节的高半字节中:
final byte transportMedia = (byte) (APDU.getProtocol() & APDU.PROTOCOL_MEDIA_MASK);
final boolean isContactless = (transportMedia == APDU.PROTOCOL_MEDIA_CONTACTLESS_TYPE_A) ||
(transportMedia == APDU.PROTOCOL_MEDIA_CONTACTLESS_TYPE_B);