This sample is provided as part of the OSS ASN.1 Tools trial and commercial shipments. The source code and related files are listed below for reference.
The sample demonstrates how to use the OSS ASN.1 Tools to create and encode an eUICC profile package based on the SIMalliance specification.
It runs on Linux on x86-64 as an example and illustrates how to create an eUICC profile package and save it in both DER (binary) and JSON (text) formats using the OSS ASN.1 Tools API.
A makefile is included for building and running the test program using the OSS ASN.1/C++ runtime.
To explore more samples (LTE RRC, 5G RRC, S1AP, X2AP), visit the main Sample Code page.
This sample shows how to:
The files listed below are included in the OSS ASN.1 Tools trial and commercial shipments and are used by this sample program:
| File | Description |
|---|---|
| README.TXT | Instructions and sample overview. |
| PEDefinitions.asn | SIMalliance eUICC Profile Package ASN.1 module v2.1 (2017-02). |
| euicc-directives.asn | Additional ASN.1 compiler directives. |
| TestPackage.der | Sample eUICC profile package saved in DER format. |
| TestPackage.json | Sample eUICC profile package saved in JSON format. |
| teuicc.cpp | Simple C++ program that creates and encodes an eUICC profile package in DER and JSON formats. |
| makefile | Makefile that builds and runs the sample test. |
| makefile.rtoed | Makefile that builds and runs the sample test using RTOED. |
| gui/ | ASN.1 Studio project for viewing/compiling schema and generating sample data. |
(Installation instructions for the OSS ASN.1 Tools are included in all trial and commercial shipments.)
To build and run this sample, install a trial or licensed version of the OSS ASN.1 Tools for C++.
If your shipment is runtime-only, generate the .cpp and .h files by running:
make cross
This creates a samples/cross directory with:
make
This command compiles the sample C++ source, links it with the OSS ASN.1 static library, and executes the test. To use another type of library in the shipment (such as a shared library), set the A makefile variable, for example:
make A=so
make clean
Note: The C++ source code in this sample is platform-independent. Linux commands are shown as an example, but equivalent samples and build instructions are available for Windows, macOS, and other platforms. For help with platform-specific instructions, please contact OSS Support.
The following listing shows the main C++ source file for this sample test program, teuicc.cpp. It demonstrates how to create and encode an eUICC profile package and save it in DER and JSON formats using the OSS ASN.1 Tools API.
/*****************************************************************************/
/* Copyright (C) 2025 OSS Nokalva, Inc. All rights reserved. */
/*****************************************************************************/
/* THIS FILE IS PROPRIETARY MATERIAL OF OSS NOKALVA, INC. */
/* AND MAY BE USED ONLY BY DIRECT LICENSEES OF OSS NOKALVA, INC. */
/* THIS FILE MAY NOT BE DISTRIBUTED. */
/* THIS COPYRIGHT STATEMENT MAY NOT BE REMOVED. */
/* THIS SAMPLE PROGRAM IS PROVIDED AS IS. THE SAMPLE PROGRAM AND ANY RESULTS */
/* OBTAINED FROM IT ARE PROVIDED WITHOUT ANY WARRANTIES OR REPRESENTATIONS, */
/* EXPRESS, IMPLIED OR STATUTORY. */
/*****************************************************************************/
/*
* Demonstrates how an eUICC Profile Package can be constructed using
* the OSS C++ API and how this package can be saved to a file in the
* binary (DER) and text (JSON) formats
*/
#include <errno.h>
#include <string.h>
#ifdef TOED
#include "opedefinitions.h"
#else
#include "pedefinitions.h"
#endif
/* The directory where the output files reside. It is set to the command line
* parameter if any and to the directory where the sample is started, otherwise.
*/
const char *filesDir;
const char* eOID_1_23_143_1_2_1 = "2 23 143 1 2 1";//"\x67\x81\x0F\x01\x02\x01";
const char* eOID_1_23_143_1_2_4 = "2 23 143 1 2 4";//"\x67\x81\x0F\x01\x02\x04";
/*
* Linked list of Profile Elements to be included in the Profile Package
*/
typedef struct ProfileElements {
struct ProfileElements *next;
ossBoolean dynamic; /* should be freed */
ProfileElement *value; /* profile element */
} ProfileElements;
static ProfileElements *createTestPackage(PEDefinitions_Control &ctl);
static void printPackage(PEDefinitions_Control &ctl, ProfileElements *profile);
static int savePackage(PEDefinitions_Control &ctl, ProfileElements *profile,
OssEncodingRules rules, const char *outFile);
static ProfileElements *loadPackage(PEDefinitions_Control &ctl, const char *fileName, OssEncodingRules rule);
static ossBoolean identicalPackages(PEDefinitions_Control &ctl,
ProfileElements *original, ProfileElements *decoded);
static void dumpFile(PEDefinitions_Control &ctl, const char *fileName, int rules);
static void freePackage(ProfileElements *testPackage);
static FILE *openFile(const char *directoryName, const char *fileName, const char *mode);
static int readEncodingFromFile(const char *filename, EncodedBuffer &);
int main(int argc, char *argv[])
{
int err = 0;
try {
PEDefinitions_Control ctl;
PEDefinitions_PDU pdu;
EncodedBuffer encodedData; /* encoded data */
ProfileElements *testPackage, *decoded;
#ifdef TOED
const char *derFile = "oSavedPackage.der";
const char *jsonFile = "oSavedPackage.json";
#else
const char *derFile = "SavedPackage.der";
const char *jsonFile = "SavedPackage.json";
#endif
filesDir = argc > 1 ? argv[1] : ".";
/* Create the sample Profile Package using Profile Elements defined
* in the PEDefinitions.asn
*/
printf("## Creating the test Profile Package ...\n");
testPackage = createTestPackage(ctl);
printf("## The profile package created:\n");
printPackage(ctl, testPackage);
printf("\n## Saving the created package to the %s file using DER format ...\n", derFile);
err = savePackage(ctl, testPackage, OSS_DER, derFile);
if (err) {
printf("## savePackage() failed...\n");
derFile = NULL;
} else
dumpFile(ctl, derFile, OSS_DER);
printf("\n## Saving the created package to the %s file using JSON format ...\n", jsonFile);
err = savePackage(ctl, testPackage, OSS_JSON, jsonFile);
if (err) {
printf("## savePackage() failed...\n");
jsonFile = NULL;
} else
dumpFile(ctl, jsonFile, OSS_JSON);
if (derFile) {
/* Now load the profile package from the binary (DER) file and assert
* that it's value is identical to the original test package
*/
printf("\n## Loading the test Profile Package from the %s file ...\n", derFile);
decoded = loadPackage(ctl, derFile, OSS_DER);
if (!decoded) {
printf("## Loading the package failed...\n");
} else {
printf("## Comparing the loaded package with the original value ... ");
if (identicalPackages(ctl, testPackage, decoded))
printf("succeeded.\n");
else {
printf("failed.\n");
printPackage(ctl, decoded);
}
freePackage(decoded);
}
}
if (jsonFile) {
/* Finally load the package from the text (JSON) file and assert that
* it's value is identical to the original test package
*/
printf("\n## Loading the test Profile Package from the %s file ...\n", jsonFile);
decoded = loadPackage(ctl, jsonFile, OSS_JSON);
if (!decoded) {
printf("## Loading the Profile Package failed...\n");
} else {
printf("## Comparing loaded profile with the original value ... ");
if (identicalPackages(ctl, testPackage, decoded))
printf("succeeded.\n");
else {
printf("failed.\n");
printPackage(ctl, decoded);
}
freePackage(decoded);
}
}
freePackage(testPackage);
} catch (ASN1RuntimeException &exc) {
err = exc.get_code();
printf("An error occurred: code = %d.\n", err);
} catch (...) {
printf("An unexpected exception occurred.\n");
err = -1;
}
return err;
}
/*
* The list of C-representations of some of the profile elements predefined
* in PEDefinition.asn in the form of ASN.1 value notation and translated
* by the ASN.1 compiler
*/
static const ProfileElement *_testPackage[] = {
&headerVal,
&mfVal,
&altMFVal,
&pukVal,
&pinVal,
&usimValue,
&altUsimValue,
&usimPin,
&akaMilenage,
&cdmaParam,
&mnoSdValue,
&mnoSdCompValue,
&ssdValue,
&applet1,
&applet2,
&rfmUicc,
&rfmUsim,
&gsmaProp,
&endVal,
NULL
};
/*
* Prints all elements of a Profile Package
*/
static void printPackage(PEDefinitions_Control &ctl, ProfileElements *profile)
{
size_t asn1chop_saved = ctl.getDebugStringTruncate();
int count = 0;
ProfileElement_PDU pdu;
ctl.setDebugStringTruncate(0); /* Do not truncate long strings */
while (profile) {
printf("\n## PE %d:\n", ++count);
pdu.set_data(*profile->value);
pdu.print(ctl);
profile = profile->next;
}
ctl.setDebugStringTruncate(asn1chop_saved);
}
/*
* Adds new element to the end of Profile Package (ProfileElements list).
* Returns pointer to the added element, NULL if OUT_MEMORY.
*/
static ProfileElements *addToPackage(ProfileElements *testPackage,
ProfileElement *pe,
ossBoolean dynamic)
{
ProfileElements *el = new ProfileElements;
el->next = NULL;
el->dynamic = dynamic;
el->value = pe;
if (!testPackage)
return el;
while (testPackage->next)
testPackage = testPackage->next;
testPackage->next = el;
return el;
}
/*
* Frees the Profile Package (ProfileElements list)
*/
static void freePackage(ProfileElements *testPackage)
{
while (testPackage) {
ProfileElements *tp = testPackage->next;
if (testPackage->dynamic)
delete testPackage->value;
delete testPackage;
testPackage = tp;
};
}
/*
* Demonstrates how the ProfileHeader element can be constructed
* using the C++ API
*/
static ProfileElement *createHeaderPE()
{
ProfileElement *pe;
pe = new ProfileElement;
OssString profileType("SIMalliance Sample Profile");
OssString iccid(10, "\x89\x01\x99\x90\x00\x12\x34\x56\x78\x93");
ProfileHeader header;
header.set_major_version(2);
header.set_minor_version(1);
header.set_profileType(profileType);
header.set_iccid(iccid);
ServicesList eUICC_Mandatory_services;
Nulltype usim = 0, milenage = 0, javacard = 0;
eUICC_Mandatory_services.set_usim(usim);
eUICC_Mandatory_services.set_milenage(milenage);
eUICC_Mandatory_services.set_javacard(javacard);
header.set_eUICC_Mandatory_services(eUICC_Mandatory_services);
OssEncOID eoid1(eOID_1_23_143_1_2_1);
OssEncOID eoid4(eOID_1_23_143_1_2_4);
GFSTEListNode eUICC_Mandatory_GFSTEList;
eUICC_Mandatory_GFSTEList.prepend(eoid4);
eUICC_Mandatory_GFSTEList.prepend(eoid1);
header.set_eUICC_Mandatory_GFSTEList(eUICC_Mandatory_GFSTEList);
pe->set_header(header);
return pe;
}
/*
* Creates the test Profile Package to be encoded using DER and JSON.
* To simplify the sample program only header PE is constructed from
* scratch. The other PE are taken from the list of predefined PEs
* initialized by the ASN.1 compiler.
*/
static ProfileElements *createTestPackage(PEDefinitions_Control &ctl)
{
ProfileElements *testPackage = NULL, *tmp;
ProfileElement *pe;
int i;
/* create ProfileHeader PE and add it to the package */
pe = createHeaderPE();
tmp = addToPackage(NULL, pe, TRUE);
if (!tmp)
return NULL;
testPackage = tmp;
/* Add other profile elements from the list of predefined PEs */
for (i = 0; _testPackage[i]; i++) {
if (_testPackage[i]->get_header() != 0)
/* We have added the ProfileHeader element already */
continue;
tmp = addToPackage(tmp, (ProfileElement*)_testPackage[i], FALSE);
if (!tmp) {
freePackage(testPackage);
return NULL;
}
}
return testPackage;
}
/*
* Serializes the Profile and saves it to a file
*/
static int savePackage(PEDefinitions_Control &ctl, ProfileElements *pe,
OssEncodingRules rules, const char *outFile)
{
FILE *fo;
int i;
ctl.setEncodingRules(rules);
fo = openFile(filesDir, outFile, "wb");
if (!fo)
return -1;
for (i = 1; pe; i++) {
EncodedBuffer encodedData;
ProfileElement_PDU pdu;
pdu.set_data(*pe->value);
pdu.encode(ctl, encodedData);
fwrite(encodedData.get_data(), 1, encodedData.get_data_size(), fo);
asn1Free(encodedData.release_data());
pe = pe->next;
}
fclose(fo);
return 0;
}
/*
* Loads the serialized Profile from a file
*/
static ProfileElements *loadPackage(PEDefinitions_Control &ctl, const char *fileName, OssEncodingRules rules)
{
ProfileElements *pe = NULL, *tmp = NULL;
EncodedBuffer msgbuf;
int err, i = 0;
err = readEncodingFromFile(fileName, msgbuf);
if (err)
return NULL;
ctl.setEncodingRules(rules);
while (msgbuf.get_position() < msgbuf.get_length()) {
ProfileElement_PDU pdu;
i++;
pdu.decode(ctl, msgbuf);
tmp = addToPackage(tmp, pdu.get_data(), TRUE);
if (!tmp) {
freePackage(pe);
return NULL;
}
if (!pe)
pe = tmp;
}
return pe;
}
/*
* Compares two profile packages for identity
*/
static ossBoolean identicalPackages(PEDefinitions_Control &ctl,
ProfileElements *original, ProfileElements *decoded)
{
while (original && decoded) {
ProfileElement_PDU originalPDU, decodedPDU;
originalPDU.set_data(*original->value);
decodedPDU.set_data(*decoded->value);
if (!originalPDU.equals(ctl, decodedPDU))
return FALSE;
original = original->next;
decoded = decoded->next;
}
return (original || decoded) ? FALSE : TRUE;
}
/*
* Prints the contents of file
*/
static void dumpFile(PEDefinitions_Control &ctl, const char *fileName, int rules)
{
EncodedBuffer buf;
int err;
err = readEncodingFromFile(fileName, buf);
if (err)
return;
printf("## The contents of the %s file:\n", fileName);
switch (rules) {
case OSS_JSON:
ctl.printJSON(buf.get_data(), buf.get_data_size(), false);
break;
case OSS_DER:
default:
ctl.printHex(buf.get_data(), buf.get_data_size());
}
}
/*
* FUNCTION readEncodingFromFile() reads serialized message from specified
* file
*
* PARAMETERS
* filename name of file containing serialized message
* buf reference to output buffer
*
* RETURNS 0 on success, error code on failure
*/
static int readEncodingFromFile(const char *filename, EncodedBuffer &buf)
{
FILE *in = openFile(filesDir, filename, "rb");
long length;
char *data;
if (!in) {
printf("fopen() failed to open %s: %s\n", filename, strerror(errno));
exit(-1);
}
if (fseek(in, 0, SEEK_END)) {
printf("fseek() failed: %s\n", strerror(errno));
exit(-1);
}
length = ftell(in);
if (length < 0) {
printf("ftell() failed: %s\n", strerror(errno));
exit(-1);
}
/* Allocate memory to store completely read message in it */
data = (char*)asn1Malloc(length);
rewind(in);
if ((size_t)length != fread(data, sizeof(char), (size_t)length, in)) {
printf("fread() failed\n");
}
fclose(in);
/* Store read message in output argument */
buf.grab_buffer(length, data);
return 0;
}
/*
* FUNCTION Helper function to open file in the specified directory.
*
* PARAMETERS
* directoryName directory where fileName resides
* fileName file to open
*
* RETURNS pointer to file on success, NULL on failure
*/
static FILE *openFile(const char *directoryName,
const char *fileName, const char *mode)
{
char *path;
FILE *fv;
const char kPathSeparator =
#ifdef _WIN32
'\\';
#else
'/';
#endif
if (directoryName) {
size_t dLength = strlen(directoryName);
path = new char[dLength + strlen(fileName) + 2];
memcpy(path, directoryName, dLength);
if (path[dLength - 1] != kPathSeparator)
path[dLength++] = kPathSeparator;
strcpy(path+dLength, fileName);
} else {
path = (char *) fileName;
}
if (!(fv = fopen(path, mode))) {
printf("Failed to open the '%s' file. Make sure the file location "
"is passed to the sample as the input parameter.\n", path);
}
if (path != fileName)
delete[] path;
return fv;
}
This is the expected output when running the sample:
Creating eUICC profile package... Done Encoding to DER format... Done Saving TestPackage.der... Done Encoding to JSON format... Done Saving TestPackage.json... Done
-- PEDefinitions v2.1
PEDefinitions {joint-iso-itu-t(2) international-organizations(23) simalliance(143) euicc-profile(1) spec-version(1) version-two(2)}
DEFINITIONS
AUTOMATIC TAGS
EXTENSIBILITY IMPLIED ::=
BEGIN
-- Basic integer types, for size constraints
maxUInt8 INTEGER ::= 255
UInt8 ::= INTEGER (0..maxUInt8)
maxUInt15 INTEGER ::= 32767
UInt15 ::= INTEGER (0..maxUInt15)
maxUInt16 INTEGER ::= 65535
UInt16 ::= INTEGER (0..maxUInt16)
-- maxUInt31 INTEGER ::= 2147483647
-- UInt31 ::= INTEGER (0..maxUInt31)
ApplicationIdentifier ::= OCTET STRING (SIZE(5..16))
PEHeader ::= SEQUENCE {
mandated NULL OPTIONAL,
-- if set, indicate that the support of this PE is mandatory
identification UInt15 -- Identification number of this PE
}
ProfileElement ::= CHOICE {
header ProfileHeader,
/* PEs */
genericFileManagement PE-GenericFileManagement,
pinCodes PE-PINCodes,
pukCodes PE-PUKCodes,
akaParameter PE-AKAParameter,
cdmaParameter PE-CDMAParameter,
securityDomain PE-SecurityDomain,
rfm PE-RFM,
application PE-Application,
nonStandard PE-NonStandard,
end PE-End,
rfu1 PE-Dummy, -- this avoids renumbering of tag values
rfu2 PE-Dummy, -- in case other non-file-system PEs are
rfu3 PE-Dummy, -- added here in future versions
rfu4 PE-Dummy,
rfu5 PE-Dummy,
/* PEs related to file system creation using templates defined in this specification */
mf PE-MF,
cd PE-CD,
telecom PE-TELECOM,
usim PE-USIM,
opt-usim PE-OPT-USIM,
isim PE-ISIM,
opt-isim PE-OPT-ISIM,
phonebook PE-PHONEBOOK,
gsm-access PE-GSM-ACCESS,
csim PE-CSIM,
opt-csim PE-OPT-CSIM,
...
}
PE-Dummy ::= SEQUENCE {
}
ProfileHeader ::= SEQUENCE {
major-version UInt8, -- set to 2 for this version of the specification
minor-version UInt8, -- set to 1 for this version of the specification
profileType UTF8String OPTIONAL, -- Profile type
iccid OCTET STRING (SIZE (10)), -- ICCID of the Profile
pol OCTET STRING OPTIONAL,
eUICC-Mandatory-services ServicesList,
eUICC-Mandatory-GFSTEList SEQUENCE OF OBJECT IDENTIFIER,
connectivityParameters OCTET STRING OPTIONAL
}
ServicesList ::= SEQUENCE {
/* Contactless */
contactless NULL OPTIONAL,
/* NAAs */
usim NULL OPTIONAL,
isim NULL OPTIONAL,
csim NULL OPTIONAL,
/* NAA algorithms */
milenage NULL OPTIONAL,
tuak128 NULL OPTIONAL,
cave NULL OPTIONAL,
/* USIM/ISIM services */
gba-usim NULL OPTIONAL,
gba-isim NULL OPTIONAL,
mbms NULL OPTIONAL,
eap NULL OPTIONAL,
/* Application Runtime environment */
javacard NULL OPTIONAL,
multos NULL OPTIONAL,
/* NAAs */
multiple-usim NULL OPTIONAL,
multiple-isim NULL OPTIONAL,
multiple-csim NULL OPTIONAL,
/* Additional algorithms */
tuak256 NULL OPTIONAL,
usim-test-algorithm NULL OPTIONAL,
/* File type */
ber-tlv NULL OPTIONAL,
/* Linked files */
dfLink NULL OPTIONAL
}
ProprietaryInfo ::= SEQUENCE {
specialFileInformation [PRIVATE 0] OCTET STRING (SIZE (1)) DEFAULT '00'H,
/* fillPattern, repeatPattern
only one of the parameters may be present. Coding and rules defined within ETSI TS 102 222 [102 222] apply
*/
fillPattern [PRIVATE 1] OCTET STRING(SIZE(1..200))OPTIONAL,
repeatPattern [PRIVATE 2] OCTET STRING(SIZE(1..200))OPTIONAL
}
Fcp ::= SEQUENCE {
/* The fileDescriptor shall be encoded as defined in
ETSI TS 102 222 [102 222] */
fileDescriptor [2] OCTET STRING (SIZE(2..4)) OPTIONAL,
/* fileID
For ADFs, the fileID is a temporary value (named temporary file ID in this document) used only during the profile creation. It has to be unique within a profile and is used for referencing files within this ADF using the file path.
*/
fileID [3] OCTET STRING (SIZE(2)) OPTIONAL,
/* dfName
Only applies for ADFs
*/
dfName [4] ApplicationIdentifier OPTIONAL,
/* lcsi
Coding according to ETSI TS 102 222 [102 222]
*/
lcsi [10] OCTET STRING (SIZE (1)) DEFAULT '05'H,
/* securityAttributesReferenced
Either containing EF ARR ID[2] + record number[1] or
record number[1] only and EF ARR ID implicitly known from the
context, i.e. '2F06' within the MF and '6F06' otherwise
*/
securityAttributesReferenced [11] OCTET STRING OPTIONAL,
/* efFileSize
Mandatory for EF file types
Not allowed for DF files
Shall be encoded on the minimum number of octets possible
(i.e. no leading bytes set to '00' are allowed)
*/
efFileSize [0] OCTET STRING OPTIONAL,
/* pinStatusTemplateDO
Not allowed for EF files
Mandatory for DF/ADF files
(e.g. '01810A'H as a typical value for an ADF_USIM)
*/
pinStatusTemplateDO [PRIVATE 6] OCTET STRING OPTIONAL,
/* shortEFID
Not allowed for DF files
Optional for EF file types / equivalent to ETSI TS 102 222
shortEFID not available: in case of a template file, SFI is set according to the respective file specification. For files created by using GenericFileManagement, SFI is calculated from FID
shortEFID available but not value: no SFI is supported
for this EF
shortEFID available with a length of 1 byte:
The Short File Identifier is coded from bits b8 to b4.
Bits b3,b2,b1 = 000.
*/
shortEFID [8] OCTET STRING (SIZE (0..1)) OPTIONAL,
/* proprietaryEFInfo
Optional for EF file types
Not allowed for DF files
*/
proprietaryEFInfo [5] ProprietaryInfo OPTIONAL,
/* linkPath
Specifies the path to the file to which shall be linked,
also valid for DFs/ADFs. Files within ADFs are addressed
by the temporary file ID of the respective ADF. For the coding
see filePath.
*/
linkPath [PRIVATE 7] OCTET STRING OPTIONAL
}
File ::= SEQUENCE OF CHOICE {
doNotCreate NULL, /* Indicates that this file shall not be created by the eUICC even if present in a PE referencing a "Created by Default" template.
This flag has no effect for the creation of files in the MF and shall not be used for all the files listed in a "Not Created by Default" template*/
fileDescriptor Fcp,
fillFileOffset UInt16,
fillFileContent OCTET STRING
}
PE-MF ::= SEQUENCE {
mf-header PEHeader,
templateID OBJECT IDENTIFIER,
mf File,
ef-pl File OPTIONAL,
ef-iccid File,
ef-dir File,
ef-arr File,
ef-umpc File OPTIONAL
}
PE-CD ::= SEQUENCE {
cd-header PEHeader,
templateID OBJECT IDENTIFIER,
df-cd File,
ef-launchpad File OPTIONAL, --
ef-icon File OPTIONAL
}
PE-TELECOM ::= SEQUENCE {
telecom-header PEHeader,
templateID OBJECT IDENTIFIER,
df-telecom File,
ef-arr File OPTIONAL,
ef-rma File OPTIONAL,
ef-sume File OPTIONAL,
ef-ice-dn File OPTIONAL,
ef-ice-ff File OPTIONAL,
ef-psismsc File OPTIONAL,
df-graphics File OPTIONAL,
ef-img File OPTIONAL,
ef-iidf File OPTIONAL,
ef-ice-graphics File OPTIONAL,
ef-launch-scws File OPTIONAL,
ef-icon File OPTIONAL,
df-phonebook File OPTIONAL,
ef-pbr File OPTIONAL,
ef-ext1 File OPTIONAL,
ef-aas File OPTIONAL,
ef-gas File OPTIONAL,
ef-psc File OPTIONAL,
ef-cc File OPTIONAL,
ef-puid File OPTIONAL,
ef-iap File OPTIONAL,
ef-adn File OPTIONAL,
ef-pbc File OPTIONAL,
ef-anr File OPTIONAL,
ef-puri File OPTIONAL,
ef-email File OPTIONAL,
ef-sne File OPTIONAL,
ef-uid File OPTIONAL,
ef-grp File OPTIONAL,
ef-ccp1 File OPTIONAL,
df-multimedia File OPTIONAL,
ef-mml File OPTIONAL,
ef-mmdf File OPTIONAL,
df-mmss File OPTIONAL,
ef-mlpl File OPTIONAL,
ef-mspl File OPTIONAL,
ef-mmssmode File OPTIONAL
}
PE-USIM ::= SEQUENCE {
usim-header PEHeader,
templateID OBJECT IDENTIFIER,
adf-usim File,
ef-imsi File,
ef-arr File,
ef-keys File OPTIONAL,
ef-keysPS File OPTIONAL,
ef-hpplmn File OPTIONAL,
ef-ust File, /* The content of UST file shall be modified by the eUICC during profile installation according to the functionality supported by the eUICC platform i.e. in the case where a service is not supported (and not indicated as required) the related bit(s) will be set to zero */
ef-fdn File OPTIONAL,
ef-sms File OPTIONAL,
ef-smsp File OPTIONAL,
ef-smss File OPTIONAL,
ef-spn File,
ef-est File,
ef-start-hfn File OPTIONAL,
ef-threshold File OPTIONAL,
ef-psloci File OPTIONAL,
ef-acc File,
ef-fplmn File OPTIONAL,
ef-loci File OPTIONAL,
ef-ad File OPTIONAL,
ef-ecc File,
ef-netpar File OPTIONAL,
ef-epsloci File OPTIONAL,
ef-epsnsc File OPTIONAL
}
PE-OPT-USIM ::= SEQUENCE {
optusim-header PEHeader,
templateID OBJECT IDENTIFIER,
ef-li File OPTIONAL,
ef-acmax File OPTIONAL,
ef-acm File OPTIONAL,
ef-gid1 File OPTIONAL,
ef-gid2 File OPTIONAL,
ef-msisdn File OPTIONAL,
ef-puct File OPTIONAL,
ef-cbmi File OPTIONAL,
ef-cbmid File OPTIONAL,
ef-sdn File OPTIONAL,
ef-ext2 File OPTIONAL,
ef-ext3 File OPTIONAL,
ef-cbmir File OPTIONAL,
ef-plmnwact File OPTIONAL,
ef-oplmnwact File OPTIONAL,
ef-hplmnwact File OPTIONAL,
ef-dck File OPTIONAL,
ef-cnl File OPTIONAL,
ef-smsr File OPTIONAL,
ef-bdn File OPTIONAL,
ef-ext5 File OPTIONAL,
ef-ccp2 File OPTIONAL,
ef-ext4 File OPTIONAL,
ef-acl File OPTIONAL,
ef-cmi File OPTIONAL,
ef-ici File OPTIONAL,
ef-oci File OPTIONAL,
ef-ict File OPTIONAL,
ef-oct File OPTIONAL,
ef-vgcs File OPTIONAL,
ef-vgcss File OPTIONAL,
ef-vbs File OPTIONAL,
ef-vbss File OPTIONAL,
ef-emlpp File OPTIONAL,
ef-aaem File OPTIONAL,
ef-hiddenkey File OPTIONAL,
ef-pnn File OPTIONAL,
ef-opl File OPTIONAL,
ef-mbdn File OPTIONAL,
ef-ext6 File OPTIONAL,
ef-mbi File OPTIONAL,
ef-mwis File OPTIONAL,
ef-cfis File OPTIONAL,
ef-ext7 File OPTIONAL,
ef-spdi File OPTIONAL,
ef-mmsn File OPTIONAL,
ef-ext8 File OPTIONAL,
ef-mmsicp File OPTIONAL,
ef-mmsup File OPTIONAL,
ef-mmsucp File OPTIONAL,
ef-nia File OPTIONAL,
ef-vgcsca File OPTIONAL,
ef-vbsca File OPTIONAL,
ef-gbabp File OPTIONAL,
ef-msk File OPTIONAL,
ef-muk File OPTIONAL,
ef-ehplmn File OPTIONAL,
ef-gbanl File OPTIONAL,
ef-ehplmnpi File OPTIONAL,
ef-lrplmnsi File OPTIONAL,
ef-nafkca File OPTIONAL,
ef-spni File OPTIONAL,
ef-pnni File OPTIONAL,
ef-ncp-ip File OPTIONAL,
ef-ufc File OPTIONAL,
ef-nasconfig File OPTIONAL,
ef-uicciari File OPTIONAL,
ef-pws File OPTIONAL,
ef-fdnuri File OPTIONAL,
ef-bdnuri File OPTIONAL,
ef-sdnuri File OPTIONAL,
ef-iwl File OPTIONAL,
ef-ips File OPTIONAL,
ef-ipd File OPTIONAL
}
PE-PHONEBOOK ::= SEQUENCE {
phonebook-header PEHeader,
templateID OBJECT IDENTIFIER,
df-phonebook File,
ef-pbr File OPTIONAL,
ef-ext1 File OPTIONAL,
ef-aas File OPTIONAL,
ef-gas File OPTIONAL,
ef-psc File OPTIONAL,
ef-cc File OPTIONAL,
ef-puid File OPTIONAL,
ef-iap File OPTIONAL,
ef-adn File OPTIONAL,
ef-pbc File OPTIONAL,
ef-anr File OPTIONAL,
ef-puri File OPTIONAL,
ef-email File OPTIONAL,
ef-sne File OPTIONAL,
ef-uid File OPTIONAL,
ef-grp File OPTIONAL,
ef-ccp1 File OPTIONAL
}
PE-GSM-ACCESS ::= SEQUENCE {
gsm-access-header PEHeader,
templateID OBJECT IDENTIFIER,
df-gsm-access File,
ef-kc File OPTIONAL,
ef-kcgprs File OPTIONAL,
ef-cpbcch File OPTIONAL,
ef-invscan File OPTIONAL
}
PE-ISIM ::= SEQUENCE {
isim-header PEHeader,
templateID OBJECT IDENTIFIER,
adf-isim File,
ef-impi File,
ef-impu File,
ef-domain File,
ef-ist File, /* The content of IST file shall be modified by the eUICC during profile installation according to the functionality supported by the eUICC platform i.e. in the case where a service is not supported (and not indicated as required) the related bit(s) will be set to zero */
ef-ad File OPTIONAL,
ef-arr File
}
PE-OPT-ISIM ::= SEQUENCE {
optisim-header PEHeader,
templateID OBJECT IDENTIFIER,
ef-pcscf File OPTIONAL,
ef-sms File OPTIONAL,
ef-smsp File OPTIONAL,
ef-smss File OPTIONAL,
ef-smsr File OPTIONAL,
ef-gbabp File OPTIONAL,
ef-gbanl File OPTIONAL,
ef-nafkca File OPTIONAL,
ef-uicciari File OPTIONAL
}
PE-CSIM ::= SEQUENCE {
csim-header PEHeader,
templateID OBJECT IDENTIFIER,
adf-csim File,
ef-arr File,
ef-call-count File,
ef-imsi-m File,
ef-imsi-t File,
ef-tmsi File,
ef-ah File,
ef-aop File,
ef-aloc File,
ef-cdmahome File,
ef-znregi File,
ef-snregi File,
ef-distregi File,
ef-accolc File,
ef-term File,
ef-acp File,
ef-prl File,
ef-ruimid File,
ef-csim-st File,
ef-spc File,
ef-otapaspc File,
ef-namlock File,
ef-ota File,
ef-sp File,
ef-esn-meid-me File,
ef-li File,
ef-usgind File,
ef-ad File,
ef-max-prl File,
ef-spcs File,
ef-mecrp File,
ef-home-tag File,
ef-group-tag File,
ef-specific-tag File,
ef-call-prompt File
}
The gui/ subdirectory contains an ASN.1 Studio project for this sample. With ASN.1 Studio you can:
This sample is provided solely for illustration purposes, for example to demonstrate usage of the OSS ASN.1 Tools API with eUICC profile packages. It does not represent a complete application. To build and run this sample, you must use a trial or licensed version of the appropriate OSS ASN.1 Tools. The copyright and license statements included in each source file remain fully applicable.
If you have questions about using this sample, contact OSS Nokalva Support.