Installation
JMRTD (the host side API) is Java software and has been known to run on Windows, Linux, Mac OS X, and Android.
Use Maven Central for the current version of the host side API.
Source code
Developers can check out the source code from JMRTD's and SCUBA's SVN repositories.
Hardware
JMRTD requires a (contactless) PC/SC smart card reader, or, on Android, a 2.3 or better device with NFC capability. JMRTD was tested with:
- SCM Microsystems SDI010 dual interface reader.
-
OmniKey
CardMan 5121 RFID
dual interface reader.
- Linux on i386: using PCSC-lite drivers provided by manufacturer, version 1.2.0. Version 1.5.0 of the driver caused some problems. Version 2.6.0 probably works fine too.
- Linux on x86_64: using PCSC-lite drivers provided by manufacturer, version 2.6.0. Works fine.
- Windows XP: using latest drivers provided by manufacturer.
-
OmniKey
CardMan 5321 RFID
dual interface reader.
- Windows XP: using latest drivers provided by manufacturer.
-
ACS
ACR122U NFC reader.
(Also available as touchatag reader.)
- Linux: using Java wrapper around CCID driver in PCSC-lite. Highly experimental, code for wrapper is written by Wojciech, available in SVN. Tested by Wojciech.
- Windows XP: using (the same) Java wrapper around manufacturer supplied driver. Highly experimental.
-
ACS
ACR120U
- Windows XP: using Java wrapper around manufactuer supplied JNI wrapper around manufacturer supplied Windows-only driver. Is extremely slow.
- Android NFC capable devices such as Google/Samsung Nexus S and Nexus 7. HTC One X has been reported to work.
If you manage to get things working with other hardware, please let us know.
Dependencies
You may need to first install the following:
- Java runtime 1.6
- PCSC-Lite: a PC/SC stack for Linux and other Unices. (Windows XP has built-in PC/SC support, so no need to download this, but you may need to start the "smart card service" explicitly.)
- SCUBA is our abstraction layer on top of Java smartcard I/O.
- A JCE crypto provider (we use the Legion of the Bouncy Castle provider ourselves).
- Bouncy Castle is needed anyway, since we use classes from this package to decode ASN.1/BER/DER encoded representations of data on the passport. Download the provider jar and place it somewhere in the classpath.
- Handling of CV certificates in the host API is done using EJBCA's cert-cvc library.
- JJ2000 (or JAI ImageIO): for interpreting JPEG 2000 data (the facial image is possibly stored in this format).
- If you want to play around with the applet using a simulator:
- ApduIO (part of the Java Card Development Kit, see below): for communication with CREF.
- JCOP offcard API (part of the JCOP toolset, see below): for communicating with the JCOP simulator.
The JMRTD and SCUBA jar files can be placed anywhere in the class path.
Passport Applet
- If you have a hardware Java Card: Use the development kit that comes with your Java Card hardware to generate a CAP file and upload it to your card.
- Sun's Java Card Development Kit contains a Java Card simulator (the "CREF reference implementation") which is supported.
- IBM's JCOP toolset (available as an Eclipse plugin) also contains a simulator for different JCOP cards which is supported.
Functionality to personalize the passport applet after it is uploaded to the card is provided in the passport host API.