header_component {
u1 tag
u2 size
u4 magic // 必须为0xDECAFFE
u1 minor_version
u1 major_version
u1 flags // ACC_INT - 0x01; ACC_EXPORT - 0x02; ACC_APPLET - 0x04
package_info package
package_name_info package_name
}
其中CAP File Package Flags:
Flags
Value
ACC_INT
0×01
ACC_EXPORT
0×02
ACC_APPLET
0×04
package_info {
u1 minor_version
u1 major_version
u1 AID_length
u1 AID[AID_length]
}
1
2
3
4
package_name_info {
u1 name_length // 当包内没有定义任何remote interfaces或者remote classes的时候值可以为0
u1 name[name_length]
}
以 HelloWorld.cap 文件中的Header.cap中的信息为例:
0×01 | 0×00 0×13 | 0xDE 0xCA 0xFF 0xED | 0×01 | 0×02 | 0×04 |0×00 0×01 | 0×09 | 0xA0 0×00 0×00 0×00 0×62 0×03 0×01 0x0C 0×01
tag: 0×01 COMPONENT_Header
size: 0×13 = 19 除去tag和size后的大小
magic: 0xDECAFFED 用以标识Java卡CAP文件格式,若一个文件不是以0xDECAFFED开头则肯定不是JavaCard CAP文件,因为它不符合规范
minor_version: 0×01 次版本号
major_version: 0×02 主版本号, 该CAP文件格式的版本号是02.01;如果CAP文件的版本号超出了Java卡虚拟机所能够处理的有效范围,Java卡虚拟机将不会处理该CAP文件
flag: 0×04 包中没有用到int类型、CAP文件中没有Export组件、CAP文件中有Applet组件。
package_info:
minor_version: 0×00
major_version: 0×01
AID_length: 0×09
AID: 0xA0 0×00 0×00 0×00 0×62 0×03 0×01 0x0C 0×01
对应卡内installer: