在javacard中调用不同的applet
Call different applet in javacard
我在 java 卡中有 2 个小程序。 first applet functions as a loyalty card. The second applet函数存储交易。
我想使用第二个小程序将 add balances/credit transaction
和 purchase 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 64
从 first 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 平台的杂项信息
我在 java 卡中有 2 个小程序。 first applet functions as a loyalty card. The second applet函数存储交易。
我想使用第二个小程序将 add balances/credit transaction
和 purchase 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 64
从 first 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 平台的杂项信息