iccOpenLogicalChannel 在 Javacard Applet 上返回 STATUS_NO_SUCH_ELEMENT

问题描述 投票:0回答:1

我有一个小程序(取自这个 HelloSTK2 存储库),我已经编译并安装在 SysmoISIM-SJA2 卡上,并且我对其进行了轻微修改以响应 SELECT APDU。修改如下:

public void process(APDU arg0) throws ISOException {
    showHello();
}
private void showHello() {
    ProactiveHandler proHdlr = ProactiveHandler.getTheHandler();
    proHdlr.initDisplayText((byte)0, DCS_8_BIT_DATA, welcomeMsg, (short)0, 
            (short)(welcomeMsg.length));
    proHdlr.send();
    return;
}

我所做的只是将现有的

showHello()
函数移至处理 APDU 的函数。我从 Javacard 文档中了解到,
process()
函数应该运行,然后返回状态字 9000,或者错误代码(如果适用)。

对于

SELECT
文件,我编写了一个 Android 应用程序,它使用
iccOpenLogicalChannel
并将 AID 作为参数。使用 GlobalPlatformPro,我可以看到小程序已正确安装在 UICC 上,并且它被列为
SELECTABLE
,但是当我运行 Android 应用程序时,我收到
STATUS_NO_SUCH_ELEMENT
响应,根据 iccOpenLogicalChannelResponse 源,这意味着 AID 是在 UICC 上找不到。

Android 应用程序的代码非常简单,如下所示:

val inputView: EditText = findViewById<EditText>(R.id.AID_INPUT)
            val input: String = inputView.text.toString()
            val ch = mTelephonyManager.iccOpenLogicalChannel(input)
            Toast.makeText(this, ch.toString(), Toast.LENGTH_LONG).show()
            mTelephonyManager.iccCloseLogicalChannel(ch.channel)

列出卡上小程序的输出如下所示(已截断):

AID: d07002ca44, State: 01, Privs: 00
Instance AID: d07002ca44900102

我已经尝试了 d07002ca44 和 d07002ca44900102,并且对于这两种 AID 都得到了相同的响应。

我的问题是:我需要采取哪些步骤来确保我的 Android 应用程序能够选择此小程序?

值得注意的是,我的 Android 应用程序确实具有运营商权限,并且我能够将 APDU 发送到其他应用程序,例如 USIM 和 ISIM 小程序。

android javacard sim-card
1个回答
0
投票

兄弟我也明白了。但在 euicc 芯片和 Google sim 管理器上进行移植。 (com.Google.Android.euicc)
引起原因:com.android.internal.telephony.uicc.euicc.apdu.ApduException:无法打开为 AID 打开的逻辑通道:A0000005591010FFFFFFFF8900000100,状态:3 该id已固定且无法修改。我的卡也很正常,可以通过 PC/SC 读卡器在 PC 上使用。也很奇怪。

可能援助还可以,但长度不够?或者你是否向其他人授予了 Android se?

© www.soinside.com 2019 - 2024. All rights reserved.