Link and Contact
Website |
Support |
Copyright © Calypso Networks Association, https://calypsonet.org.
This specification is licensed under the Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0).
You are free to share — copy and redistribute this document in any medium or format for any purpose, even commercially — under the following terms:
-
Attribution — You MUST give appropriate credit to the Calypso Networks Association, provide a link to the license, and indicate if changes were made. You MAY do so in any reasonable manner, but not in any way that suggests the Calypso Networks Association endorses you or your use.
-
NoDerivatives — If you remix, transform, or build upon this document, you MAY NOT distribute the modified material.
No additional restrictions — You MAY NOT apply legal terms or technological measures that legally restrict others from doing anything the license permits.
Implementation grant — The NoDerivatives condition above applies to this specification document only — its text, tables and diagrams. It does not restrict the use of the technical information the document contains. The Calypso Networks Association hereby grants everyone an irrevocable, worldwide, royalty-free permission to use the information contained in this specification to design, develop, and distribute software implementations of this API, in any programming language, under the license of their choice.
The full license text is available at https://creativecommons.org/licenses/by-nd/4.0/.
1. Abstract
This document is the official technical specification of the Terminal Calypso Crypto Symmetric API standardised by the Calypso Networks Association (CNA). It defines, in a language-agnostic way, the interfaces, classes, enumerations, exceptions, structural relationships and behavioural requirements that any conforming implementation of the Terminal Calypso Crypto Symmetric API MUST satisfy.
The Terminal Calypso Crypto Symmetric API is part of the broader CNA Terminal API family. It is the SPI through which the Terminal Calypso Card API delegates every symmetric-key cryptographic operation required to operate Calypso secure sessions, SV commands, PIN ciphering and key loading.
Document Status
Reference |
YYMMDD-SP-CNATerminalAPI-CalypsoCryptoSymmetric |
|---|---|
Short name |
CNA-TCCS-API |
Version |
0.1.2-SNAPSHOT |
Revision date |
2026-07-20 |
Editor |
Calypso Networks Association |
Source repository |
https://github.com/calypsonet/calypsonet-terminal-calypso-crypto-symmetric-uml-api |
Reference license |
Creative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) |
| The present document specifies the 0.1.2-SNAPSHOT of the Terminal Calypso Crypto Symmetric API. It defines a single, coherent baseline against which conforming implementations are evaluated; the Since column indicates the version in which each member was introduced. |
Revision List
|
This section lists the high-level changes per version. The complete, fine-grained
changelog is maintained in the |
| Version / Date | Modifications |
|---|---|
v0.1.2-SNAPSHOT |
Baseline. |
2. Introduction
2.1. Purpose
The Terminal Calypso Crypto Symmetric API defines the contract that a symmetric-key crypto module MUST expose so that a Calypso transaction manager can delegate the cryptographic computations required by a Calypso card. The module is typically backed by a SAM (Secure Application Module) but the API is intentionally agnostic to the underlying implementation: any component capable of producing the required MACs, signatures and ciphered blocks MUST be acceptable.
The contract covers:
-
the lifecycle of a Calypso secure session (initialisation, digest update, finalisation, mutual authentication),
-
the encryption/decryption of session data,
-
the computation of the security data exchanged during Stored Value (SV) operations,
-
the ciphering of PIN values for presentation or modification,
-
the generation of ciphered key blocks for card key loading.
2.2. Scope
This specification covers:
-
the factory used by the upstream layer to instantiate a transaction-manager SPI,
-
the transaction-manager SPI exposing the cryptographic primitives,
-
the data container used to carry SV security data,
-
the exceptions raised by the SPI.
The following topics are out of scope:
-
the wire-level dialog between the terminal and any underlying SAM,
-
the management of key material,
-
the cryptographic algorithms themselves — only the input/output contract is normative.
2.3. Conformance
A software product conforms to this specification if and only if:
-
it implements every interface and class defined in Chapter 5 with the operations and semantics prescribed in this document,
-
it raises exceptions exclusively of the types defined in Section 5.4 for the situations described,
-
it preserves the structural relationships described in Chapter 4.
Throughout this specification, the key words MUST, MUST NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY and OPTIONAL are to be interpreted as described in RFC 2119 and RFC 8174 when, and only when, they appear in all capitals.
In conformance with RFC 2119, SHALL is equivalent to MUST; this specification uses MUST exclusively in order to avoid ambiguity.
2.4. Document Conventions
2.4.1. Naming
Type names follow UpperCamelCase; operation, parameter and enumeration-member names follow lowerCamelCase.
SPI types are suffixed with Spi. Names defined by this specification are reproduced as-is in the UML class
diagram (Section 4.3), which provides a visual representation of the specification.
2.4.2. Language-agnostic types
| Symbolic type | Description | Typical bindings |
|---|---|---|
|
Sequence of characters, UTF-8 encoded by default. |
|
|
Two-state truth value. |
|
|
Signed 8-bit value. |
|
|
Signed 32-bit integer. |
|
|
Ordered sequence of octets. |
|
|
Ordered collection of |
|
|
Indicates that an operation returns no value. |
|
2.4.3. Type tables
Each interface, class, enumeration and exception defined in this document is described by a table of the form:
Name |
The type’s normalized name. |
|---|---|
Kind |
The category of the type (interface, class, enumeration, exception, etc.). |
Namespace |
The namespace in which the type is defined. |
Extends |
The type extended by this type, when applicable. |
Implements |
The interface implemented by this type, when applicable. |
Since |
The version of the API in which the type was introduced. |
Purpose |
A normative description of the type’s responsibility. |
See also |
Cross-references to related operations or types, each a hyperlink to the corresponding table. Present only when applicable. |
The Purpose row states, in one or two sentences, the responsibility of the type and the way an instance is obtained. It is meant to be scanned, not read: any content that requires structure or depth — rules, lists, notes, value tables or examples — is placed as prose below the table.
2.4.4. Operation tables
Each operation defined in this document is described by a table of the form:
Signature |
The operation’s language-agnostic signature. |
|---|---|
Since |
The version of the API in which the operation was introduced. |
Description |
A normative description of the operation’s behaviour. |
Parameters |
A description of each input parameter. |
Returns |
A description of the returned value, if any. |
Throws |
A list of exceptional conditions, each mapped to a specific exception type. |
See also |
Cross-references to related operations or types, each a hyperlink to the corresponding table. Present only when applicable. |
2.4.5. Operation contracts
To avoid repetition, the following rules apply to every operation table in Chapter 5 and are therefore not restated for each operation:
-
Non-
nullarguments. Unless explicitly stated otherwise, every input parameter MUST be non-null. An implementation MUST raiseIllegalArgumentExceptionif anullvalue is supplied. This implicitnullcheck is not repeated in the Throws row, which statesNone.when no other exception can occur. -
Non-
nullresults. Unless the return type is marked nullable (T?) or the Returns row states otherwise, an operation returns a non-nullvalue. -
Collections. Unless the return type is marked nullable (
T?), an operation whose return type is a collection (e.g.list,set,map) returns an empty collection rather thannull. -
Fluent composition. Builder-style operations return the current instance so that calls can be chained.
2.4.6. Concurrency
Unless explicitly stated otherwise, the stateful types defined by this specification are not thread-safe. A given instance MUST be accessed from a single thread at a time; concurrent use of the same instance without external synchronisation results in undefined behaviour. Distinct instances MAY be used concurrently.
2.5. References and Resources
2.5.1. Calypso References
References to CNA Terminal APIs designate the indicated major version; any later release within the same major is backward-compatible per that API’s evolution policy.
| Reference | Document |
|---|---|
CNA Terminal API — Calypso Card (SP-CNATerminalAPI-CalypsoCard), version 3.0, Calypso Networks Association. |
2.5.2. Normative References
| Reference | Document |
|---|---|
Key words for use in RFCs to Indicate Requirement Levels, S. Bradner, March 1997. |
|
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words, B. Leiba, May 2017. |
2.5.3. External Resources
| Resource | Link |
|---|---|
Calypso Networks Association |
|
Terminal APIs website |
|
Terminal APIs documentation |
3. Glossary and Acronyms
3.1. Glossary
| Term | Definition |
|---|---|
Crypto Module |
Component capable of performing the cryptographic operations described by this specification. Typically backed by a SAM but not required to be. |
Extended Mode |
Operating mode that supports Calypso Prime Extended products capabilities (such as APDU encryption/decryption, pre-open secure session, longer cryptographic data, etc.). |
Secure Session |
Calypso authenticated and integrity-protected exchange between the terminal and the card. |
Session MAC |
Message Authentication Code computed over the data exchanged during a Calypso secure session. |
SV Command |
Stored Value command (Load, Debit, Undebit) operating on a Calypso card. |
SV MAC |
Message Authentication Code protecting an SV command exchange. |
SPI |
Service Provider Interface — an interface designed to be implemented by an extension module. |
3.2. Acronyms
| Abbreviation | Expansion |
|---|---|
APDU |
Application Protocol Data Unit |
CNA |
Calypso Networks Association |
KIF |
Key Identifier |
KVC |
Key Version Code |
MAC |
Message Authentication Code |
PIN |
Personal Identification Number |
SAM |
Secure Application Module |
SPI |
Service Provider Interface |
SV |
Stored Value |
UML |
Unified Modelling Language |
4. Architectural Overview
4.1. Functional positioning
4.2. Logical namespaces
| Namespace | Role | Summary |
|---|---|---|
|
Public API |
Properties, data carrier and exceptions consumed by both sides of the SPI. |
|
SPI |
Interfaces implemented by the symmetric crypto module. |
4.3. UML class diagram
The following UML class diagram provides a visual representation of the types and relationships defined by this specification:
5. API Specification
5.1. Classes
5.1.1. Symmetric Crypto API Properties
Name |
|
|---|---|
Kind |
Final class |
Namespace |
|
Since |
0.1 |
Purpose |
Exposes the immutable properties of the Terminal Calypso Crypto Symmetric API. |
Constants
| Name | Type | Since | Description |
|---|---|---|---|
|
|
0.1 |
String representation of the version of the API implemented by the conforming binding (e.g. |
|
The |
5.2. API Interfaces
5.2.1. SV Command Security Data API
Name |
|
|---|---|
Kind |
Interface |
Namespace |
|
Since |
0.1 |
Purpose |
Carries the input/output data exchanged during the cryptographic preparation of an SV command (Load / Debit / Undebit). |
Get SV Command Partial Request
Signature |
|
|---|---|
Since |
0.1 |
Description |
Returns the partial SV Load/Debit/Undebit ingoing command data, to which the security data computed by the crypto module is later appended. |
Returns |
A non-empty |
Throws |
None. |
Get SV Get Request
Signature |
|
|---|---|
Since |
0.1 |
Description |
Returns the SV Get ingoing command data. |
Returns |
A non-empty |
Throws |
None. |
Get SV Get Response
Signature |
|
|---|---|
Since |
0.1 |
Description |
Returns the SV Get outgoing command data. |
Returns |
A non-empty |
Throws |
None. |
Set Serial Number
Signature |
|
|---|---|
Since |
0.1 |
Description |
Sets the serial number to be placed in the SV Load/Debit/Undebit command request. |
Parameters |
|
Returns |
The current instance ( |
Throws |
None. |
Set Terminal Challenge
Signature |
|
|---|---|
Since |
0.1 |
Description |
Sets the terminal challenge to be placed in the SV Load/Debit/Undebit command request. |
Parameters |
|
Returns |
The current instance ( |
Throws |
None. |
Set Terminal SV MAC
Signature |
|
|---|---|
Since |
0.1 |
Description |
Sets the terminal SV MAC to be placed in the SV Load/Debit/Undebit command request. |
Parameters |
|
Returns |
The current instance ( |
Throws |
None. |
Set Transaction Number
Signature |
|
|---|---|
Since |
0.1 |
Description |
Sets the transaction number to be placed in the SV Load/Debit/Undebit command request. |
Parameters |
|
Returns |
The current instance ( |
Throws |
None. |
5.3. SPI Interfaces
5.3.1. Symmetric Crypto Card Transaction Manager Factory SPI
Name |
|
|---|---|
Kind |
Interface (SPI) |
Namespace |
|
Since |
0.1 |
Purpose |
Factory of |
Create Card Transaction Manager
Signature |
|
|---|---|
Since |
0.1 |
Description |
Creates a |
Parameters |
|
Returns |
|
Throws |
|
Get Max Card APDU Length Supported
Signature |
|
|---|---|
Since |
0.1 |
Description |
Returns the maximum card APDU length supported by the crypto module. |
Returns |
A positive |
Throws |
None. |
Is Extended Mode Supported
Signature |
|
|---|---|
Since |
0.1 |
Description |
Indicates whether the extended mode is supported by the crypto module. |
Returns |
|
Throws |
None. |
Pre Init Terminal Session Context
Signature |
|
|---|---|
Since |
0.1 |
Description |
Retrieves and stores the terminal challenge in the crypto module image for later use. |
Throws |
|
5.3.2. Symmetric Crypto Card Transaction Manager SPI
Name |
|
|---|---|
Kind |
Interface (SPI) |
Namespace |
|
Since |
0.1 |
Purpose |
Defines the cryptographic primitives required by a Calypso card transaction when using symmetric keys. An instance is obtained via |
Every operation MUST raise either SymmetricCryptoException (internal error) or SymmetricCryptoIOException
(communication-level error) when the cryptographic computation cannot be completed.
finalizeTerminalSessionMac and isCardSessionMacValid MUST be called only after every
updateTerminalSessionMac call corresponding to the APDUs exchanged during the secure session.
Activate Encryption
Signature |
|
|---|---|
Since |
0.1 |
Description |
Activates the encryption/decryption of the data sent/received during the secure session. |
Throws |
|
Cipher PIN For Modification
Signature |
|
|---|---|
Since |
0.1 |
Description |
Computes a block of encrypted data to be sent to the card for a PIN modification. Note: the |
Parameters |
|
Returns |
A non-empty |
Throws |
|
Cipher PIN For Presentation
Signature |
|
|---|---|
Since |
0.1 |
Description |
Computes a block of encrypted data to be sent to the card for an enciphered PIN presentation. Note: the |
Parameters |
|
Returns |
A non-empty |
Throws |
|
Compute SV Command Security Data
Signature |
|
|---|---|
Since |
0.1 |
Description |
Computes the data needed to operate SV card commands and writes it back to the provided container. Every field of the supplied |
Parameters |
|
Throws |
|
Deactivate Encryption
Signature |
|
|---|---|
Since |
0.1 |
Description |
Deactivates the encryption/decryption of the data sent/received during the secure session. |
Throws |
|
Finalize Terminal Session MAC
Signature |
|
|---|---|
Since |
0.1 |
Description |
Finalises the digest computation and returns the terminal part of the session MAC. |
Returns |
A non-empty |
Throws |
|
Generate Ciphered Card Key
Signature |
|
|---|---|
Since |
0.1 |
Description |
Generates an encrypted key data block for loading a key into a card. |
Parameters |
|
Returns |
A non-empty |
Throws |
|
Generate Terminal Session MAC
Signature |
|
|---|---|
Since |
0.1 |
Description |
Generates the terminal part of the session MAC used for an early mutual authentication. |
Returns |
A non-empty |
Throws |
|
Init Terminal Secure Session Context
Signature |
|
|---|---|
Since |
0.1 |
Description |
Initialises the crypto module context for operating a Secure Session with a card and returns the terminal challenge. |
Returns |
The non-empty terminal challenge. |
Throws |
|
Init Terminal Session MAC
Signature |
|
|---|---|
Since |
0.1 |
Description |
Stores the data needed to initialise the session MAC computation for a Secure Session. |
Parameters |
|
Throws |
|
Is Card Session MAC Valid
Signature |
|
|---|---|
Since |
0.1 |
Description |
Verifies the card part of the session MAC, finalising the mutual authentication process. |
Parameters |
|
Returns |
|
Throws |
|
Is Card SV MAC Valid
Signature |
|
|---|---|
Since |
0.1 |
Description |
Verifies the Stored Value (SV) MAC returned by the card, confirming the authenticity of the SV operation. |
Parameters |
|
Returns |
|
Throws |
|
Synchronize
Signature |
|
|---|---|
Since |
0.1 |
Description |
Synchronises data of the associated card transaction crypto extension if needed. |
Throws |
|
Update Terminal Session MAC
Signature |
|
|---|---|
Since |
0.1 |
Description |
Updates the digest computation with data sent or received from the card. Returns the encrypted/decrypted data when the encryption is active. The digest is computed incrementally and depends on the sequence of inputs: the implementation MUST preserve the order in which this operation is called. |
Parameters |
|
Returns |
|
Throws |
|
5.4. Exceptions
5.4.1. Symmetric Crypto Exception
Name |
|
|---|---|
Kind |
Checked exception |
Namespace |
|
Since |
0.1 |
Purpose |
Indicates that an internal error occurred when processing a command. |
5.4.2. Symmetric Crypto IO Exception
Name |
|
|---|---|
Kind |
Checked exception |
Namespace |
|
Since |
0.1 |
Purpose |
Indicates that an IO error occurred when processing a command. |