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 Windows 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 Windows batch script (run.bat) is included for 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). |
| TestProfile.der | Sample eUICC profile package saved in DER format. |
| TestProfile.json | Sample eUICC profile package saved in JSON format. |
| app.cs | Simple C# program that creates and encodes an eUICC profile package in DER and JSON formats. |
| run.bat | Windows batch script that runs this sample test. |
| 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 you use the OSS command prompt window, you do not need to set environment variables to run this sample. Otherwise, ensure the following are defined:
If using Visual Studio, run the Microsoft vsvars32.bat script to set up the .NET command-line environment. If Visual Studio is not installed, ensure your PATH includes the required .NET directories. For details, see ossvars.bat installed with the product.
run
run clean
Note: The C# source code in this sample is platform-independent. Windows commands are shown as an example, but equivalent samples and run instructions may be available for 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, app.cs. 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 the eUICC profile can be constructed using the API of
// generated C# classes and how this profile can be saved to the disk file
// in the binary (DER) or text (JSON) format.
// Classes generated from ASN.1 specification.
using PEDefinitions;
using PEDefinitions.PEDefinitionsModule;
// Classes from the OSS runtime library.
using Oss.Asn1;
// C# system classes.
using System;
using System.Collections.Generic;
using System.IO;
public class Program
{
public static int Main(string[] args)
{
// Create the sample profile package using profile elements defined in the
// PEDefinitions.asn
Console.WriteLine("Creating the test profile package ...");
List<ProfileElement> testProfile = CreateTestProfile();
Console.WriteLine("The profile package created:");
PrintProfile(testProfile);
const string basename = "euicc";
string der_file = basename + ".der";
string json_file = basename + ".json";
// Save the test profile package to the disk file in the binary format (DER)
DerCodec der = new DerCodec();
try {
Console.WriteLine();
Console.WriteLine("Saving the test profile package to the {0} file using DER format ...", der_file);
SaveProfile(testProfile, der, der_file);
DumpFile(der_file, false);
} catch (Exception e) {
Console.WriteLine("SaveProfile failed: {0}", e);
return 1;
}
// Save the test profile package to the disk file in the text format (JSON)
JsonCodec json = new JsonCodec();
try {
Console.WriteLine();
Console.WriteLine("Saving the test profile package to the {0} file using JSON format ...", json_file);
SaveProfile(testProfile, json, json_file);
DumpFile(json_file, true);
} catch (Exception e) {
Console.WriteLine("SaveProfile failed: {0}", e);
return 2;
}
// Now load the profile package from the binary (DER) file and assert that
// it's value is identical to the original test profile package
try {
Console.WriteLine();
Console.WriteLine("Loading the test profile package from the {0} file ...", der_file);
List<ProfileElement> decoded = LoadProfile(der_file, der);
// Assert that the decoded value is identical to the original one
Console.WriteLine("Comparing loaded profile package with the original value ... {0}",
IdenticalProfiles(testProfile, decoded) ? "success" : "failure");
} catch (Exception e) {
Console.WriteLine("LoadProfile failed: {0}", e);
return 3;
}
// Finally load the profile package from the text (JSON) file and assert that
// it's value is identical to the original test profile
try {
Console.WriteLine();
Console.WriteLine("Loading the test profile package from the {0} file ...", json_file);
List<ProfileElement> decoded = LoadProfile(json_file, json);
// Assert that the decoded value is identical to the original one
Console.WriteLine("Comparing loaded profile package with the original value ... {0}",
IdenticalProfiles(testProfile, decoded) ? "success" : "failure");
} catch (Exception e) {
Console.WriteLine("LoadProfile failed: {0}", e);
return 4;
}
return 0;
}
/// <summary>
/// The test profile package.
/// </summary>
private static ProfileElement[] _testProfile = {
Values.HeaderVal,
Values.MfVal,
Values.AltMFVal,
Values.PukVal,
Values.PinVal,
Values.UsimValue,
Values.AltUsimValue,
Values.UsimPin,
Values.AkaMilenage,
Values.CdmaParam,
Values.MnoSdValue,
Values.MnoSdCompValue,
Values.SsdValue,
Values.Applet1,
Values.Applet2,
Values.RfmUicc,
Values.RfmUsim,
Values.GsmaProp,
Values.EndVal
};
/// <summary>
/// Prints the profile package.
/// </summary>
/// <param name="profile">The input profile package.</param>
private static void PrintProfile(List<ProfileElement> profile)
{
foreach (ProfileElement pe in profile)
ValueNotationFormatter.Print(pe, Console.Out);
}
/// <summary>
/// Creates the test profile package to be encoded with DER and JSON.
/// </summary>
private static List<ProfileElement> CreateTestProfile()
{
List<ProfileElement> testProfile = new List<ProfileElement>();
// Demonstrate how the ProfileHeader element can be constructed
// using the API of generated C# classes
ProfileHeader header = new ProfileHeader();
header.MajorVersion = 2;
header.MinorVersion = 1;
header.ProfileType = "SIMalliance Sample Profile";
header.Iccid = new byte[] {0x89, 0x01, 0x99, 0x90, 0x00, 0x12, 0x34, 0x56, 0x78, 0x93};
ServicesList serviceList = new ServicesList();
serviceList.Usim = 1;
serviceList.Milenage = 1;
serviceList.Javacard = 1;
header.EUICCMandatoryServices = serviceList;
header.EUICCMandatoryGFSTEList = new ProfileHeader.EUICCMandatoryGFSTEListType(
new ObjectIdentifier[] {
new ObjectIdentifier("2.23.143.1.2.1"),
new ObjectIdentifier("2.23.143.1.2.4")
});
// Add the header to the test profile package
testProfile.Add( new ProfileElement() { Header = header});
// Add other profile elements from the test profile package defined in the
// PEDefinitions.asn
foreach (ProfileElement pe in _testProfile) {
if (pe.Header != null) {
// We have added the ProfileHeader element already
continue;
}
testProfile.Add(pe);
}
return testProfile;
}
/// <summary>
/// Serializes the profile package and saves it into the disk file.
/// </summary>
/// <param name="profile">The profile package.</param>
/// <param name="codec">The codec to be used for serialization.</param>
/// <param name="fileName">The name of the output file.</param>
private static void SaveProfile(List<ProfileElement> profile, BaseCodec codec, String fileName)
{
using (FileStream output = System.IO.File.OpenWrite(fileName))
{
foreach (ProfileElement pe in profile)
codec.Encode(pe, output);
}
}
/// <summary>
/// Prints the contents of the disk file.
/// </summary>
/// <param name="fileName">The name of the file.</param>
/// <param name="isText">false indicates that the contents must be printed as hex dump.</param>
private static void DumpFile(string fileName, bool isText)
{
Console.WriteLine("The contents of the {0} file:", fileName);
if (isText) {
using (StreamReader input = System.IO.File.OpenText(fileName))
{
string text = input.ReadToEnd();
Console.WriteLine("{0}", text);
}
} else {
using (FileStream input = System.IO.File.OpenRead(fileName))
{
int len = (int)input.Length;
byte[] bytes = new byte[len];
input.Read(bytes, 0, len);
ValueNotationFormatter.Print(bytes, len, Console.Out);
}
}
}
/// <summary>
/// Loads serialized profile package from the disk file.
/// </summary>
/// <param name="fileName">The name of the input file.</param>
/// <param name="codec">The codec to be used for de-serialization.</param>
/// <returns>The profile package.</returns>
private static List<ProfileElement> LoadProfile(String fileName, BaseCodec codec)
{
using (FileStream input = System.IO.File.OpenRead(fileName))
{
List<ProfileElement> profile = new List<ProfileElement>();
long eof = input.Length;
while (input.Position < eof) {
ProfileElement pe = new ProfileElement();
codec.Decode(input, pe);
profile.Add(pe);
}
return profile;
}
}
/// <summary>
/// Compares two profile packages for identity.
/// </summary>
/// <returns>true when profile packages are identical.</returns>
private static bool IdenticalProfiles(
List<ProfileElement> original, List<ProfileElement> decoded)
{
int length = original.Count;
if (decoded.Count != length) return false;
for (int i = 0; i < length; i++)
if (!original[i].Equals(decoded[i])) return false;
return true;
}
}
This is the expected output when running the sample:
Creating eUICC profile package... Done Encoding to DER format... Done Saving TestProfile.der... Done Encoding to JSON format... Done Saving TestProfile.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.