如何检测传入命令的接口?
How to detect interface of incoming command?
我有一个包含我的小程序的双界面 Java 卡。我想对来自不同接口的单个命令有两个不同的 APDU 响应。
例如,当从接触式接口接收到命令时,我想用 "Contact" 响应 00 10 00 00
APDU 命令,当从非接触式接口接收到该命令时,我想响应 "ContactLess" .
那么,Java Card API 或 Global Platform API 中是否有任何方法来检测传入命令的接口?
在javacard.framework.APDU
class中有一个叫做getProtocol()
的方法:
public static byte getProtocol()
Returns the ISO 7816 transport protocol type, T=1 or T=0 in the low nibble and the transport media in the upper nibble in use.
接口在返回字节的高半字节中编码:
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);
我有一个包含我的小程序的双界面 Java 卡。我想对来自不同接口的单个命令有两个不同的 APDU 响应。
例如,当从接触式接口接收到命令时,我想用 "Contact" 响应 00 10 00 00
APDU 命令,当从非接触式接口接收到该命令时,我想响应 "ContactLess" .
那么,Java Card API 或 Global Platform API 中是否有任何方法来检测传入命令的接口?
在javacard.framework.APDU
class中有一个叫做getProtocol()
的方法:
public static byte getProtocol()
Returns the ISO 7816 transport protocol type, T=1 or T=0 in the low nibble and the transport media in the upper nibble in use.
接口在返回字节的高半字节中编码:
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);