在javacard中调用不同的applet

Call different applet in javacard

我在 java 卡中有 2 个小程序。 first applet functions as a loyalty card. The second applet函数存储交易。

我想使用第二个小程序将 add balances/credit transactionpurchase transactions 记录到 eeprom

file_name: month
-----------------------------------
datetime | transaction code | amount
-----------------------------------

month:
01 = january
02 = february
ect..

datetime (7 bytes): 
dd MM yyyy HH mm ss  

transaction code (1 byte):
01 = purchase
02 = add balance

amount (4 bytes):
FF FF FF FF

---------------------------------------
example:
---------------------------------------

1. transaction add balance 100 in 01-02-2022 03:04:05 (dd-MM-yyyy HH:mm:ss)

file_name: 01
------------------------------------------------
datetime           | transaction code | amount
------------------------------------------------
01 02 07D2 030405        02            00000064

CLA = 80
INS = E0
P1  = 00
P2  = 00
LC  = 0C
DATA = 01 02 07 D2 03 04 05 02 00 00 00 64

我想将 apdu 80 E0 00 00 0C 01 02 07 D2 03 04 05 02 00 00 00 64first applet 发送到 second applet。怎么做?谢谢。

伊赫迪娜.
由于 JC 平台具有旨在提高平台安全性(即防火墙保护、上下文切换)的相当复杂的功能,因此您可以做自己想做的事情的能力有限。

注意:应将从另一个小程序调用API的能力指定为小程序之间交换数据的能力。前者可以使用 Shareable 接口。后者比较复杂。

第一个选项one CAP file with two applets
要交换数据,您可以将两个小程序放入一个 CAP 文件中,从而避免绕过 JC 平台安装的栅栏问题。允许这样做的功能称为 扩展 CAP 文件格式 。一个 applet 实例可以自由访问属于另一个 applet 实例的对象,该实例位于同一 Java Card CAP 文件中的任何包中。 注意:这只能从 JC 3.1.

开始

第二个选项Array View
JC 3.1 中也提供了一个非常好的功能。 Array Views are views to existing arrays which show potentially read-only array slices.

第三个选项GlobalArray
在旧平台(比如我的 3.0.4 版本)上实现 inter-applet 通信的唯一方法。您可以使用 JCSystem.makeGlobalArray API 轻松创建数组并使其成为全局数组。这就是最初在JC平台上声明APDU对象的方式。

基本上,还有很多需要考虑的特性,包括RE Privileges,RE Entry Point Objects等等。但是上面给出的应该足够了。

P.S。我习惯 post 关于 my Twitter account, specifically, have more information about the Inter-Applet communication.

上的 JavaCard 平台的杂项信息