• Stars
    star
    189
  • Rank 198,614 (Top 5 %)
  • Language
    Java
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Easy to use Ant task for building JavaCard applets (2.1.1 to 3.2.0)

Building JavaCard applet CAP files with Ant

Easy to use Ant task for building JavaCard CAP files in a declarative way.

Build Status Latest release Maven Central Maven version MIT licensed

Features

  • Do What I Mean. You will love it!
  • No dependencies, no extra or unrelated downloads. Just a jar file smaller than 100KB.
  • Supports all available JavaCard SDK versions: 2.1.2, 2.2.1, 2.2.2, 3.0.3, 3.0.4, 3.0.5 and 3.1.0
  • Works on all platforms with LTS Java 1.8+: Windows, OSX, Linux.
  • Almost everything integrates or works with Ant.
  • Can be easily integrated into continuous integration workflows.
  • Generates CAP files from sources or pre-compiled class files.
  • Import external libraries: natural use of .jar libraries and/or .exp files.
  • No restrictions on project folder layout (but src/main/javacard works).
  • Loading JavaCard applets is equally pleasing with GlobalPlatformPro

Download & Use

  • Download ant-javacard.jar
    • Java version usable with all SDK-s is 1.8! Use SDK 3.0.5u3 and targetsdk to compile with Java 11 for older versions.
  • Or use the download task:
<get src="https://github.com/martinpaljak/ant-javacard/releases/latest/download/ant-javacard.jar" dest="." skipexisting="true"/>
  • Then add the following to your build.xml file:
<taskdef name="javacard" classname="pro.javacard.ant.JavaCard" classpath="ant-javacard.jar"/>
  • Now you can create applets within your Ant targets like this:
<javacard>
  <cap jckit="/path/to/jckit_dir" aid="0102030405">
    <applet class="myapplet.MyApplet" aid="0102030405060708"/>
  </cap>
</javacard>

(which results in output similar to this)

target:
      [cap] INFO: using JavaCard 3.0.4 SDK in sdks/jc304_kit
      [cap] INFO: targeting JavaCard 2.2.2 SDK in sdks/jc222_kit
      [cap] Setting package name to testapplets.empty
      [cap] INFO: generated applet AID: A000000617008E5CDAAE01 for testapplets.empty.Empty
      [cap] Building CAP with 1 applet from package testapplets.empty (AID: A000000617008E5CDAAE)
      [cap] testapplets.empty.Empty A000000617008E5CDAAE01
  [compile] Compiling files from /Users/martin/projects/ant-javacard/src/testapplets/empty
  [compile] Compiling 1 source file to /var/folders/gf/_m9mq9td3lz32qv1hd4r12yw0000gn/T/jccpro841338375581620546
  [convert] [ INFO: ] Converter [v3.0.4]
  [convert] [ INFO: ]     Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
  [convert]
  [convert]
  [convert] [ INFO: ] conversion completed with 0 errors and 0 warnings.
 [javacard] NB! Please use JavaCard SDK 3.0.5u3 or later for verifying!
      [cap] CAP saved to /Users/martin/projects/ant-javacard/Empty_A000000617008E5CDAAE_50da91a4_2.2.2.cap

Syntax

Sample:

<javacard jckit="/path/to/jckit_dir1">
  <cap targetsdk="/path/to/jckit_dir2" aid="0102030405" package="package.name" version="0.1" output="MyApplet.cap" sources="src/myapplet" classes="path/to/classes" export="mylib">
    <applet class="myapplet.MyApplet" aid="0102030405060708"/>
    <import exps="path/to/exps" jar="/path/to/lib.jar"/>
  </cap>
</javacard>

