Interoperability & compliance of Keyple-based ticketing terminal solutions

In order to guarantee interoperability between smart cards and terminals, the ‘Calypso Networks Association’ (CNA) encourages ticketing operators to follow various specifications and certification processes.

Contactless reader communication protocol

For compliance with the contactless reader communication protocol, CNA supports the certification programme standardised by the ‘Smart Ticketing Alliance’ (STA) for ‘Public Transport Readers’ (PT Readers). Several test laboratories are approved for ‘Proximity Coupling Device’ (PCD) certification under the supervision of the ‘Certification Body’ Paycert.

Separation and functional logic of the various software layers

To guarantee the functional capability of the ticketing terminals, CNA has proposed a software architecture with a distribution of responsibilities per layer, and has defined dedicated functional requirements for each software layer.

Variations of Keyple libraries sets

Different sets of Keyple libraries are available depending on the programming language: Java or C++.

For the reader and Calypso software layers, Keyple maintenance is performed for the last two generations of libraries:

  • the nominal branch (the most recent) based on Eclipse Keypop terminal APIs, for which upgrades and fixes are actively produced: Service & Calypso Card Keyple libraries with a major version number greater than or equal to 3.0.0.
  • and the legacy branch based on CNA terminal APIs, for which only patches continue to be supplied: Service & Calypso Card Keyple libraries with a major version number between 2.0.0 and 3.0.0 (Keyple libraries prior to 2.0.0 are archived).

Further, Keyple’s Calypso libraries’ features have also been regularly enhanced: first Prime Regular, then Extended and PKI. Command injection countermeasures have also moved from a permissive to a stricter implementation.

Reader software layer

For terminals integrating contactless and/or contact readers, the Keyple’s ‘Core’ libraries have been designed to meet the terminal requirements for the reader layer.

  • In order to declare that a configuration of Keyple Core libraries and a smart card reader plugin are indeed compliant with the terminal requirements for the reader layer, the main condition is that the plugin used to interface the reader has been implemented according to the Keyple plugin development guide.

The Keyple project hosts plugins for interfacing reader solutions based on standardized APIs: PC/SC and Android NFC. Pending the future certification programme for reader layer libraries, CNA plans to publish the self-declarations of conformity of the Keyple Core libraries for reader solutions interfaced with these plugins:

Properties of PC/SC and NFC reader solutions

ApplicabilityGeneric feature support for
PC/SC readersAndroid NFC readers
Contact
  • yes, for PC/SC readers with a contact interface (both ISO 7816-3 T=0 & T=1 protocols are supported)
  • no, otherwise
no
Contactless
  • yes, for PC/SC readers with a contactless interface (at least both ISO 14443-4 type A & B protocols are supported)
  • no, otherwise
yes
Detectionyesyes
Channelsnot yet supportedno
Extendednono
Pollingno
(some PC/SC reader solutions may provide configurable RF polling, but this setting is then managed through specific APIs that are not part of the PC/SC standard)
no
Presenceyesno
Protocolyes, all contactless readers support both ISO 14443 type A & B (optional proprietary protocols can be supported in addition to ISO 14443-4)yes, all NFC readers support both ISO 14443 type A & B (& additional proprietary mode ISO 14443-3A / JIS 6319-4, etc...)
Selectionyes
(with a limitation for 'legacy' library sets, the DF Name selection API was managed at the Calypso software layer, instead of the reader software layer)
yes
(with a limitation for 'legacy' library sets, the DF Name selection API was managed at the Calypso software layer, instead of the reader software layer)
Shut-off RFno
(some PC/SC reader solutions may feature configurable RF field shut-off, but this setting is then managed through specific APIs that are not part of the PC/SC standard)
no

Terminal requirements support declarations

For “contactless” readers, the ‘RL-CL-RFSTA.2’ rule defines the need for the product’s RF properties to be certified according to the scheme defined by the STA. This RF certification of a smart card reader is under the manufacturer’s responsibility.

  • All NFC readers are “self-declared” by NFC reader manufacturers as compliant with the NFC Forum. This NFC declaration is recognized by the STA and thus implicitly considered as compliant with STA certification.
  • Most of PC/SC contactless readers are by default not STA-certified.

For reader solutions with the ‘Selection’ applicability, rules regulate “DF Name” processing.

  • For legacy library sets, these rules are respected, but the API used to set the DF Name to be selected was then accessed at the Calypso layer, instead of the reader layer.
  • Nominal versions of library sets correctly handle DF Name settings at the reader layer.

