smartcard - PPS(协议和参数选择)命令 - 全局平台脚本
问题描述
我正在尝试在智能卡上设置 PPS。我使用的环境基于 Global Platform 脚本。命令说明:
Boolean pps(Number protocol)
Boolean pps(Number protocol, Number f, Number d)
设置卡的物理协议。GP 脚本语言通过 ISO7816 提供对接触式智能卡的支持。可以支持其他专有协议,但取决于实现 GP 脚本语言的环境的支持。如果方法成功执行,则返回一个真正的布尔值。否则,如果参数有效,但环境不能执行card表示的智能卡的方法,则返回false值。如果提供了任何参数协议、f 或 d 的无效值(即本规范中未指定的值或环境不支持的值),则生成带有 GPError.INVALID_DATA 值的 GPError 对象。
样本:
// On a card with a contact interface
this.card.pps(Card.T1, myFrequency, myDivisor);
// returns false value if the card doesn’t support T=1 protocol
协议
协议参数将包含与卡配置文件中定义的值相对应的所需协议值。联系卡的有效值(通过 ISO7816)是:
卡.T0
卡.T1 卡.T14如果指定了上述任何值,则还需要 f 和 d 参数。对于卡支持的专有协议,可以使用环境支持的唯一协议值,只要它不与卡常量定义的值冲突。以下是表示非标准协议的默认常量:
Card.OTHER
请参阅 ISO7816 的 ISO 规范。f - 时钟速率转换因子
d - 数字波特率调整因子
根据 GP 平台描述,我对波特率 38400 的命令如下所示:
this.card.reset( Card.RESET_COLD );
this.card.pps(Card.T1, 372, 4);
我从 PPS 收到的回复是错误的。冷ATR为:3B680000990200D103042201
问题:
- GP PPS命令参数个数我不知道应该是372、4还是10、13对于波特率38400?
- 给定的 ATR 看起来支持 T0 协议,我的命令可能需要是:this.card.pps(Card.T0, 372, 4);?
- 或者我可能需要进行热重置,如果热 ATR 支持 T1 协议,则发送 this.card.pps(Card.T1, 372, 4);?
ATR:
- TS:3B
- T0: 68 -> TB1, TC1, 8 个历史人物
- TB1: 00 -> Vpp 未使用;EEPROM 的编程电压在芯片中生成
- TC1: 00 -> 没有额外的保护时间
- 历史字节(T1-T8):990200D103042201
解决方案
由于缺乏 Javacard 经验,部分答案:
如果我理解正确,你想设置你的卡,所以它接受 PPS。(阅读器必须触发它,所以卡片只能指示能力。)
- 您的 ATR 必须提供一个 TA1 字节以向阅读器指示其 PPS 支持。对于 3.57 Mhz 的外部时钟,如果需要最大 38400 位/秒,则该时钟必须为 13。
- 请注意,PPS 只是建立了应用于外部时钟的分频因子。如果阅读器提供与 3.57 MHz 不同的时钟,您的通信速率将成正比。(根据 ISO 7816-3,对于其他时钟范围,必须更改指示 Fi 的 TA1 的高半字节)
- PPS 仅在复位后可用。
推荐阅读
- angular - 如何通过点击事件使用 Ionic 的 RouterDirection?
- highlight - TypeError: $(...).autoabbr 不是函数,即使函数存在
- azure - 如何从 devOps 管道访问 Azure 门户的配置?
- c# - 使用 ML.NET 从预测中获得准确性
- google-apps-script - appscript UrlFetchApp 和幻灯片导出到 txt
- python - 存在 python 2.7 时使用 python 3.8 创建虚拟环境
- react-native - Gradle 同步失败:基础:GRADLE_USER_HOME 未知
- mongodb - 猫鼬 findByIdAndUpdate 嵌套不更新对象
- python - 我应该如何在 Airflow 中创建 DAG 子计划?
- algorithm - 非递归编写的斐波那契算法的空间复杂度是多少?