Details:

  • javacard tag - generic task
    • jckit attribute - path to the JavaCard SDK that is used if individual cap does not specify one. Optional if cap defines one, required otherwise.
  • cap tag - construct a CAP file
    • jckit attribute - path to the JavaCard SDK to be used. Optional if javacard defines one, required otherwise.
    • targetsdk attribute - path to the target JavaCard SDK (or "3.0.X" target version when using JavaCard SDK v3.1), to be used for this CAP. Optional, value of jckit used by default. Allows to use a more recent converter to target older JavaCard platforms.
    • sources attribute - path(s) to Java source code, to be compiled against the JavaCard SDK. Either sources or classes is required, unless src/main/javacard or src/main/java exists.
    • sources2 attribute - additional sources to build per-platform applets. Optional, deprecated (use multiple paths for sources)
    • classes attribute - path to pre-compiled class files to be assembled into a CAP file. If both classes and sources are specified, compiled class files will be put to classes folder, which is created if missing.
    • includes attribute - comma or space separated list of patterns of files that must be included (like **/SomeFile.java).
    • excludes attribute - comma or space separated list of patterns of files that must be excluded.
    • package attribute - name of the package of the CAP file. Optional for applets - set to the parent package of the applet class if left unspecified, required for libraries
    • version attribute - version of the package. Optional - defaults to 0.0 if left unspecified.
    • aid attribute - AID (hex) of the package. Recommended - or set to the 5 first bytes of the applet AID if left unspecified.
    • output attribute - path where to save the generated CAP file. Optional, see below for variables.
    • export attribtue - path (folder) where to place the JAR and generated EXP file. Optional.
    • jar attribute - path where to save the generated archive JAR file. Optional.
    • jca attribute - path where to save the generated JavaCard Assembly (JCA) file. Optional.
    • verify attribute - if set to false, disables verification of the resulting CAP file with offcardeverifier. Optional.
    • debug attribute - if set to true, generates debug CAP components. Optional.
    • strip attribute - if set to true, removes class files from target CAP. Optional.
    • ints attribute - if set to true, enables support for 32 bit int type. Optional.
  • applet tag - for creating an applet inside the CAP
    • class attribute - class of the Applet where install() method is defined. Required.
    • aid attribute - AID (hex) of the applet. Recommended - or set to package aid+i where i is index of the applet definition in the build.xml instruction
  • import tag - for linking against external components/libraries, like GPSystem or OPSystem
    • exps attribute - path to the folder keeping .exp files. Optional. Required if file in jar does not include .exp files.
    • jar attribute - path to the JAR file for compilation. Required if using sources mode and not necessary with classes mode if java code is already compiled

Notes:

  • jc.home property has the highest precedence, followed by jckit path of cap, followed by path in javacard, followed by JC_HOME environment variable. SDK must be valid to be considered for use.

Output file name variables

  • %h - 8 character prefix of the SHA-256 Load File Data Block hash of the CAP file
  • %H - SHA-256 Load File Data Block hash of the CAP file
  • %n - common name of the entity, either applet class or package
  • %p - package name
  • %a - package AID
  • %j - targeted JavaCard version

Maven dependency

Releases are published to https://javacard.pro/maven/. To use it, add this to your pom.xml:

<repositories>
    <repository>
        <id>javacard-pro</id>
        <url>https://javacard.pro/maven/</url>
    </repository>
</repositories>

Pushes to Maven Central happen manually and only for selected final versions.

License

Happy users

A random list of users, with a public link:

Contact