Except for RF certification and ‘DF Name’ selection rules, all other terminal requirements defined by CNA for the reader layer, applicable according to the properties of the PC/SC or NFC reader solutions, are fully supported by default.

All other reader layer requirements are fully supported if the reader plugin is developed in accordance with the development guide.

‘Keyple Java Service sets’ definitions for PC/SC & Android NFC plugins (still updated)

Generic Product Identification
Set NameKeyple Java Service + specific plugin set
Set Version2023/11/28 or after
Library Versions
  • keypop-card-java-api (internal API) : 2.0+
  • keypop-reader-java-api (public API): 2.0+

  • keyple-common-java-api (internal API): 2.0+
  • keyple-plugin-java-api (internal API): 2.2 to 2.3+
  • keyple-service-java-lib: 3.0.0 to 3.3.5+
  • keyple-util-java-lib: 2.3.0 to 2.4.0+
library of a reader plugin implementing the Keyple Plugin API
Specific Product Identification
Set NameKeyple Java Service with PC/SC plugin setKeyple Java Service with Android NFC plugin set
Set Version2023/11/28 or after
Specific Plugin Library Version
(in addition of Keyple Java Service libraries
  • keyple-plugin-pcsc-java-lib: 2.0.0 to 2.4.2+
  • keyple-plugin-android-nfc-java-lib: 2.0.0 to 3.0.0+
Product Compatibility
Smart Card
Solution Layer
Any smart card solution library based on:
  • keypop-card-java-api (internal API): 2.0+
Ticketing LayerAny ticketing application based on:
  • keypop-reader-java-api (public API): 2.0+

‘Keyple Legacy Java Service sets’ definitions for PC/SC & Android NFC plugins (still fixed)

Generic Product Identification
Set NameKeyple Legacy Java Service + specific plugin set
Set Version2021/10/06 or after
Library Versions
  • calypsonet-terminal-reader-java-api (public API): 1.0 to 1.3
  • calypsonet-terminal-card-java-api (internal API): 1.0

  • keyple-plugin-java-api (internal API): 2.0 to 2.3
  • keyple-common-java-api (internal API): 2.0
  • keyple-service-java-lib: 2.0.0 to 2.3.6+ (<3.0.0)
  • keyple-util-java-lib: 2.0.0 to 2.3.1
library of a reader plugin implementing the Keyple Plugin API
Specific Product Identification
Set NameKeyple Legacy Java Service with PC/SC plugin setKeyple Legacy Java Service with Android NFC plugin set
Set Version2022/10/26 or after
Specific Plugin Library Version
(in addition of Keyple Java Service libraries
  • keyple-plugin-pcsc-java-lib: 2.0.0 to 2.4.2+
  • keyple-plugin-android-nfc-java-lib: 2.0.0 to 3.0.0+
Product Compatibility
Smart Card
Solution Layer
Any smart card solution library based on:
  • calypsonet-terminal-card-java-api (internal API): 1.0
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-java-api (public API): 1.0 to 1.3

‘Keyple Legacy C++ Service set’ definition for PC/SC plugin (still fixed)

Generic Product Identification
Set NameKeyple Legacy C++ Service + specific plugin set
Set Version2022/07/06 or after
Library Versions
  • calypsonet-terminal-reader-cpp-api (public API): 1.0 to 1.1
  • calypsonet-terminal-card-cpp-api (internal API): 1.0

  • keyple-plugin-cpp-api (internal API): 2.0
  • keyple-common-cpp-api (internal API): 2.0
  • keyple-service-cpp-lib: 2.0.1 to 2.1.1.1+ (<2.2)
  • keyple-util-cpp-lib: 2.0.0 to 2.3.0.4
library of a reader plugin implementing the Keyple Plugin API
Specific Product Identification
Set NameKeyple C++ Service with PC/SC plugin set
Set Version2022/10/26 or after
Specific Plugin Library Version
(in addition of Keyple Java Service libraries
  • keyple-plugin-pcsc-cpp-lib: 2.0.0 to 2.1.0.1+
Product Compatibility
Smart Card
Solution Layer
Any smart card solution library based on:
  • calypsonet-terminal-card-cpp-api (internal API): 1.0
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-cpp-api (public API): 1.0 to 1.1

Calypso software layer

The Keyple’s ‘Calypso’ libraries have also been implemented to meet the terminal requirements for the Calypso layer, regardless of the reader solutions used. 2 conditions must be met to guarantee « complete » compliance with the requirements of the Calypso layer:

Pending the future certification programme for Calypso layer libraries, CNA has published the self-declarations of conformity of the Keyple Calypso libraries (independently of interfaced reader solutions, but on the basis of a compliant reader software layer):

Terminal requirements support declarations

For the various Keyple Calypso library sets, all applicabilities and terminal requirements are supported, except for those listed in the table below.

  • For requirements for which support is conditional on the availability of specific features, support has been integrated at the same time as the addition of the corresponding feature.
  • Prior to the integration of Eclipse Keypop, Keyple libraries were based on terminal APIs implemented and published by CNA: the Keyple libraries sets corresponding to these old configurations contain the word “legacy” in their name.

For older configurations, the ‘CL-CSS-RESPLE.1’ requirement, the countermeasure was initially implemented in a ‘permissive’ way, requiring applications to set only card commands for which the response size can be predetermined. More recent configurations benefit from a more ‘strict’ implementation of the countermeasure, which is compliant regardless of the processing set at application level as indicated in the Calypso development guide.

The lack of official support for the “HCE” functionality and the related ‘CL-SEL-SNHEADER.2’ requirement is not a limitation to correctly processing Calypso HCE solutions, as the HCE token data can still be recovered as described in the Calypso development guide.

About the ‘CL-PERF-HFLOW.1’ requirement, the Keyple Calypso libraries have been designed to optimize card & SAM command exchanges with the best possible performance, depending on the terminal architecture:

  • for an embedded architecture (saving latencies of between 1 and 10 milliseconds on transmissions with local readers),
  • for a distributed architecture (saving latencies of between 10 and 100 milliseconds on network exchanges with remote readers).

Concerning the ‘CL-CMD-GETPUT.1’ requirement, the “Get/Put Data” applicability support is limited to the management of the ‘Get Data’ command. The optional ‘Put Data’ command is not supported.

Keyple Calypso layer librariesActive maintenanceLimitationUnsupported
JavaC++Calypso card applicabilityRequirement
Calypso Prime PKI set 2evolutionevolution-
  • HCE
  • CL-SEL-SNHEADER.2
Calypso Prime PKI setno-permissive CL-CSS-RESPLE.1
Legacy Calypso Prime Extended set 2patch--
  • Prime PKI
  • HCE
  • CL-SEL-SNHEADER.2
  • CL-RAT-PKIMODE.2
  • CL-SV-PKIMODE.1
  • CL-PKI-ALGO.1
  • CL-PKI-VERIF.2
  • CL-PKI-PUBKEY.1
  • CL-PKI-RQMODE.1
Calypso Prime Extended setno-permissive CL-CSS-RESPLE.1
Legacy Calypso Prime Extended setno-
Legacy Calypso Prime Regular set 2-patch-
  • Prime PKI
  • Prime Extended
  • HCE
  • CL-SEL-SNHEADER.2
  • CL-RAT-PKIMODE.2
  • CL-SV-PKIMODE.1
  • CL-PKI-ALGO.1
  • CL-PKI-VERIF.2
  • CL-PKI-PUBKEY.1
  • CL-PKI-RQMODE.1
Legacy Calypso Prime Regular setnonopermissive CL-CSS-RESPLE.1

‘Keyple Java Calypso Prime PKI set 2’ definition (still updated)

Product Identification
Set NameKeyple Java Calypso Prime PKI set 2
Set Version2025/04/11 or after
Library Versions
  • keypop-calypso-card-java-api (public API): 2.1+
  • keypop-calypso-crypto-legacysam-java-api (public API) : 0.7+
  • keypop-calypso-crypto-symmetric-java-api (internal API): 0.1+
  • keypop-calypso-crypto-asymmetric-java-api (internal API): 0.2+

  • keyple-card-calypso-java-lib: 3.1.8+
  • keyple-card-calypso-crypto-legacysam-java-lib: 0.9.0+
  • keyple-card-calypso-crypto-pki-java-lib: 0.2.1+
Product Compatibility
Reader LayerKeyple Core Java set:
  • keypop-reader-java-api (public API): 2.0+
  • keypop-card-java-api (internal API): 2.0+

  • keyple-plugin-java-api (internal API): 2.2 to 2.3+
  • keyple-common-java-api (internal API): 2.0+
  • keyple-service-java-lib: 3.0.0 to 3.2.3+
  • keyple-util-java-lib: 2.4.0+
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • keypop-reader-java-api (public API): 2.0+
  • keypop-calypso-card-java-api (public API): 2.1+
  • keypop-calypso-crypto-legacysam-java-api (public API) : 0.7+

‘Keyple Java Calypso Prime PKI set’ definition

Product Identification
Set NameKeyple Java Calypso Prime PKI set
Set Version2024/04/17 to 2025/04/10
Library Versions
  • keypop-calypso-card-java-api (public API): 2.1
  • keypop-calypso-crypto-legacysam-java-api (public API) : 0.5 to 0.6
  • keypop-calypso-crypto-symmetric-java-api (internal API): 0.1
  • keypop-calypso-crypto-asymmetric-java-api (internal API): 0.2

  • keyple-card-calypso-java-lib: 3.1.1 to 3.1.7
  • keyple-card-calypso-crypto-legacysam-java-lib: 0.6.0 to 0.9.0
  • keyple-card-calypso-crypto-pki-java-lib: 0.2.0 to 0.2.1
Product Compatibility
Reader LayerKeyple Core Java set:
  • keypop-reader-java-api (public API): 2.0
  • keypop-card-java-api (internal API): 2.0

  • keyple-plugin-java-api (internal API): 2.2 to 2.3
  • keyple-common-java-api (internal API): 2.0
  • keyple-service-java-lib: 3.0.0 to 3.3.5
  • keyple-util-java-lib: 2.3.0 to 2.4.0
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • keypop-reader-java-api (public API): 2.0
  • keypop-calypso-card-java-api (public API): 2.1
  • keypop-calypso-crypto-legacysam-java-api (public API) : 0.5 to 0.7

‘Keyple Java Calypso Prime Extended set’ definition

Product Identification
Set NameKeyple Java Calypso Prime Extended set
Set Version2023/11/28 to 2024/04/16
Library Versions
  • keypop-calypso-card-java-api (public API): 2.0 to 2.1
  • keypop-calypso-crypto-legacysam-java-api (public API) : 0.3 to 0.6
  • keypop-calypso-crypto-symmetric-java-api (internal API): 0.1

  • keyple-card-calypso-java-lib: 3.0.0 to 3.1.2
  • keyple-card-calypso-crypto-legacysam-java-lib: 0.4.0 to 0.7.1
Product Compatibility
Reader LayerKeyple Core Java set:
  • keypop-reader-java-api (public API): 2.0
  • keypop-card-java-api (internal API): 2.0

  • keyple-plugin-java-api (internal API): 2.2 to 2.3
  • keyple-common-java-api (internal API): 2.0
  • keyple-service-java-lib: 3.0.0 to 3.2.3
  • keyple-util-java-lib: 2.3.0 to 2.4.0
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • keypop-reader-java-api (public API): 2.0
  • keypop-calypso-card-java-api (public API): 2.0 to 2.1
  • keypop-calypso-crypto-legacysam-java-api (public API) : 0.3 to 0.6

‘Keyple Legacy Java Calypso Prime Extended set 2’ definition (still fixed)

Product Identification
Set NameKeyple Legacy Java Calypso Prime Extended set 2
Set Version2025/04/11 or after
Library Versions
  • calypsonet-terminal-calypso-java-api (public API): 1.8
  • calypsonet-terminal-calypso-crypto-legacysam-java-api (public API): 0.2

  • keyple-card-calypso-java-lib: 2.3.15+ (<3.0.0)
  • keyple-card-calypso-crypto-legacysam-java-lib: 0.3.0
Product Compatibility
Reader LayerKeyple Core Java set:
  • calypsonet-terminal-reader-java-api (public API): 1.2 to 1.3
  • calypsonet-terminal-card-java-api (internal API): 1.0

  • keyple-plugin-java-api (internal API): 2.1 to 2.3
  • keyple-common-java-api (internal API): 2.0
  • keyple-service-java-lib: 2.2.0 to 2.3.6+ (<3.0.0)
  • keyple-util-java-lib: 2.3.0 to 2.3.1
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-java-api (public API): 1.2 to 1.3
  • calypsonet-terminal-calypso-java-api (public API): 1.8
  • calypsonet-terminal-calypso-crypto-legacysam-java-api (public API) : 0.2

‘Keyple Legacy Java Calypso Prime Extended set’ definition

Product Identification
Set NameKeyple Legacy Java Calypso Prime Extended set
Set Version2022/12/22 to 2023/11/27
Library Versions
  • calypsonet-terminal-calypso-java-api (public API): 1.5 to 1.8
  • calypsonet-terminal-calypso-crypto-legacysam-java-api (public API): 0.1 to 0.2

  • keyple-card-calypso-java-lib: 2.3.1 to 2.3.14
  • keyple-card-calypso-crypto-legacysam-java-lib: 0.1.0 to 0.3.0
Product Compatibility
Reader LayerKeyple Core Java set:
  • calypsonet-terminal-reader-java-api (public API): 1.0 to 1.3
  • calypsonet-terminal-card-java-api (internal API): 1.0

  • keyple-plugin-java-api (internal API): 2.0 to 2.3
  • keyple-common-java-api (internal API): 2.0
  • keyple-service-java-lib: 2.1.1 to 2.3.6
  • keyple-util-java-lib: 2.3.0 to 2.3.1
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-java-api (public API): 1.0 to 1.3
  • calypsonet-terminal-calypso-java-api (public API): 1.5 to 1.8
  • calypsonet-terminal-calypso-crypto-legacysam-java-api (public API) : 0.1 to 0.2

‘Keyple Legacy Java Calypso Prime Regular set’ definition

Product Identification
Set NameKeyple Legacy Java Calypso Prime Regular set
Set Version2022/02/01 to 2022/12/22
Library Versions
  • calypsonet-terminal-calypso-java-api (public API): 1.1 to 1.4
  • calypsonet-terminal-calypso-crypto-legacysam-java-api (public API): 0.1

  • keyple-card-calypso-java-lib: 2.1.0 to 2.3.0
  • keyple-card-calypso-crypto-legacysam-java-lib: 0.0.0 to 0.2.0
Product Compatibility
Reader LayerKeyple Core Java set:
  • calypsonet-terminal-reader-java-api (public API): 1.0 to 1.3
  • calypsonet-terminal-card-java-api (internal API): 1.0

  • keyple-plugin-java-api (internal API): 2.0 to 2.3
  • keyple-common-java-api (internal API): 2.0
  • keyple-service-java-lib: 2.1.1 to 2.3.5+ (<3.0.0)
  • keyple-util-java-lib: 2.3.0 to 2.3.1
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-java-api (public API): 1.0 to 1.1
  • calypsonet-terminal-calypso-java-api (public API): 1.1 to 1.4
  • calypsonet-terminal-calypso-crypto-legacysam-java-api (public API) : 0.1

‘Keyple Legacy C++ Calypso Prime Regular set 2’ definition (still fixed)

Product Identification
Set NameKeyple Legacy C++ Calypso Prime Regular set 2
Set Version2025/04/17 or after
Library Versions
  • calypsonet-terminal-calypso-cpp-api (public API): 1.4

  • keyple-card-calypso-cpp-lib: 2.2.5.5+ (<2.2.6.0)
Product Compatibility
Reader LayerKeyple Core Java set:
  • calypsonet-terminal-reader-cpp-api (public API): 1.0 to 1.1
  • calypsonet-terminal-card-cpp-api (internal API): 1.0

  • keyple-plugin-cpp-api (internal API): 2.0
  • keyple-common-cpp-api (internal API): 2.0
  • keyple-service-cpp-lib: 2.0.1.0 to 2.1.1.1+ (<2.2.0.0)
  • keyple-util-cpp-lib: 2.3.0.0 to 2.3.0.4
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-cpp-api (public API): 1.0 to 1.1
  • calypsonet-terminal-calypso-cpp-api (public API): 1.4

‘Keyple Legacy C++ Calypso Prime Regular set’ definition

Product Identification
Set NameKeyple Legacy C++ Calypso Prime Regular set
Set Version2022/07/06 to 2025/04/17
Library Versions
  • calypsonet-terminal-calypso-cpp-api (public API): 1.0 to 1.4

  • keyple-card-calypso-cpp-lib: 2.1.0 to 2.2.5.4
Product Compatibility
Reader LayerKeyple Core Java set:
  • calypsonet-terminal-reader-cpp-api (public API): 1.0 to 1.1
  • calypsonet-terminal-card-cpp-api (internal API): 1.0

  • keyple-plugin-cpp-api (internal API): 2.0
  • keyple-common-cpp-api (internal API): 2.0
  • keyple-service-cpp-lib: 2.0.1 to 2.1.1.1
  • keyple-util-cpp-lib: 2.0.0 to 2.3.0.4
Integrated with reader plugin implementing the Keyple Plugin API.
Ticketing LayerAny ticketing application based on:
  • calypsonet-terminal-reader-cpp-api (public API): 1.0 to 1.1
  • calypsonet-terminal-calypso-cpp-api (public API): 1.0 to 1.4

Ticketing software layer

For a ticketing terminal solution built on the Keyple framework, the responsibility for complying with the requirements for the ticketing software layer lies exclusively with the developers of the terminal application using the ‘public’ Reader & Calypso terminal APIs.