【发布时间】:2013-04-23 17:08:21
【问题描述】:
我正在尝试将数据文件从 JC 2.2.2 卡发送到主机应用程序。所有文件都小于 256 字节。但是数据需要加密和签名(用于安全消息传递),如下所示。将 MAC 添加到加密数据后,某些文件的长度会超过 256 个字节。但是我使用的是扩展长度,所以我认为一次发送超过 256 个字节不会有问题。如果生成的密码加 MAC 小于 256 字节,则程序运行良好。下面是一段向主机发送响应 apdu 的代码。
Util.arrayCopyNonAtomic(file, offset, buffer, (short)0, file.length);
respLength = secureCrypto.wrapResponseAPDU(ssc, apdu, buffOfset, file.length);
apdu.setOutgoing();
apdu.setOutgoingLength(respLength); // 0x6F00 error occurs during the execution of this line
apdu.sendBytesLong(buffer, (short)0, respLength);
卡片详情:
Terminal found : 2
PC/SC terminal OMNIKEY CardMan 5x21 0
PC/SC terminal OMNIKEY CardMan 5x21-CL 0
ATR: 13 bytes
Card Info : PC/SC card in OMNIKEY CardMan 5x21-CL 0, protocol T=1, state OK
在主机端,我收到 0x6F00 错误代码。并且我跟踪了程序,发现错误发生在apdu.setOutgoingLenght(respLength)的执行过程中。此外,我的小程序类实现了 ExtendedLength 接口。请提供任何有用的信息
【问题讨论】:
-
您确定该卡支持扩展长度的 APDU 吗?您是否正在发送由您的代码以扩展长度 APDU 格式实现的命令?
-
对于您的第一个问题,我会说是,因为我使用的是 JC 2.2.2 和 T=1 协议。对于第二个问题,我不确定,我不知道我是否必须这样做。请给我一个扩展长度格式的 APDU 的示例,您会更有帮助吗?
-
我只能参考 ISO 7816 第 4 部分,它描述了字节格式。第一个字节为零的 LC 的 3 字节规范表示扩展长度的 LC 字段,这也要求 LE 字段采用 2 字节的扩展格式)。在没有 LC 的情况下,LE 规范有额外的前导零字节,后跟两个字节长度。如果你给你的应用程序语言和使用的 API 可能其他人可能会进一步帮助你。