Similar projects

  • standard JavaCard SDK Ant tasks
    • :( as cumbersome to use as the command line utilities
    • :( not declarative/DWIM enough
    • :) very explicit interface with all details exposed
  • JavaCard Gradle plugin (MIT) - https://github.com/bertrandmartel/javacard-gradle-plugin
    • :) Wraps ant-javacard for use with Gradle
  • gradle-javacard (Apache 2.0) - https://github.com/fidesmo/gradle-javacard
    • :) nice declarative interface
    • :( requires gradle (40M download)
    • :( JavaCard 2.2.2 only
  • EclipseJCDE (Eclipse 1.0) - http://eclipse-jcde.sourceforge.net/
    • :( JavaCard 2.2.2 only
    • :( not possible to integrate in CI - depends on eclipse
    • :( essentially an Eclipse GUI wrapper for JC SDK
  • JCOP Tools
    • :( not open source
  • NetBeans IDE JC support
    • :( not possible to integrate into CI
    • :( JavaCard 3.0 only
    • :( Netbeans, not cross platform
  • Maven2 task from FedICT (LGPL3) - https://code.google.com/p/eid-quick-key-toolset
    • :( Maven downloads half the internet before even simple tasks
    • :( JavaCard 2.2.2 only
  • Ant script files with templates
    • :( XML is a very bad and verbose programming environment

More Repositories

1

GlobalPlatformPro

🌐 πŸ” Manage applets and keys on JavaCard-s like a pro (via command line or from your Java project)
Java
643
star
2

AppletPlayground

Playground for open source JavaCard applets! All work and no play makes Jack a dull boy.
Java
137
star
3

apdu4j

Java code for APDU level smart cards: javax.smartcardio, PC/SC and remote JSON
Java
111
star
4

oracle_javacard_sdks

Oracle JavaCard Classic SDK-s for using as a Git submodule for ant-javacard projects
HTML
96
star
5

vJCRE

Virtual Java Card Runtime Environment RETIRED
Java
50
star
6

osx-ccid-installer

Easy-to-use (graphical) open source CCID driver installer for OSX El Capitan (10.11) / macOS Sierra (10.12)
Makefile
40
star
7

FIDO2

FIDO2 toolbox in Java and X-FIDO JavaCard applet
Java
30
star
8

EstEID

Estonian eID tools and libraries in Java
Java
20
star
9

x509-webauth

Web Authentication with X509 smart cards
17
star
10

capfile

Small library for JavaCard CAP file parsing and verification - MOVED to https://github.com/martinpaljak/ant-javacard
Java
17
star
11

esteid.js

APDU interface of EstEID cards in JavaScript
JavaScript
16
star
12

python-esteid

Estonian ID-card ecosystem library and utility for: LDAP, verification, key conversion (SSH), OCSP, Mobile-ID
Python
15
star
13

MuscleApplet

RETIRED. Check out AppletPlayground
Shell
14
star
14

isikukood.ee

isikukood.ee public service
14
star
15

nfc4pc

NFC for Personal Computers
Java
14
star
16

esteid-applets

Various JavaCard applets conforming to EstEID chip protocol
Java
11
star
17

javacard-libraries

Collection of JavaCard libraries (JAR-files with classes and EXP files) for use with ant-javacard
9
star
18

yhiskaart

Tallinna Ühiskaardi / pilet.ee lahkamine
Python
8
star
19

authenticated-websocket

Authenticated WebSocket with Web eID, for NodeJS
7
star
20

Valedaator

Source code of Valedaator, the open source Android application.
Java
6
star
21

cdoc

Command line utility for encrypting and decrypting CDOC files (DigiDoc Crypto alternative)
Java
4
star
22

javacard-fido-applet

U2F/FIDO2 JavaCard applet
4
star
23

mobiil-idkaart

Mobile-ID + EstEID over NFC
4
star
24

cdoc4j

Java library for handling CDOC 1.0/1.1/2.0 files with AES-256 GCM and RSA or ECC
Java
3
star
25

NFC

Open websites on mobile phones with NFC - NDEF JavaCard applets
3
star
26

hwcrypto.js

JavaScript
3
star
27

BLN-1

JavaCard application for BoltCard lnurlw:// self-authenticating URL-s
2
star
28

fido2-javacard-applet

FIDO2/WebAuthn (and U2F) JavaCard applet
2
star
29

hello-javacard-world

"Hello, World!" for JavaCard
1
star
30

esteid-sk

Superseded by / incorporated into https://github.com/martinpaljak/EstEID
Java
1
star
31

MagicNFC

MagicNFC
1
star