Java Card Stepping Stones - FINAL
Java Card Stepping Stones - FINAL
Applet Developers
Version 1.0
April 2024
Enabling trust in a connected future
The information contained in this document may be used, disclosed and reproduced without the
prior written authorization of Trusted Connectivity Alliance. Readers are advised that Trusted
Connectivity Alliance reserves the right to amend and update this document without prior notice.
Updated versions will be published on the Trusted Connectivity Alliance website at
http://www.trustedconnectivityalliance.org
2
Enabling trust in a connected future
Contents
1. References 4
2. Abbreviations 6
3. Definitions 7
5.2. GSMA and 3GPP: Understanding Major Updates for Java Card Developers 11
6.13. Transactions 29
3
Enabling trust in a connected future
9. Interoperability Checklists 40
1. References
Java Card 3.0.5 Java Card 3 Platform Virtual Machine Specification, Classic Nov 2017
Edition Version 3.0.5
Java Card 3 Platform Runtime Environment Specification, Nov 2017
Classic Edition Version 3.0.5
Java Card API, Classic Edition Version 3.0.5
Java Card 3.1.0 Java Card Platform Virtual Machine Specification, Classic Feb 2021
Edition Version 3.1
Java Card Platform Runtime Environment Specification, Feb 2021
Classic Edition Version 3.1
Java Card API, Classic Edition Version 3.1.0
GSMA SGP.22 RSP Technical Specification Version 3.0 October 2022
SGP.05 Embedded UICC Protection Profile Version 4.1 March 2023
SGP.25 Embedded UICC for Consumer Devices Protection 05 June 2018
Profile Version 1.0
ETSI ETSI TS 102 221 V16.6.0 (2021-10) Smart Cards; UICC- October 2021
Terminal interface; Physical and logical characteristics
(Release 16)
4
Enabling trust in a connected future
5
Enabling trust in a connected future
2. Abbreviations
6
Enabling trust in a connected future
3. Definitions
7
Enabling trust in a connected future
For several decades, the UICC has been leveraged to deliver advanced and innovative value-
added services – which have been further enriched as the capabilities of UICC technology has
evolved.
The emergence of eUICC technology is having a transformative impact, but also presents new
interoperability challenges for stakeholders as, on a specific eUICC, several profiles containing
applets by third parties are downloaded with minimal or no integration activity.
To ensure seamless integration and simplify deployments across the highly complex telecom
ecosystem, Trusted Connectivity Alliance (TCA) – as a leading global industry association – has
a proven record identifying and promoting the need for strong interoperability. Among myriad
other initiatives, the publication of its various ‘Stepping Stones’ documents have played an
important role in guiding industry stakeholders.
The publication of this latest Stepping Stones document marks a continuation of TCA’s decades-
long efforts to promote interoperability. It should also be noted that previous documents such as
‘Trusted Connectivity Alliance: Interoperability Stepping Stones Release 7’ - developed in
December 2009 - are still valid and can be used as reference.
Overall, this document serves as an indispensable resource for Java Card applet developers,
offering a holistic view of the technology's nuances, best practices, and security considerations
to facilitate the creation of robust and interoperable solutions in the dynamic landscape of smart
card development.
This document delves into various aspects of Java Card technology, providing a thorough
exploration of the Interoperability Stepping Stones and the evolving applet ecosystem. The
overview of Java Card versions, including Java Card 3.0.5 and Java Card 3.1.0, is accompanied
by a summary of essential updates from ETSI and 3GPP, offering developers valuable insights
into the ever-changing landscape. The guidelines for Java Card applet development,
encompassing NVM, fields, local variables, and more, serve as a roadmap for best practices.
Furthermore, the document extends its focus to the critical realm of security, offering
recommendations applicable to all applets and additional measures for sensitive ones. The
inclusion of the TCA Loader, TCA eSIM Interoperability Service, and insights into interoperability
events, such as the Interoperability Test Fest, underscores the importance of seamless
integration.
8
Enabling trust in a connected future
For developers seeking practical guidance, the document concludes with a comprehensive
checklist, ensuring that applet developers are well-equipped to navigate the intricacies of
interoperability.
The GSMA specifies the Subscription Management solutions for three different markets - M2M,
IoT and Consumer, with each having a dedicated technical specification. While the guidelines that
apply to the applets that are developed for all three market variants broadly remain the same, the
applets would differ in the functionality and services catering to the particular eUICC variant.
9
Enabling trust in a connected future
This section is intended to provide Java Card applet developers with an overview of key Java
Card versions, including Java Card 3.0.5 and Java Card 3.1.0. This is accompanied by a
summary of essential recent updates from GSMA and 3GPP to help developers understand and
navigate the evolving ecosystem.
Beginning with Java Card 2.2.1 (2003) and progressing through versions like Java Card 3.0
(Classic Edition, 2008) and Java Card 3.1 (2018), the technology has embraced improvements
such as Java Card RMI, extended APDUs, new APIs for Certificate Management and support for
new cryptographic algorithms.
The latest version, Java Card 3.2, introduced in 2023, expands the horizon with support for
advanced security algorithms, improved cryptographic operation performance, and compatibility
with diverse card form factors.
Developers should understand the capabilities of the various Java Card versions and, to enhance
interoperability with in-field eUICCs, choose the minimal Java Card version required by the
developed service. For example, if an applet is compiled using the Java Card 3.1.0 APIs, it will
not be compatible with a Java Card 3.0.5 eUICC. However, a Java Card 3.0.5 applet can be
downloaded on both 3.0.5 and 3.1.0 eUICCs.
This applies in general to all the packages that are imported by the application. For example, An
application importing Release 6 of the ETSI TS 102 241 API can be loaded on Release 15 cards,
while an application importing Release 15 of the ETSI TS 102 241 API cannot be loaded on
Release 6 cards. This means that to enhance interoperability, application developers should
always choose the lowest version of the API required by the application services.
It should be noted as a reference, GSMA SGP.22 consumer eUICCs v2.x requires at least Java
Card 3.0.4, while the ETSI Release18 APIs require at least Java Card 3.1.0.
10
Enabling trust in a connected future
5.2. GSMA and 3GPP: Understanding Major Updates for Java Card
Developers
GSMA has driven the standardisation of the eUICC in all variants; in particular, in the SGP.22 v2.4
several evolutions relevant to applet developers have been introduced.
• Remote provisioning: eSIMs can now be provisioned remotely, without the need for physical
access to the device.
• Remote management: eSIMs can now be managed remotely, including updating the
firmware and profiles.
• Support for new applications: SGP.22 v2.4 supports a wider range of applications for
eSIMs, including 5G, IoT, and M2M.
In 3GPP, the Rel-17 has furtherly enhanced The 5G-SA architecture, with a significant evolution
versus 4G/LTE. It is based on a set of independent functions being deployed in a cloud
infrastructure. The full 5G architecture promises to allow MNOs and other mobile service
providers to build systems that can offer innovative services that can generate enormous benefits.
Due to compatibility issues and need to offer a continuity of service to users, a 4G (or even 3G)
SIM can be used in a 5G network. However, only a 5G SIM will unlock the full potential of the 5G-
SA with the adequate level of security to face the aforementioned challenges.
To support comprehension of the added value of a 5G SIM, TCA has developed a set of
recommendations that includes the recent Release 17 support (‘Recommended 5G SIM
Technical Definition: Enhanced for 3GPP Release 17’).
11
Enabling trust in a connected future
The following section identifies and details a series of best-practices for Java Card applet
developers to maximise interoperability.
To avoid compromising the reliability of the devices, applets are supposed to minimise updates
to NVM. This is particularly true if the applet is triggered by relatively frequent events:
- The STATUS command as an example can be received twice a minute, leading to over 1
million triggers in a year. If the applet wrote the same NVM area once per
EVENT_STATUS_COMMAND, the UICC reliability could be compromised in less than one
year.
- Similarly, the EVENT_EVENT_DOWNLOAD_LOCATION_STATUS may also be very frequent,
especially when the network signal is unstable or the device is on the border between two
different cells.
- Also, the EVENT_EXTERNAL_FILE_UPDATE can be very frequent if the file is regularly
updated (i.e. the files that have the “Update activity” information set to “High” in the
specification where the file is defined, like ETSI TS 102 221 or 3GPP 31.102, such as the EF
LOCI [Location Information]).
During the above events, as well as other events that may be very frequent, applets should avoid
performing writings in NVM if not necessary, including:
- File update.
- Java Card fields update.
- Java Card persistent array content update.
- Invoking an object constructor.
- Invoking system APIs that may result in NVM update, including the registration or de-
registration to toolkit events.
12
Enabling trust in a connected future
For cryptographic operations on Java Card 3.0.5 and onward versions, the usage of OneShot
class (e.g. Cipher.OneShot, MessageDigest.OneShot, RandomData.OneShot) is
recommended as it will reduce NVM updates.
try {
enc.init(someRSAKey, Cipher.MODE_ENCRYPT);
// Handle exception
} finally {
if (enc != null) {
enc.close();
enc = null;
13
Enabling trust in a connected future
In some cases, like ephemeral key pairs generation, key usage is limited to the session. This
guarantees that the Key objects use volatile memory usage to reduce NVM updates. When the
applicative use case requires generation of ephemeral key pairs, the following procedure should
be followed:
- For each key type and size to be supported, instantiate only once a PrivateKey and a
PublicKey object using the related KeyBuilder.buildKey() methods specifying the
usage of transient memory.
- For each key type and size to be supported, instantiate one KeyPair using
javacard.security.KeyPair(PublicKey publicKey, PrivateKey
privateKey) constructor and passing the PrivateKey and PublicKey objects
instantiated at previous step.
- Invoke the KeyPair.genKeyPair() method each time a generation of new ephemeral
keys is needed.
Specific operating systems may have dedicated optimisations to limit the issue, like a wear
levelling mechanism (that modifies the physical location to avoid always writing to the same
page). But as they are not guaranteed to always be supported by all TCA member eUICC
products, applet developers should not rely on such mechanisms to increase robustness.
Arrays containing constants, like menu strings or cryptographic constant arrays, should be
declared static. This means the arrays are not initialised at installation, saving code space.
14
Enabling trust in a connected future
Working and scratch buffers should be declared as transient arrays, as its content is supposed
to change frequently. If an applet developer needs to manipulate and change data at different
offsets within an NVM buffer, they can create a copy of the NVM buffer in a transient buffer. The
data manipulation can then be performed on the transient buffer. Finally, the content can be
transferred back to the NVM buffer with a single update API invocation, minimising the number
of updates of the NVM buffer.
new testApplet();
nVM_Buffer[NVM_BUFFER_OFFSET_A] = NVM_BUFFER_DATA_A;
nVM_Buffer[NVM_BUFFER_OFFSET_B] = NVM_BUFFER_DATA_B;
15
Enabling trust in a connected future
transientBuffer = JCSystem.makeTransientByteArray(
SIZE_TRANSIENT_BUFFER, JCSystem.CLEAR_ON_RESET);
new testApplet();
transientBuffer[NVM_BUFFER_OFFSET_A] = NVM_BUFFER_DATA_A;
transientBuffer[NVM_BUFFER_OFFSET_B] = NVM_BUFFER_DATA_B;
16
Enabling trust in a connected future
Using a single contiguous array to hold multiple arrays of the same type
Instead of creating several arrays of the same data type, it’s better to create one for each data
type and define constants as offsets to access the desired zone within the array. Since arrays
are objects, their creation is slow and consumes more memory as the virtual machine adds
some more bytes as header.
static final byte[] menuEntry1 = {(byte) 'm', (byte) 'e', (byte) 'n',
(byte) 'u', (byte) 'I', (byte) 't', (byte) 'e', (byte) 'm', (byte) '1'};
static final byte[] menuEntry2 = {(byte) 'm', (byte) 'e', (byte) 'n',
(byte) 'u', (byte) 'I', (byte) 't', (byte) 'e', (byte) 'm', (byte) '2'};
static final byte[] menuEntry3 = {(byte) 'm', (byte) 'e', (byte) 'n',
(byte) 'u', (byte) 'I', (byte) 't', (byte) 'e', (byte) 'm', (byte) '3'};
new testApplet.register();
tlkReg = ToolkitRegistrySystem.getEntry();
17
Enabling trust in a connected future
//Create a single array that can hold all the data of the same type
(byte) 'm', (byte) 'e', (byte) 'n', (byte) 'u', (byte) 'I', (byte)
't', (byte) 'e', (byte) 'm', (byte) '1',
(byte) 'm', (byte) 'e', (byte) 'n', (byte) 'u', (byte) 'I', (byte)
't', (byte) 'e', (byte) 'm', (byte) '2',
(byte) 'm', (byte) 'e', (byte) 'n', (byte) 'u', (byte) 'I', (byte)
't', (byte) 'e', (byte) 'm', (byte) '3'};
new testApplet.register();
tlkReg = ToolkitRegistrySystem.getEntry();
18
Enabling trust in a connected future
If a field member (primitive or references to objects/arrays) is accessed several times in the same
method, copy the content of the field in a local variable and use the local variable (reducing the
access to the field member).
Due to the size of the stack, methods should avoid using too many local variables and parameters.
Whenever possible it is suggested to reuse local variables and limit the scope of the local variables
to be only be accessible within a block.
Static variables and methods belong to the class, not to the instance, so they are not affected by
the firewall and are accessible by other applet instances. However, caution must be exercised
when using static methods and fields. If the CAP file containing the static methods or fields is to
be deleted, the CAP file using the method should be removed first. CAP files, whose static
methods or fields are used by another CAP file, will not be deleted unless those CAP files are
deleted first.
Below is a non-exhaustive list of the methods which create new object when invoked:
• getInstance
• makeTransientByteArray
• makeTransientBooleanArray
• makeTransientObjectArray
• makeTransientShortArray
• buildKey
19
Enabling trust in a connected future
• UICCSystem.getTheUICCView
• buildTLVHandler
It is recommended to use Java Card RE owned exception objects instead of creating new objects
for these exceptions (e.g. ISOException). Developers can use
javacard.framework.UserException for custom exceptions.
Deeply nested method calls (method calling another method which in turn call another method,
etc.) and use of recursion should be avoided.
// Wrong practice
..
..
byte l_byte
...
...
l_byte = methodB(l_byte);
return l_byte;
...
...
return param;
20
Enabling trust in a connected future
// Good practice
tmpByte = methodB(tmpByte)
byte l_byte
...
...
return l_byte;
...
...
return param;
Whether the proactive command is needed, the flag can be checked for availability. The event
EVENT_PROACTIVE_HANDLER_AVAILABLE can be registered for re-entrance if needed. As
event registration results in a NVM update, however, it should be avoided when not required.
21
Enabling trust in a connected future
ToolkitInterface, ToolkitConstants {
+ TRANS_LEN_TASK;
new testApplet.register(bArray,
(short)(bOffset + 1),
(byte)bArray[bOffset]);
tlkReg = ToolkitRegistrySystem.getEntry();
tlkReg.setEvent(EVENT_EVENT_DOWNLOAD_LOCATION_STATUS);
transAry = JCSystem.makeTransientByteArray(TRANS_SIZE,
JCSystem.CLEAR_ON_RESET);
try{
ProactiveHandlerSystem.getTheHandler();
isHandlerAvailable = true;
22
Enabling trust in a connected future
}catch(ToolkitException tlkEx){
switch (sEvent) {
case EVENT_EVENT_DOWNLOAD_LOCATION_STATUS:
doSomeThingWithEnvelop();
if (isHandlerAvailable){
sendSMS();
}else{
tlkReg.setEvent(EVENT_PROACTIVE_HANDLER_AVAILABLE);
transAry[TRANS_OFF_TASK] = TASK_SEND_SMS;
break;
case EVENT_PROACTIVE_HANDLER_AVAILABLE:
switch(transAry[TRANS_OFF_TASK]){
case TASK_SEND_SMS:
sendSMS();
break;
// clear flag
transAry[TRANS_OFF_TASK] = 0;
break;
default:
break;
ProactiveHandler pro =
23
Enabling trust in a connected future
ProactiveHandlerSystem.getTheHandler();
...
...
ToolkitInterface, ToolkitConstants {
new testApplet().register();
tlkReg = ToolkitRegistrySystem.getEntry();
tlkReg.setEvent(EVENT_PROFILE_DOWNLOAD);
24
Enabling trust in a connected future
switch(sEvent) {
case EVENT_PROFILE_DOWNLOAD:
if(initializeLargeNVMBuffer) {
initializeLargeNVMBuffer = false;
transientBuffer = JCSystem.makeTransientByteArray((short)
SIZE_TRANSIENT_BUFFER, JCSystem.CLEAR_ON_RESET);
25
Enabling trust in a connected future
new testApplet().register();
tlkReg = ToolkitRegistrySystem.getEntry();
tlkReg.setEvent(EVENT_PROFILE_DOWNLOAD);
switch(sEvent) {
case EVENT_PROFILE_DOWNLOAD:
initializeLargeNVMBuffer();
break;
case EVENT_PROACTIVE_HANDLER_AVAILABLE:
transientBuffer[OFFSET_TBUFF_HDLR_AVL] &=
~MASK_INIT_NBUFF;
initializeLargeNVMBuffer();
break;
default:
break;
try {
ProactiveHandler proHdlr =
ProactiveHandlerSystem.getTheHandler();
proHdlr.initMoreTime();
proHdlr.send();
return true;
}catch (ToolkitException e) {
26
Enabling trust in a connected future
transientBuffer[OFFSET_TBUFF_HDLR_AVL] |= mask;
tlkReg.setEvent(EVENT_PROACTIVE_HANDLER_AVAILABLE);
return false;
if(!initializeLargeNVMBuffer)
return;
if(!sendMoreTime(MASK_INIT_NBUFF))
return;
transientBuffer[OFFSET_TBUFF_NBUFF_BLOCK]++;
nVM_Block++;
initializeLargeNVMBuffer = false;
An efficient way to save RAM is reusing the same scratch buffers or using system allocated buffers
when available (like the APDU buffer or the toolkit volatile byte array). In particular, the APDU
buffer is only available when the access is performed by the currently selected applet, while the
toolkit volatile byte array is only available when the buffer reference is retrieved by the currently
selected applet or by the applet currently triggered by a toolkit event.
27
Enabling trust in a connected future
“Programmatic abortion after creating objects within the transaction can be deemed to be a
programming error. When this occurs, the Java Card RE may, to ensure the security of the card
and to avoid heap space loss, lock up the card session to force tear or reset processing.”
This means that applet developers should avoid creating objects within transactions to avoid
interoperability issues on platforms which force tear or reset processing.
In addition, some standard APIs (e.g. ETSI 102 267 uicc.connection , ETSI 102 241
uicc.suspendresume) define interfaces which are not extending
javacard.framework.Shareable.
To ensure interoperability TCA members recommend that applet developers implement the
MultiSelectable interface in their applets if such APIs are used.
Note: On specific products in the field from TCA members, an applet can also be triggered by
such APIs when its context is already selected on a different channel even if it does not implement
the MultiSelectable interface. For such applets already in the field, it is recommended to add
MultiSelectable support whenever an applet modification is applied to increase
interoperability.
28
Enabling trust in a connected future
6.13. Transactions
The number of bytes of conditional updates within a transaction depends on the capacity of the
commit buffer. The following aspects of the transaction are implementation dependent and may
vary across card manufacturers:
- Implement appropriate logic to handle transactions that may exceed this commit capacity
and;
- Abort the transaction as part of the exception handling logic (within the try-catch-finally block).
29
Enabling trust in a connected future
- Use file selection API which does not require the FCP generation when the intention is to just
select the file and perform some operation on it (either read, write, activate, deactivate etc.).
- Avoid passing NVM buffers as arguments when not intended.
- Avoid invoking read/update APIs which do nothing (i.e. passed with length argument as 0).
Such an applet implements the SUCICalculator interface, and it should ensure/be aware of
the following:
• Even though the 3GPP specification [3GPP 31 102] allows the use of compressed elliptic
curve public keys for the ProfileB scheme, the home network public key is provisioned in
uncompressed format according to the TCA specification [TCA eUICC Profile Package: IFTS
v3.3].
30
Enabling trust in a connected future
• Storing sensitive data in the buffer passed to the getSUCI() API is avoided since this buffer
is a global array.
• The length of the SUCI output is strictly within the limit specified by the “bLength” parameter
of the getSUCI() API.
• The ephemeral keys are regenerated for every call to the getSUCI() API.
• The sensitive data is handled with appropriate security measures and is erased securely
immediately after use (including exception scenarios).
The profile creator shall ensure that the SUCI applet is granted the required access rights (in the
Access Domain field of the install parameters) to access the files required for the SUCI calculation.
31
Enabling trust in a connected future
In the 3GPP telecom architecture, the UICC – as a tamper-resistant secure hardware component
– contains the most sensitive information on the user equipment (UE) side, namely the storage
and processing of the subscription credentials. In order to maintain the highest level of security,
it is important for the applets to be properly developed. This is even more important with the
evolution to eUICC which are securely certified and where several profiles from different MNOs
can be present at the same time.
There are two types of applets: basic and sensitive. Basic applets don’t have assets to protect,
nevertheless they have to comply to a minimum of security rules, especially for those installed on
eUICC products (as defined in GSMA SGP.05 and SGP.25 and re-highlighted hereafter).
Sensitive applets are applets which store or manipulate their own security assets. The following
recommendations outline how the applet developer can sufficiently protect the applet assets.
- Standard APIs:
- The standard API should be used whenever possible, rather than rewriting methods.
This holds for:
- Java Card standard API
- GlobalPlatform API
- UICC API
- USIM API
32
Enabling trust in a connected future
- Rollback Attacks
- Protect your sensitive data against rollback attacks.
- Flow Control:
- In order to protect against multiple perturbations, countermeasures should be
implemented to detect any change to the normal execution flow. If an inconsistent
state is reached, an appropriate measure shall be applied according to applicable
context (e.g. block the application, reset).
- Random:
- Avoid using deprecated random (ALG_PSEUDO_RANDOM and
ALG_SECURE_RANDOM). Always use appropriate random depending on the usage.
In particular, always use either ALG_KEYGENERATION or ALG_TRNG algorithms for
sensitive use cases.
33
Enabling trust in a connected future
- Programmatic Exceptions
- Avoid the usage of programmatic exceptions to exit from a loop (e.g. do not parse
table until catching an index out of bounds exception).
34
Enabling trust in a connected future
In the context of OS and applets, the ability of applets to run and function properly on different
OS’s without requiring modification or adaptation for each distinct OS is referred to as
interoperability.
The eSIM ecosystem is enabled by an established infrastructure and global specifications, and all
individual eSIM products and components are tested extensively prior to deployment. Due to
variations in the interpretation and implementation of industry specifications, however, some
interoperability issues only emerge when solutions are deployed live in the field and interact with
other participants and components across the ecosystem.
As the eSIM market grows in size and complexity, so too does the risk and impact of
interoperability issues. A key challenge is the insufficient and incomplete testing of eSIM profiles,
which leads to compatibility issues with specific devices on the market. The interoperability is even
more challenging when the eSIM profile contains a Java Card applet.
To help Java Card developers ensure seamless integrations, this section summarises key
interoperability testing tool, services and events. This includes the TCA Loader, TCA eSIM
Interoperability Service, and insights into interoperability events, such as the GlobalPlatform
Interoperability Test Fest.
Version 3.0 of the TCA Loader provides applet developers with the ability to perform complete
applet management on Java Card smartcards. This includes exploring the card contents and
downloading, installing and deleting applications. The TCA Loader supports various security
protocols such as SCP02, SCP03, SCP80, SCP81 and CAT-TP.
35
Enabling trust in a connected future
The TCA Loader also provides applet developers with a convenient user interface for applet
compilation. The applet developer can choose the library classpath, export file path, then store
the compilation configuration. Applet developers can then import the stored configuration later
on.
The TCA Loader can also be used to simulate the actual card behaviour in the field when
performing application management via OTA or I/O using various supported security protocols.
This enables applet developers to ensure applet management functionalities prior to card
deployment.
The TCA Loader can be downloaded here from the TCA website:
- Direct Link
- Summary Page
The Full TCA Loader user manual is available after installation on Home > Getting Started > TCA
Loader Manual, or About > User Manual.
36
Enabling trust in a connected future
Service Description
Test one (or more) customer-provided eSIM profile(s) against a customer-defined subset of the
available portfolio of test devices.
The testing is conducted between SM-DP+ services, using the GSMA live certificates, and
devices with eSIMs also using GSMA live certificates.
To commence testing, the customer ensures that the eSIM profile(s) can be downloaded from a
customer-provided SM-DP+ service by scanning QR codes or entering activation codes. There
are three possible ways to conduct the testing:
37
Enabling trust in a connected future
- Self-testing remotely: the testing is done by the customer remotely. When technically
possible, COMPRION enables the customer to remotely access the test devices.
- Testing-by-COMPRION: the testing is done solely by COMPRION's expert
Testing Process
The tester selects one of the devices from the test device portfolio and initiates a profile download.
Once the profile is successfully downloaded, a number of scenarios can be tested, including:
- Initiating a call
- Receiving a call
- Sending an SMS
- Receiving an SMS
Besides these basic checks the customer can request to add further checks (e.g. Access Point
Name [APN] verification).
If the profile contains a Java Card applet, the customer can also ask to test the behaviour of the
applet. The customer needs to describe the behaviour which can be detected on the user
interface and the potential interactions between the user and the applet. Based on this
description, the behaviour of the applet can be tested.
The behaviour of the device is then documented. In case any interoperability issues are detected,
they are described in detail together with print screens and a video recording (if requested). The
final documentation is then shared with the customer.
In case the issue cannot be resolved by the customer, COMPRION offers root cause analysis as
part of the Advanced eSIM Interoperability Testing Service.
While the current scope of the TCA eSIM Interoperability Service is SGP.22, it can later be
extended to SGP.32.
For more information about the service, please visit the TCA and COMPRION websites:
38
Enabling trust in a connected future
The Test Fest environment also offers participants the ability to interact with one another for
purposes of improving their individual products and providing feedback on the
specifications/configurations themselves.
The events are attended by companies ranging from MNOs/MVNOs to eUICC manufacturers,
device OEMs and test companies, enabling various eSIM profiles to be tested against multiple
eUICCs to achieve interoperability.
39
Enabling trust in a connected future
9. Interoperability Checklists
40
Enabling trust in a connected future
14. SUCI API – SUCI output within the limit specified by the “bLength” parameter of
□
the getSUCI() API
Limit the updates to the same NVM (Flash or EEP)
15. NVM update variables and arrays to less than 200,000 for the
□
lifecycle of the applet
41
Enabling trust in a connected future
25. API usage Verify that the applet does not use proprietary library
□
- Verify that the applet is generated using standard
Oracle converter
26. Converter usage
- Verify that the applet has been verified by Oracle off- □
card verifier
- Verify that the applet passes the latest bytecode
27. Bytecode verification
verification process by Oracle □
28. Java Card RMI - Do not use Java Card RMI
□
Only applicable to sensitive applet
29. Sensitive data
management - all rules on sensitive data implemented □
42
Enabling trust in a connected future
43
Enabling trust in a connected future
44
Enabling trust in a connected future
Trusted Connectivity Alliance (TCA) is a global industry association working to enable trust in a
connected future.
The organisation evolved from the SIMalliance, reflecting the continued expansion of the global
SIM industry and the need for broader collaboration. Its members are leading providers of secure
connectivity solutions for consumer, IoT and M2M devices. This spans Tamper Resistant Element
(TRE) technologies including SIM, eSIM, integrated SIM, embedded Secure Element (eSE) and
integrated Secure Element (iSE), as well as hardware and software provisioning and other
personalisation services.
45