【发布时间】:2013-01-22 00:50:45
【问题描述】:
考虑一个具有多个实例的 Java Card Classic 小程序,这些实例需要共享 byte[] 变量中的一些数据(例如持久可变,即 EEPROM/Flash),其中包含所有实例共有的信息。
静态 byte[] 变量将是一个完美的选择,但这些恰好被强加给我的验证规则所禁止(我被告知:作为一种全面的方式来证明取消实例化实例可以释放它在实例化时分配)。
如果从属实例可以在主实例的上下文中调用小程序的方法之一(可能最初由 AID 标识,或/和/然后以某种其他方式),则可以解决此问题。如何才能做到这一点?有什么例子吗?
更新:this other question 中的代码是在做我想做的事 共享对象,但似乎没有在另一个实例的上下文中调用方法。
【问题讨论】:
-
你不能把数组隐藏在
Shareable对象后面吗?我想你可以简单地通过使用master的AID向系统询问可共享接口,然后调用Shareable接口中定义的retrieveByteArray()。 -
PS 如果这个问题在明天之前没有得到回答,我会尝试为你制作一个 SSCCE,作为对你在 crypto 工作的感谢:)
-
啊:您建议实例检索存储在可共享对象中的主数据,而不是在主上下文中调用方法以便它可以使用所有主数据。我担心以这种方式获得的 byte[] 数组无法访问(仅作为参数有效);但如果它们是可读/可写的,那就可以了。我喜欢这样的 SSCCE。
-
我认为它们应该是,除非它们是 APDU 缓冲区或瞬态
CLEAR_ON_DESELECT。也不要让它们成为静态的,尤其是写入静态字节数组肯定会导致灾难。但是对于 JavaCard,有时您只需要尝试一下(如果它不起作用,请阅读公共 RE 规范)。 -
所以你的计划是:写一个在
Shareable接口中定义的retrieveByteArray(),将共享数据从主实例的上下文复制到从实例的上下文,通过RAM,如APDU缓冲区(或也许是瞬态字节[]);我希望通过调用主人的上下文来避免复制。顺便说一句:我理解为什么写入 byte[] 而不是瞬态会导致缓慢和内存磨损,但不知道static如何使情况变得更糟。