如何在lib JMRTD 0.6.0中使用doPACE?

时间:2017-10-24 09:18:35

标签: java

如何在JMRTD 0.6.0中获取stdDomainParam参数?在JMRTD的后续版本中,它是:

try {
    CardAccessFile cardAccessFile = new CardAccessFile(service.getInputStream(PassportService.EF_CARD_ACCESS));
    Collection<PACEInfo> paceInfos = cardAccessFile.getPACEInfos();
    if (paceInfos != null && paceInfos.size() > 0) {
        PACEInfo paceInfo = paceInfos.iterator().next();
        service.doPACE(bacKey, paceInfo.getObjectIdentifier(), PACEInfo.toParameterSpec(paceInfo.getParameterId()));
        paceSucceeded = true;
    } else {
        paceSucceeded = true;
    }
} catch (Exception e) {
    Log.w(TAG, e);
}

在最新版本的CardAccessFile中,仅返回SecurityInfo.getProtocolOIDString()和SecurityInfo.getObjectIdentifier()

CardAccessFile cardAccessFile = new CardAccessFile(passportService.getInputStream(PassportService.EF_CARD_ACCESS));
Collection<SecurityInfo> securityInfos = cardAccessFile.getSecurityInfos();
SecurityInfo securityInfo = securityInfos.iterator().next();
passportService.doPACE(bacKey, securityInfo.getObjectIdentifier(), PACEInfo.toParameterSpec(?????) );

2 个答案:

答案 0 :(得分:1)

List<PACEInfo> paceInfos = new ArrayList<PACEInfo>();

        if (securityInfos == null) {
            return paceInfos;
        }

        for (SecurityInfo securityInfo: securityInfos) {
            if (securityInfo instanceof PACEInfo) {
                paceInfos.add((PACEInfo)securityInfo);
            }
        }

答案 1 :(得分:0)

测试&amp;工作......

CardAccessFile cardAccessFile = new 
CardAccessFile(service.getInputStream(PassportService.EF_CARD_ACCESS));
Collection<SecurityInfo> securityInfos = cardAccessFile.getSecurityInfos();
SecurityInfo securityInfo = securityInfos.iterator().next();
List<PACEInfo> paceInfos = new ArrayList<>();
if (securityInfo instanceof PACEInfo) {
    paceInfos.add((PACEInfo) securityInfo);
}