- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑一个具有多个实例的 Java Card Classic 小程序,这些实例需要共享 byte[] 变量中的一些数据(例如持久可变,即 EEPROM/Flash),其中包含所有实例共有的信息。
静态 byte[] 变量将是一个完美的选择,但是这些恰好被强加给我的验证规则所禁止(我被告知:作为一种包罗万象的方法来证明取消实例化实例会释放它所释放的内容)在实例化时分配)。
如果从属实例可以在主实例的上下文中调用小程序的方法之一(可能最初由 AID 识别,或/和/然后以某种其他方式识别),则可以解决此问题。如何才能做到这一点?有什么例子吗?
<小时/>更新:this other question中的代码
紧接着做我想做的事情
共享对象,但似乎没有在另一个实例的上下文中调用方法。
最佳答案
一个经过测试的示例,正如所 promise 的:
package nl.owlstead.javacard.sharedarray;
import javacard.framework.*;
/**
* The master and slave AID should only differ in the last byte; the master should end with the 'm' ASCII character.
* This applet is for demonstration purposes only.
*
* @author owlstead@stackoverflow
*/
public class SharingApplet extends Applet {
public interface SharedArray extends Shareable {
public byte[] getSharedArray();
}
public static class SharedArrayImpl implements SharedArray {
private byte[] sharedArray;
public SharedArrayImpl(final byte[] arrayToShare) {
this.sharedArray = arrayToShare;
}
public byte[] getSharedArray() {
return sharedArray;
}
}
private static final short MAX_AID_SIZE = 16;
private static final short START = 0;
private static final byte SHARABLE_PARAM = 0;
private static final byte PARAM_SHARED_ARRAY = 0;
public static void install(byte[] bArray, short bOffset, byte bLength) {
final byte aidLength = bArray[bOffset++];
final byte lastAIDByte = bArray[(short) (bOffset + aidLength - 1)];
final boolean isMaster = lastAIDByte == 'm';
final SharingApplet applet = new SharingApplet(isMaster);
applet.register(bArray, bOffset, aidLength);
applet.setMasterAID();
}
// if null, it is not the master
private final SharedArray sharedArray;
private AID masterAID;
public SharingApplet(final boolean isMaster) {
if (isMaster) {
final byte[] sa = new byte[] { 'm' };
sharedArray = new SharedArrayImpl(sa);
} else {
sharedArray = null;
}
}
public void process(APDU apdu) {
if (selectingApplet()) {
return;
}
byte[] buf = apdu.getBuffer();
switch (buf[ISO7816.OFFSET_INS]) {
case (byte) 0x00: {
final SharedArray theSharedArray;
if (sharedArray == null) {
theSharedArray = (SharedArray) JCSystem.getAppletShareableInterfaceObject(masterAID, SHARABLE_PARAM);
} else {
theSharedArray = sharedArray;
}
final byte[] sa = theSharedArray.getSharedArray();
Util.arrayCopy(sa, START, buf, START, (short) sa.length);
apdu.setOutgoingAndSend(START, (short) sa.length);
break;
}
case (byte) 0x02: {
final SharedArray theSharedArray;
if (sharedArray == null) {
theSharedArray = (SharedArray) JCSystem.getAppletShareableInterfaceObject(masterAID, SHARABLE_PARAM);
final byte[] sa = theSharedArray.getSharedArray();
sa[START] = 's';
} else {
theSharedArray = sharedArray;
final byte[] sa = theSharedArray.getSharedArray();
sa[START] = 'm';
}
break;
}
default:
ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
}
}
private void setMasterAID() {
final byte[] workspace = new byte[MAX_AID_SIZE];
final AID slaveOrMasterAID = JCSystem.getAID();
final byte aidLength = slaveOrMasterAID.getBytes(workspace, START);
workspace[(short) (aidLength - 1)] = 'm';
this.masterAID = new AID(workspace, START, aidLength);
}
public Shareable getShareableInterfaceObject(AID clientAID, byte parameter) {
if (sharedArray == null || parameter != PARAM_SHARED_ARRAY) {
return null;
}
return sharedArray;
}
}
关于smartcard - JavaCard:小程序的实例如何调用另一个实例的上下文中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238849/
我创建了一个 .cap 文件,代码是 here .这是一个简单的一次性密码生成器。 最后我将 010203040506070809 设置为 package ID 并将 0102030405060708
我一直在研究智能卡的读/写操作,我相信我的卡是sle_4428,我使用的是HID OMNIKEY 3121 USB读卡器。问题是,当我在读卡器中输入卡时,我的程序响应为智能卡未响应重置,错误代码为 0
谁能告诉我EMV卡的数据结构是什么? 如果使用磁条卡轨道数据,其中包含 PAN、用户详细信息、到期日期、CVV 等。 当EMV卡插入读卡器时,我们读取的是什么? 我浏览了一些文件和网站,我很难理解。
我通过 Eclipse 制作了一个流行的“Hello World”javacard 代码的 .cap 文件 现在我想通过 GPShell 和 ACR38 智能卡读卡器将它加载到真正的 javacard
我试图了解如何为智能卡创建 CDOL1,而小程序开发人员的帮助不大。当我向卡发送 GET PROCESSING OPTIONS 命令时,我得到以下响应: 80 0E 7D 00 40 01 01 00
通用个性化指南描述了以下个性化过程: 重置 电话 选择 AID 进行个性化 启动安全 channel 多个存储数据命令 安全 channel 与安全域一起建立,并且保存 DGI 的存储数据命令被转发到
我对智能卡编程完全陌生,并且有一个我想要开发的特定应用程序。 我想使用非接触式智能卡并开发具有以下功能的应用程序: 我希望能够将私钥写入非接触式智能卡,但该私钥应该无法提取。 我希望能够将输入发送到智
我想开始使用手机和 SIM 卡。我在互联网上搜索了很多,但我仍然有一些问题! 我想知道 : 1. (U)SIM 卡和智能卡有什么区别? 据我所知,SIM 和 USIM 都是一种智能卡。对?如果是这样,
假设 Java Card 小程序中存在错误:临时字节数组存储在 EEPROM 而不是 RAM 中。此外,假设这个字节数组被每个 APDU 覆盖。 这个错误迟早会损坏卡。 我们可能会出现什么症状?数组中
ISO 14443-3 和 ISO 7816-4 APDU 之间有什么区别?我问这个是因为似乎有些卡使用前者与读卡器通信,有些卡使用后者。我对此感到困惑,想对此有一个很好的了解。例如,我认为 Mifa
我想知道是否可以从智能卡获取借记卡/信用卡号,我尝试使用通信协议(protocol) PC/SC、CCID 和卡接口(interface) ISO/IEC 7816 的智能卡读卡器获取它-1/2/3
我有一张智能卡,但它没有融合(我的意思是它没有预先个性化)。它的 ATR=3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2。 问题1:我
SO JCRE 规范提到,如果另一个小程序有新的选择 apdu,则调用当前选择的小程序“取消选择”方法。从文件系统中选择一个文件怎么样?选择文件是否会导致调用当前所选小程序的取消选择方法? 最佳答案
当主机向卡发送 APDU 命令(例如读取命令)时,在执行第一个命令时,主机是否可以发送另一个命令以取消先前(正在进行的)命令执行? 例如,此处 Command_2 被 Command_3 中断:
我正在寻找一种方法来为我使用的每张智能卡找到唯一编号。我听说每张卡都有唯一的 IC 制造日期、IC 序列号和 IC 批号。 我如何从我的卡中获取这些信息? 最佳答案 当然,每个硬件供应商都会将上述信息
据我所知,SIM 卡是一个 Java 卡,它应该实现 ETSI/3GPP 规范和 UICC 配置。 如果 SIM 是 Java 卡 - 它是否包含来自 Suns 的 JCRE JCRE 规范? 如果
某些智能卡支持 SCP 01 和 SCP02 是什么意思?以及如何在这两者之间进行选择?它是在安全域中预定义的还是有一些命令可以选择一个或其他选项? 最佳答案 What does it mean th
我一直在查看 JavaCard API 和示例,但找不到对更高级别数据集合(如 List、ArrayList、HashMaps 等)的任何引用? 我错过了什么吗? 我知道 JavaCard 环境的资源
考虑一个具有多个实例的 Java Card Classic 小程序,这些实例需要共享 byte[] 变量中的一些数据(例如持久可变,即 EEPROM/Flash),其中包含所有实例共有的信息。 静态
下面引用的段落是陈志群撰写的如何编写 Java Card applet:开发人员指南文章的一部分。 我看到了here Once an applet is selected, the JCRE forw
我是一名优秀的程序员,十分优秀!