gpt4 book ai didi

java - 我们能否在没有AID的情况下打开 channel 并控制嵌入式SE的力量?

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:10 26 4
gpt4 key购买 nike

我们现在正在Android N上使用NXP NQ220(已嵌入SE,称为eSE)开发支付卡。平台是MTK。现在,我们可以使用 OMA 与 eSE 交互(使用 org.simalliance.openmobileapi.jar)。它按预期工作。

我想知道是否有任何方法可以在没有 AID 的情况下在 session 中打开 channel ?另外,有没有办法控制eSE的电源(开机和关机)以及在某些情况下重置eSE?

我的调查如下:

  1. 关于没有AID的开放 channel ,我在Open Mobile API specification V3的第16页找到了以下句子

(h)Method: Channel openLogicalChannel(byte[] aid, Byte P2)
Open a logical channel with the SE, selecting the applet represented by the >given AID. If the AID is null, which means no applet is to be selected on >this channel, the default applet is used. It's up to the SE to choose which >logical channel will be used.

但是,如果我们在 openLogicalChannel(byte[] aid) 中将 aid 设置为 null,将显示以下异常。会发生什么?是不是默认小程序或者eSE有问题?

01-30 01:06:39.941 V/SmartcardService( 2587): OpenLogicalChannel Exception: Access Control Enforcer: no APDU access allowed!
01-30 01:06:39.947 E/SeControlClient( 3239): Error occured:
01-30 01:06:39.947 E/SeControlClient( 3239): java.lang.SecurityException: Access Control Enforcer: no APDU access allowed!
01-30 01:06:39.947 E/SeControlClient( 3239): at org.simalliance.openmobileapi.SEService.checkForException(SEService.java:255)
01-30 01:06:39.947 E/SeControlClient( 3239): at org.simalliance.openmobileapi.Session.openLogicalChannel(Session.java:295)
  • OMA 中似乎没有重置 eSE 的方法。但我在INxpNfcAdapterExtras中找到了reset()方法。但是,当我使用 INxpNfcAdapterExtras.reset() 时,它总是返回 false。下面的代码是我们如何获取INxpNfcAdapterExtras。

    private INxpNfcAdapterExtras getNxpNfcAdapterExtras() {  
    if (mNfcAdapter != null) {
    try {
    INxpNfcAdapter nxpNfcAdapter =
    mNfcAdapter.getService().getNxpNfcAdapterInterface();
    return nxpNfcAdapter.getNxpNfcAdapterExtrasInterface();
    } catch (Exception e) {
    Log.e(LOGTAG, "Exception occured:", e);
    }
    } else {
    Log.e(LOGTAG, "Please initialize NfcAdapter first.");
    }
    return null;
    }
  • 关于控制eSE的力量,与平台有关吗?您能给我一些建议吗?非常感谢。

  • 最佳答案

    1. 不知道

    2. 要访问 SE 功能,您的应用程序必须由 Android 设备所有者执行。

    您可以查看:https://github.com/NXPNFCLinux/android_nxp-nci/blob/1d95fe24334fa12c9d9eccd1141f8739972c4288/aosp/packages/apps/Nfc/src/com/android/nfc/NfcService.java

    重置方法之前检查权限:

    public boolean reset(String pkg) throws RemoteException {
    NfcService.this.enforceNfceeAdminPerm(pkg);
    Bundle result;
    boolean stat = false;
    try {
    stat = _nfcEeReset();
    result = writeNoException();
    } catch (IOException e) {
    result = writeEeException(EE_ERROR_IO, e.getMessage());
    }
    Log.d(TAG,"reset" + stat);
    return stat;
    }

    检查权限方法:

    public void enforceNfceeAdminPerm(String pkg) {
    if (pkg == null) {
    throw new SecurityException("caller must pass a package name");
    }
    NfcPermissions.enforceUserPermissions(mContext);
    if (!mNfceeAccessControl.check(Binder.getCallingUid(), pkg)) {
    throw new SecurityException(NfceeAccessControl.NFCEE_ACCESS_PATH +
    " denies NFCEE access to " + pkg);
    }
    if (UserHandle.getCallingUserId() != UserHandle.USER_OWNER) {
    throw new SecurityException("only the owner is allowed to call SE APIs");
    }
    }

    要与设备所有者一起执行您的应用程序,您可以在此处关注我的答案: Device Admin API, how to be a device owner?

  • 我不确定你的意思是“控制 eSE 的力量”。如果打开/关闭 eSE,则 eSE 与 NFC 芯片集成,因此如果您在 Android 中禁用 NFC,eSE 将关闭。
  • 关于java - 我们能否在没有AID的情况下打开 channel 并控制嵌入式SE的力量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43152504/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com