Eclipse Keyple is an open source framework to facilitate the implementation of terminal processing operating smart card readers, and to defined advanced secure ticketing transaction.
The Keyple Core API provides a universal interface to manage smart card readers:
- The solution is able to handle any smart card reader solutions: standard (contacts/contactless PC/SC, NFC, OMAPI) or proprietary in a generic way.
- It’s also compatible with any terminal architecture: local or remote, for any kind of terminals: mobile, embedded or server. Remote smart card readers could be managed as local readers in a transparent way.
The Core API can be extended with command sets of specific smart card solutions in order to define advanced secure transactions. The project hosts a first extension to support the Calypso ticketing solution.
The Keyple Calypso API provides a high-level interface to implement fast and secure contactless ticketing transactions based on the Calypso standard.
- The settings of the Calypso cards & SAM APDU commands are automatically generated according to the functional operations defined by the developers.
- Cards & SAM commands are transmitted in an optimized grouping to limit network exchanges in case of distributed architecture.
Two implementations are currentely proposed for Java (dependency Java SE 6 and later, Android 4.4 or later) and for C++ (dependency C++ 11). Both implementations are based on the same oriented-object API.
- The components of Keyple Java are:
- 'Keyple Core': the generic interface to manage smart card reader solutions and select secure element.
- 'Calypso Extension': the library to define transaction with Calypso card.
- 'stub plugin': a tool to emulate readers and cards to operate Keyple without hardware elemnts.
- 'PC/SC plugin': the library to interface PC/SC readers to the Keyple Core.
- 'Android NFC plugin': the library to interface the native NFC contactless readers on Android device.
- 'OMAPI plugin': the library to interface the OMAPI contacts readers on Android device.
- 'Distributed module': a specific plugin solution to operate remote readers as localy.
- The components of Keyple C++ are:
- The Keyple Cpp is currently limited to support of the 'Calypso Core', the 'Calypso Extension', the 'stub plugin', and the ‘PC/SC plugin' (based on the same API as for Java compnents). The 'Distributed module' client will be added in the version 2.0.0.
initial public java implementation
Main unsolved issue: the versioning of the different components (Core, Calypso extension, and specific plugins) is still linked: to manage transitive importation the artifact are build with the same version reference.
Java implementation status:
For the Java implementation of Eclipse Keyple, the last official release is the version 1.0.0, all the source of all the components is hosted in a single repository: https://github.com/eclipse/keyple-java .
Begining of July 2021, the release candidate 2.0.0 of all the Java modules has been published. The release final 2.0.0 of all the Keyple Java components is planned first week of September 2021: for that it remains to finalize all the guides and the support website keyple.org .
Compare to the version 1.0, no major functional feature has been added in version 2.0:
- The code has been widely reorganized in order to split the independent modules in separated repositories, moreover the interfaces have been separated from the libraries. This new organization allow to stabilize the APIs and to manage the next feature extensions independently without impacting the other components.
- Further, the solution follows the high-level interfaces standardized for Calypso terminals (Reader API, Card API, & Calypso API): this will allow the solution to be certified in the future as compliant with the Calypso terminal requirements (for the reader & Calypso layers).
- Finally, the new Plugin SPI allows to develop dedicated plugins for reader solutions in a much easier way than before, requiring only the knowledge of this single interface.
The previous unique repository eclipse/keyple-java will be archived in release 1.0. The new Java repositories are registered on https://keyple.org/repositories-dashboard/ :
- 3 links to Calypso terminal API repositories
- and 16 repositories hosting the API and libraries of Eclipse Keyple Java.
- The main Keyple Core module with the service API and some generic examples is hosted in eclipse/keyple-service-java-lib.
- The Calypso extension eclipse/keyple-card-calypso-java-lib contains some advanced Calypso examples.
- The plugin SPI is available in eclipse/keyple-plugin-java-api . Each plugin repository provides dedicated examples involving specifically the plugin (PC/SC, Android NFC, Android OMAPI).
The version 2.0.0 provides a better stability by supporting separate life cycle and different versioning for the Keyple components. So, for new Java projects, we advise to adopt the candidate 2.0.0.
After the release 2.0.0, we plan to complete the Calypso extension component with additional functionalities:
- pre-personalization transaction (Change Key)
- signature of data fields (SAM PSO commands)
- confidential secure session (REV3.2 AES mode)
- asymetric authentication (REV3.3 PKI mode)
- REV1/REV2 product specific supports
- Hoplink high-level API
C++ implementation status:
For the C++ implementation of Eclipse Keyple, the last official release is the version 0.9.0, all the source for all the components is hosted in a single repository: https://github.com/eclipse/keyple-cpp (this repository will be archived).
The availability of the release candidate 2.0.0 is planned for September with new dedicated repositories.