Eclipse fails to build Java Card sample projects

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-06 16:07:29

It seems the build process of the Java Card Classic Development Kit 3.0.5u2 (jcdk) Eclipse Plugin is broken. During the build of an java card applet, three scripts located in the bin subdirectory of the jcdk installation directory are executed (if using default applet settings in eclipse):

  1. converter.bat generating the export file *.exp
  2. converter.bat generating cap (and jca) file
  3. scriptgen.bat generating the script files for installing the applet to a java card.

The problem is, that scriptgen requires a hashfile containing hashes for the applet components. You can see this if you decompile the class com.sun.javacard.scriptgen.Main of tools.jar in jcdk lib folder.

This hashfile is not generated during the eclipse build process, neither is the scriptgen script called with the corresponding program option "-hashfile <hash-file>". The only workaround currently is using the jcdk tools on the console manually. Therefor you can use the output of console in eclipse and adopt it for your needs.

Example output for a simple test applet:

Executing E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/converter.bat -i -debug -out EXP -classdir G:\eclipse_javacard\workspace\TestJCDKApplet\bin -d G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables -exportpath E:\eclipse-oxygen-64bit\JCDKit_305u2\\api_export_files -applet 0xD0:0x00:0x00:0x00:0x01:0x01:0x01 test.jcdk.applet.TestApplet test.jcdk.applet 0xD0:0x00:0x00:0x00:0x01:0x01 1.0
Executing E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/converter.bat -i -debug -out CAP JCA -classdir G:\eclipse_javacard\workspace\TestJCDKApplet\bin -d G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables -exportpath E:\eclipse-oxygen-64bit\JCDKit_305u2\\api_export_files -applet 0xD0:0x00:0x00:0x00:0x01:0x01:0x01 test.jcdk.applet.TestApplet test.jcdk.applet 0xD0:0x00:0x00:0x00:0x01:0x01 1.0
Executing E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/scriptgen.bat -package test.jcdk.applet -o G:\eclipse_javacard\workspace\TestJCDKApplet\apdu_scripts/cap-test.jcdk.applet.script G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables/test/jcdk/applet/javacard/applet.cap

Modified to generate the required script files (listed only the last two, first two scripts do not change):

    G:\eclipse_javacard\workspace\TestJCDKApplet>E:\eclipse-oxygen-64bit\JCDKit_305u2\bin\verifycap.bat -outfile applet.hash E:\eclipse-oxygen-64bit\JCDKit_305u2\api_export_files\java\lang\javacard\lang.exp E:\eclipse-oxygen-64bit\JCDKit_305u2\api_export_files\javacard\framework\javacard\framework.exp .\deliverables\test\jcdk\applet\javacard\applet.exp .\deliverables\test\jcdk\applet\javacard\applet.cap
[ INFO: ] Verifier [v3.0.5]
[ INFO: ]     Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.


[ INFO: ] Verifying CAP file .\deliverables\test\jcdk\applet\javacard\applet.cap
[ INFO: ] Digest for test/jcdk/applet/javacard/Header.cap               [SHA-256: 22e589e7bbb45e420c2a17d5b8abcc437c52f00ecfb15b48ed3257f87eff62f9]
[ INFO: ] Digest for test/jcdk/applet/javacard/Directory.cap            [SHA-256: bc72a8594664c9720c38afab7c87b7dda894088f53faefcac548463a4186fbe9]
[ INFO: ] Digest for test/jcdk/applet/javacard/Import.cap               [SHA-256: e58492b256b4af8d7f1860f18e57c5336e254a618c2518c987dcefb33db0a8d0]
[ INFO: ] Digest for test/jcdk/applet/javacard/ConstantPool.cap         [SHA-256: 6c5bf615cd3746d52c815e8264b910a41a94217161862a7520087799fd03098b]
[ INFO: ] Digest for test/jcdk/applet/javacard/StaticField.cap          [SHA-256: 1ec76ec50280f5d8822179bb1b268ae7c2383d9fbe4d6c2beb427090dbf53dfd]
[ INFO: ] Digest for test/jcdk/applet/javacard/RefLocation.cap          [SHA-256: b2b3f5e23eee662b8c406212d5cb291959a8eeddb92e58b9a45941c0b91388be]
[ INFO: ] Digest for test/jcdk/applet/javacard/Descriptor.cap           [SHA-256: 292e4bd46d836b8501a19a9ea92b1ec976eca1b4920bb03499236284d17be2d7]
[ INFO: ] Digest for test/jcdk/applet/javacard/Class.cap                [SHA-256: 6c68abd77e3481a00ae2462cfc8f416ae38d4d0e4b02c685145c39d30d132526]
[ INFO: ] Digest for test/jcdk/applet/javacard/Debug.cap                [SHA-256: 7341f35fee494363bb8b84e8c132399a33a0bb4d39fd9192e92be680c08019d3]
[ INFO: ] Digest for test/jcdk/applet/javacard/Method.cap               [SHA-256: 651231359c6bb65fbcb0e3a49f52cee1a682ed7e97610365b374583638757365]
[ INFO: ] Digest for test/jcdk/applet/javacard/Applet.cap               [SHA-256: e1de8850f009796b9b991757dd378353128e10d4bc6400e5bbd970516bf187f1]
[ INFO: ] Verification completed with 0 warnings and 0 errors.

(Note: you have to add the path to the jcdk export files used by the applet, these you can find out by activating verbose output in the java card package settings and searching the console output for referenced exp files.)

Then at lease you can generate the install script with the command:

G:\eclipse_javacard\workspace\TestJCDKApplet>E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/scriptgen.bat -package test.jcdk.applet -o 

G:\eclipse_javacard\workspace\TestJCDKApplet\apdu_scripts/cap-test.jcdk.applet.script G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables/test/jcdk/applet/javacard/applet.cap -hashfile applet.hash
ScriptGen [v3.0.5]
    Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.


APDU script file for CAP file download generated.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!