eUICC Profile Package Java Sample Code Using OSS ASN.1 Tools


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 Unix shell script (run.sh) is included for running the test program using the OSS ASN.1/Java runtime.

To explore more samples (LTE RRC, 5G RRC, S1AP, X2AP), visit the main Sample Code page.

Overview

This sample shows how to:

  • Initialize the OSS ASN.1/Java runtime for the eUICC schema.
  • Create an eUICC profile package.
  • Encode the package into DER format.
  • Encode the package into JSON format.
  • Save encoded data to output files.
  • Run the sample test program using the provided run.sh script.

Files in This Sample

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.
Teuicc.java Simple Java program that creates and encodes an eUICC profile package in DER and JSON formats.
euicc.cmd ASN.1 compiler command file used to ASN.1-compile the eUICC Profile Package specification.
run.sh Unix shell script that runs the test.
gui/ ASN.1 Studio project for viewing/compiling schema and generating sample data.
sample.out Expected output from this test.

Build and Run Instructions

(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 Java.

1. Verify environment variables

Before running the test, ensure the following are set appropriately:

  • OSS_ASN1_JAVA
  • CLASSPATH
  • PATH
2. Run the sample
./run.sh
3. Clean up generated files
./run.sh cleanup
4. Other Platforms

Note: The Java 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.

Code Listing: Teuicc.java

The following listing shows the main Java source file for this sample test program, Teuicc.java. 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.

Show Teuicc.java source code
/*****************************************************************************/
/* 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 package can be constructed using the API of
 * generated Java classes and how this profile package can be saved to the disk file
 * in the binary (DER) or text (JSON) format.
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

import com.oss.asn1.*;
import com.oss.util.*;

import pedefinitions.Pedefinitions;
import pedefinitions.pedefinitions.*;

public class Teuicc
{
     public static void main(String[] args)
     {
	// Initialize the runtime
	try {
	    Pedefinitions.initialize();
	} catch (Exception e) {
	    System.out.println("Initialization exception: " + e);
	    System.exit(1);
	}
        // Create the sample profile package using profile elements defined in the
        // PEDefinitions.asn
        System.out.println("Creating the test profile package ...");
        ArrayList<ProfileElement> testProfile = createTestProfile();
        System.out.println("The profile package created:");
        printProfile(testProfile);

        final String base = "euicc";
        final String der_file = base + ".der";
        final String json_file = base + ".json";
        // Save the test profile package to the disk file in the binary format (DER)
        DERCoder der = Pedefinitions.getDERCoder();
        try {
            System.out.printf("\nSaving the test profile package to the %s file using DER format ...\n", der_file);
            saveProfile(testProfile, der, der_file);
            dumpFile(der_file, false);
        } catch (Exception e) {
            System.out.printf("SaveProfile failed: %s\n", e);
        }
        // Save the test profile package to the disk file in the text format (JSON)
        JSONCoder json = Pedefinitions.getJSONCoder();
        try {
            System.out.printf("\nSaving the test profile package to the %s file using JSON format ...\n", json_file);
            saveProfile(testProfile, json, json_file);
            dumpFile(json_file, true);
        } catch (Exception e) {
            System.out.printf("SaveProfile failed: %s\n", e);
        }
        // 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 {
            System.out.printf("\nLoading the test profile package from the %s file ...\n", der_file);
            ArrayList<ProfileElement> decoded = loadProfile(der_file, der);
            // Assert that the decoded value is identical to the original one
            System.out.printf("Comparing loaded profile package with the original value ... %s\n",
                identicalProfiles(testProfile, decoded) ? "success" : "failure");
        } catch (Exception e) {
            System.out.printf("LoadProfile failed: %s\n", e);
        }
        // Finally load the profile package from the text (JSON) file and assert that
        // it's value is identical to the original test profile package
        try {
            System.out.printf("\nLoading the test profile package from the %s file ...\n", json_file);
            ArrayList<ProfileElement> decoded = loadProfile(json_file, json);
            // Assert that the decoded value is identical to the original one
            System.out.printf("Comparing loaded profile package with the original value ... %s\n",
                identicalProfiles(testProfile, decoded) ? "success" : "failure");
        } catch (Exception e) {
            System.out.printf("LoadProfile failed: %s\n", e);
        }
    }

    /*
     * The test profile package.
     */
    private final static ProfileElement[] _testProfile = {
        PEDefinitions.headerVal,
        PEDefinitions.mfVal,
        PEDefinitions.altMFVal,
        PEDefinitions.pukVal,
        PEDefinitions.pinVal,
        PEDefinitions.usimValue,
        PEDefinitions.altUsimValue,
        PEDefinitions.usimPin,
        PEDefinitions.akaMilenage,
        PEDefinitions.cdmaParam,
        PEDefinitions.mnoSdValue,
        PEDefinitions.mnoSdCompValue,
        PEDefinitions.ssdValue,
        PEDefinitions.applet1,
        PEDefinitions.applet2,
        PEDefinitions.rfmUicc,
        PEDefinitions.rfmUsim,
        PEDefinitions.gsmaProp,
        PEDefinitions.endVal
    };

    /*
     * Prints the profile package.
     */
    private static void printProfile(ArrayList<ProfileElement> profile)
    {
        int count = 0;
        for (ProfileElement pe:profile)
            System.out.printf("element%d ProfileElement ::= %s\n", ++count,
                pe.toString(_fmt));
    }

    private static final ASN1ValueFormat _fmt = new ASN1ValueFormat();

    /*
     * Parses the string representation of the OBJECT IDENTIFIER to the
     * ObjectIdentifier Java object.
     */
    private static ObjectIdentifier makeOID(String value)
    {
        try {
            return new ObjectIdentifier(value);
        } catch (BadObjectIdentifierException e) {
             throw new RuntimeException(e);
        }
    }

    /*
     * Creates the test profile package to be encoded with DER and JSON.
     */
    private static ArrayList<ProfileElement> createTestProfile()
    {
        ArrayList<ProfileElement> testProfile = new ArrayList<>();
        // Demonstrate how the ProfileHeader element can be constructed
        // using the API of generated Java classes
        ProfileHeader header = new ProfileHeader();
        header.setMajor_version(new UInt8(2));
        header.setMinor_version(new UInt8(1));
        header.setProfileType(new UTF8String16("SIMalliance Sample Profile"));
        header.setIccid(new OctetString(HexTool.parseHex("89019990001234567893", true)));
        ServicesList serviceList = new ServicesList();
        serviceList.setUsim(Null.VALUE);
        serviceList.setMilenage(Null.VALUE);
        serviceList.setJavacard(Null.VALUE);
        header.setEUICC_Mandatory_services(serviceList);
        header.setEUICC_Mandatory_GFSTEList(
            new ProfileHeader.EUICC_Mandatory_GFSTEList(
                new ObjectIdentifier[] {
                    makeOID("2.23.143.1.2.1"),
                    makeOID("2.23.143.1.2.4")
                }
            )
        );
        // Add the header to the test profile package value
        testProfile.add(ProfileElement.createProfileElementWithHeader(header));
        // Add other profile elements from the test profile package defined in the
        // PEDefinitions.asn
        for (ProfileElement pe:_testProfile) {
            if (pe.hasHeader()) {
                // We have added the ProfileHeader element already
                continue;
            }
            testProfile.add(pe);
        }

        return testProfile;
    }

    /*
     * Serializes the profile package and saves it into the disk file.
     */
    private static void saveProfile(
        ArrayList<ProfileElement> profile, Coder coder, String fileName)
            throws IOException, EncodeNotSupportedException, EncodeFailedException
    {
        try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName)))
        {
            for (ProfileElement pe:profile)
                coder.encode(pe, out);
        }
    }

    /*
     * Prints the contents of the disk file.
     */
    private static void dumpFile(String fileName, boolean isText) throws IOException
    {
        java.io.File f = new java.io.File(fileName);
        int length = (int)f.length();
        byte[] contents = new byte[length];
        try (FileInputStream in = new FileInputStream(f)) {
            for (int offset = 0; offset < length; ) {
                int n = in.read(contents, offset, length - offset);
                if (n < 0) throw new EOFException();
                offset += n;
            }
        }
        System.out.printf("The contents of the %s file:\n", fileName);
        if (isText) {
            System.out.println(new String(contents, StandardCharsets.UTF_8));
        } else {
            HexTool.printHex(contents);
        }
    }

    /*
     * Loads serialized profile package from the disk file.
     */
    private static ArrayList<ProfileElement> loadProfile(String fileName, Coder coder)
        throws IOException, DecodeNotSupportedException, DecodeFailedException
    {
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileName)))
        {
            ArrayList<ProfileElement> profile = new ArrayList<>();
            while (in.available() > 0) {
                ProfileElement pe = coder.decode(in, new ProfileElement());
                profile.add(pe);
            }
            return profile;
        }
    }

    /*
     * Compares two profile packages for identity.
     */
    private static boolean identicalProfiles(
        ArrayList<ProfileElement> original, ArrayList<ProfileElement> decoded)
    {
        int length = original.size();
        if (decoded.size() != length) return false;
        for (int i = 0; i < length; i++)
            if (!original.get(i).equals(decoded.get(i))) return false;

        return true;
    }
}

Expected Output (Excerpt)

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

ASN.1 Schema Excerpt (PEDefinitions.asn)

Show excerpt from PEDefinitions.asn
-- 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
}

Using ASN.1 Studio (Optional)

The gui/ subdirectory contains an ASN.1 Studio project for this sample. With ASN.1 Studio you can:

  • Open the eUICC ASN.1 module.
  • Generate code from the ASN.1 schema.
  • Create and edit sample encoded eUICC profile packages.
  • Export projects to a shell script. When exporting teuicc.a1sproj, specify Teuicc as the "Class or .jar name to execute".

Related Samples

Disclaimer

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.

Need Help?

If you have questions about using this sample, contact OSS Nokalva Support.

See Also