可以在 Java Card Applet *内部*执行 APDU 命令吗?

Can an APDU command be executed *inside* the Java Card Applet?

我们知道 Applet.process() 方法正在调用 "between" APDU 请求及其 APDU 响应,即它可以读取一些传入的 APDU 并发送一些传出的 APDU 作为响应。

但是,Applet 可以发送自己的 APDU 命令并得到响应吗?即:

public void process(APDU apdu)
{
...
APDU resp = SomeAPI.someMethod("00A40101FF...");
...
}

我假设您不打算通过串行接口与目标 Applet 通信,而是寻找 "execute the same functionality as you would do on receiving this APDU"。

我有一些疑问,是否存在这样的接口并且由于这些原因没有看到用例:

  • 在 javacard 环境中,小程序是自主构建块。
  • 如果你打算在同一个Applet中调用,应该有更方便的可能性。
  • 如果以不同的小程序为目标:向后和向后的隐含切换根本不符合当前所选小程序的 APDU 概念。

But, can Applet send its own APDU command and get the response?

简单的答案是,您无法为另一个小程序发送APDU,因为您无权访问命令调度程序。但是有一种方法可以做到,请阅读下文。

public void process(APDU apdu)
{
...
APDU resp = SomeAPI.someMethod("00A40101FF...");
...
}

在 java 卡片小程序(直到最新版本 3.0.5u)中,这样的事情是不可能的,因为这里你存储了一个 APDU 对象的引用,它是一个 Temporary JCRE Entry Point Objects 无法存储其引用。

现在,实现你想要的功能。使用 可共享接口对象 。显然,您需要在这里修改目标小程序(您要调用的小程序)。通过可共享对象调用小程序将为您进行上下文切换,您可以在它之后 return 到您的小程序。

参考http://www.oracle.com/technetwork/java/javacard/specs-jsp-136430.html

不,不能。

您无权访问命令调度程序。