PEDefinitions {joint-iso-itu-t(2) international-organizations(23) tca(143) euicc-profile(1) spec-version(1) version-three(3)}
DEFINITIONS
AUTOMATIC TAGS
EXTENSIBILITY IMPLIED ::=
BEGIN
EXPORTS UICCCapability; -- Definition to be used in remote provisioning specifications for eligibility check

-- 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,
	eap PE-EAP,
	df-5gs PE-DF-5GS,
	df-saip PE-DF-SAIP,
	df-snpn PE-DF-SNPN,
	df-5gprose PE-DF-5GPROSE,
	iot PE-IoT,
	opt-iot PE-OPT-IoT,
...
}

PE-Dummy ::= SEQUENCE {
}

ProfileHeader ::= SEQUENCE {
major-version UInt8, -- set to 3 for this version of the specification
minor-version UInt8, -- set to 3 for this version of the specification
profileType UTF8String (SIZE (1..100)) 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,
eUICC-Mandatory-AIDs SEQUENCE OF SEQUENCE {
	aid ApplicationIdentifier,
	version OCTET STRING (SIZE(2))
} OPTIONAL,
iotOptions IotOptions OPTIONAL -- details for IoT Minimal Profile, mandatory for IoT Minimal Profiles
}

IotOptions ::= SEQUENCE {
pix OCTET STRING (SIZE (7..11)) -- PIX value to be used for IoT Minimal Profiles
}

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 service */
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,

/* Support of CAT_TP */
cat-tp NULL OPTIONAL,

/* Support of 5G */
get-identity NULL OPTIONAL,
profile-a-x25519 NULL OPTIONAL,
profile-b-p256 NULL OPTIONAL,
suciCalculatorApi NULL OPTIONAL,

/* Support of DNS Resolution */
dns-resolution NULL OPTIONAL,

/* Support of GP Amd F SCP11 */
scp11ac NULL OPTIONAL,
scp11c-authorization-mechanism NULL OPTIONAL,

/* Support of S16 mode as defined in GP Amd D and Amd F */
s16mode NULL OPTIONAL,

/* Support of enhanced AKA algorithm defined in 3GPP */
eaka NULL OPTIONAL
}

-- Definition of UICCCapability
UICCCapability ::= BIT STRING {
	contactlessSupport(0), 	-- Contactless (SWP, HCI and associated APIs)
	usimSupport(1), 		-- USIM as defined by 3GPP
	isimSupport(2), 		-- ISIM as defined by 3GPP
	csimSupport(3), 		-- CSIM as defined by 3GPP2

	akaMilenage(4), 		-- Milenage as AKA algorithm
	akaCave(5),				-- CAVE as authentication algorithm
	akaTuak128(6), 			-- TUAK as AKA algorithm with 128 bit key length
	akaTuak256(7), 			-- TUAK as AKA algorithm with 256 bit key length
	usimTestAlgorithm(8), 	-- USIM test algorithm
	rfu2(9), 					-- reserved for further algorithms

	gbaAuthenUsim(10),	-- GBA authentication in the context of USIM
	gbaAuthenISim(11), 	-- GBA authentication in the context of ISIM
	mbmsAuthenUsim(12), 	-- MBMS authentication in the context of USIM
	eapClient(13), 			-- EAP client

	javacard(14),				-- Java Card(TM) support
	multos(15),				-- Multos support

	multipleUsimSupport(16),	-- Multiple USIM applications are supported within the same Profile
	multipleIsimSupport(17),	-- Multiple ISIM applications are supported within the same Profile
	multipleCsimSupport(18),	-- Multiple CSIM applications are supported within the same Profile

	berTlvFileSupport(19),	-- BER TLV files
	dfLinkSupport(20),	-- Linked Directory Files
	catTp(21),					-- Support of CAT TP
	getIdentity(22),		-- Support of the GET IDENTITY command as defined in ETSI TS 102 221
	profile-a-x25519(23),	-- Support of ECIES Profile A as defined in 3GPP TS 33.501 [87]
	profile-b-p256(24),	-- Support of ECIES Profile B as defined in 3GPP TS 33.501 [87]
	suciCalculatorApi(25),	-- Support of the associated API for SUCI derivation as defined in 3GPP 31.130 [31.130]
	dns-resolution(26),	-- Support of DNS Resolution as defined by GP Amd B
	scp11ac(27),			-- Support of GP Amd F SCP11 variants a and c
	scp11c-authorization-mechanism(28),	-- Support of SCP11c authorization mechanism (Tag 'BF20')
	s16mode(29),			-- Support of S16 mode as defined in GP Amd D and Amd F
	eaka(30),					-- Support of enhanced AKA algorithm as defined in 3GPP TS [33.102]
	iotminimal(31)			-- Support of IoT Minimal Profile as described in section 7.5
}

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,
	/* Specific parameters for BER-TLV files */
	/* Shall be encoded on the minimum number of octets possible
			(i.e. no leading bytes set to '00' are allowed)*/
	maximumFileSize [6] OCTET STRING OPTIONAL,
	fileDetails [4] OCTET STRING (SIZE(1)) DEFAULT '01'H
}

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: File ID 2F06 is automatically applied for ADFs,
		the MF and all files directly located under the MF
		'6F06' for any other files
		*/
	securityAttributesReferenced [11] OCTET STRING (SIZE (1..3)) OPTIONAL,

		/* efFileSize
		Mandatory for EF file types
		Not allowed for DF files and EF link 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
		*/
	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 provided: in case of a template file, SFI
		is set according to Annex A. For files created
		by using GenericFileManagement, SFI is calculated from FID
		shortEFID provided with no 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. Files within ADFs are addressed
		by the temporary file ID of the respective ADF. For the coding
		see filePath. In case of a template link file, an empty linkPath indicates that the link file shall be turned into an independent file.
		*/
	linkPath [PRIVATE 7] OCTET STRING (SIZE (0..8)) 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,
df-mcs File OPTIONAL,
  ef-mst File OPTIONAL,
  ef-mcs-config File OPTIONAL,
df-v2x File OPTIONAL,
  ef-vst File OPTIONAL,
  ef-v2x-config File OPTIONAL,
  ef-v2xp-pc5 File OPTIONAL,
  ef-v2xp-Uu 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-ial File OPTIONAL,	-- This file was known as ef-iwl in Version 3.2 and earlier of this specification
ef-ips File OPTIONAL,
ef-ipd File OPTIONAL,
ef-epdgid File OPTIONAL,
ef-epdgselection File OPTIONAL,
ef-epdgidem File OPTIONAL,
ef-epdgselectionem File OPTIONAL,
ef-frompreferred File OPTIONAL,
ef-imsconfigdata File OPTIONAL,
ef-3gpppsdataoff File OPTIONAL,
ef-3gpppsdataoffservicelist File OPTIONAL,
ef-xcapconfigdata File OPTIONAL,
ef-earfcnlist File OPTIONAL,
ef-mudmidconfigdata File OPTIONAL,
ef-eaka 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-DF-5GS ::= SEQUENCE {
df-5gs-header PEHeader,
templateID OBJECT IDENTIFIER,
df-df-5gs File,
ef-5gs3gpploci File OPTIONAL,
ef-5gsn3gpploci File OPTIONAL,
ef-5gs3gppnsc File OPTIONAL,
ef-5gsn3gppnsc File OPTIONAL,
ef-5gauthkeys File OPTIONAL,
ef-uac-aic File OPTIONAL,
ef-suci-calc-info File OPTIONAL,
ef-opl5g File OPTIONAL,
ef-supinai File OPTIONAL,
ef-routing-indicator File OPTIONAL,
ef-ursp File OPTIONAL,
ef-tn3gppsnn File OPTIONAL,
ef-cag File OPTIONAL,
ef-sor-cmci File OPTIONAL,
ef-dri File OPTIONAL,
ef-5gsedrx File OPTIONAL,
ef-5gnswo-conf File OPTIONAL,
ef-mchpplmn File OPTIONAL,
ef-kausf-derivation File OPTIONAL
}

PE-DF-SAIP ::= SEQUENCE {
df-saip-header PEHeader,
templateID OBJECT IDENTIFIER,
df-df-saip File,
ef-suci-calc-info-usim File OPTIONAL
}

PE-DF-SNPN ::= SEQUENCE {
df-snpn-header PEHeader,
templateID OBJECT IDENTIFIER,
df-df-snpn File,
ef-pws-snpn File OPTIONAL
}

PE-DF-5GPROSE ::= SEQUENCE {
df-5g-prose-header PEHeader,
templateID OBJECT IDENTIFIER,
df-df-5g-prose File,
ef-5g-prose-st File OPTIONAL,
ef-5g-prose-dd File OPTIONAL,
ef-5g-prose-dc File OPTIONAL,
ef-5g-prose-u2nru File OPTIONAL,
ef-5g-prose-ru File OPTIONAL,
ef-5g-prose-uir 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,
ef-frompreferred File OPTIONAL,
ef-imsconfigdata File OPTIONAL,
ef-xcapconfigdata File OPTIONAL,
ef-webrtcuri File OPTIONAL,
ef-mudmidconfigdata 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
}

PE-OPT-CSIM ::= SEQUENCE {
optcsim-header PEHeader,
templateID OBJECT IDENTIFIER,
ef-ssci File OPTIONAL,
ef-fdn File OPTIONAL,
ef-sms File OPTIONAL,
ef-smsp File OPTIONAL,
ef-smss File OPTIONAL,
ef-ssfc File OPTIONAL,
ef-spn File OPTIONAL,
ef-mdn File OPTIONAL,
ef-ecc File OPTIONAL,
ef-me3gpdopc File OPTIONAL,
ef-3gpdopm File OPTIONAL,
ef-sipcap File OPTIONAL,
ef-mipcap File OPTIONAL,
ef-sipupp File OPTIONAL,
ef-mipupp File OPTIONAL,
ef-sipsp File OPTIONAL,
ef-mipsp File OPTIONAL,
ef-sippapss File OPTIONAL,
ef-puzl File OPTIONAL,
ef-maxpuzl File OPTIONAL,
ef-hrpdcap File OPTIONAL,
ef-hrpdupp File OPTIONAL,
ef-csspr File OPTIONAL,
ef-atc File OPTIONAL,
ef-eprl File OPTIONAL,
ef-bcsmscfg File OPTIONAL,
ef-bcsmspref File OPTIONAL,
ef-bcsmstable File OPTIONAL,
ef-bcsmsp File OPTIONAL,
ef-bakpara File OPTIONAL,
ef-upbakpara File OPTIONAL,
ef-mmsn File OPTIONAL,
ef-ext8 File OPTIONAL,
ef-mmsicp File OPTIONAL,
ef-mmsup File OPTIONAL,
ef-mmsucp File OPTIONAL,
ef-auth-capability File OPTIONAL,
ef-3gcik File OPTIONAL,
ef-dck File OPTIONAL,
ef-gid1 File OPTIONAL,
ef-gid2 File OPTIONAL,
ef-cdmacnl File OPTIONAL,
ef-sf-euimid File OPTIONAL,
ef-est File OPTIONAL,
ef-hidden-key File OPTIONAL,
ef-lcsver File OPTIONAL,
ef-lcscp File OPTIONAL,
ef-sdn File OPTIONAL,
ef-ext2 File OPTIONAL,
ef-ext3 File OPTIONAL,
ef-ici File OPTIONAL,
ef-oci File OPTIONAL,
ef-ext5 File OPTIONAL,
ef-ccp2 File OPTIONAL,
ef-applabels File OPTIONAL,
ef-model File OPTIONAL,
ef-rc File OPTIONAL,
ef-smscap File OPTIONAL,
ef-mipflags File OPTIONAL,
ef-3gpduppext File OPTIONAL,
ef-ipv6cap File OPTIONAL,
ef-tcpconfig File OPTIONAL,
ef-dgc File OPTIONAL,
ef-wapbrowsercp File OPTIONAL,
ef-wapbrowserbm File OPTIONAL,
ef-mmsconfig File OPTIONAL,
ef-jdl File OPTIONAL
}

PE-EAP ::= SEQUENCE {
eap-header PEHeader,
templateID OBJECT IDENTIFIER,
df-eap File,
ef-eapkeys File OPTIONAL,
ef-eapstatus File,
ef-puid File OPTIONAL,
ef-ps File OPTIONAL,
ef-curid File OPTIONAL,
ef-reid File OPTIONAL,
ef-realm File OPTIONAL
}

PE-IoT ::= SEQUENCE {
iot-header PEHeader,
templateID OBJECT IDENTIFIER,
mf File OPTIONAL,
ef-pl File OPTIONAL,
ef-iccid File OPTIONAL,
ef-dir File OPTIONAL,
ef-arr File OPTIONAL,
ef-umpc File OPTIONAL,
adf-usim File OPTIONAL,
ef-imsi File,
ef-arr-usim File OPTIONAL,
ef-keys File OPTIONAL,
ef-keysPS File OPTIONAL,
ef-hpplmn File OPTIONAL,
ef-ust File OPTIONAL,
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 OPTIONAL,
ef-netpar File OPTIONAL
}

PE-OPT-IoT ::= SEQUENCE {
optiot-header PEHeader,
templateID OBJECT IDENTIFIER,
ef-fdn File OPTIONAL,
ef-sms File OPTIONAL,
ef-smsp File OPTIONAL,
ef-smss File OPTIONAL,
ef-spn File OPTIONAL,
ef-est File OPTIONAL,
ef-oplmnwact File OPTIONAL,
ef-hplmnwact File OPTIONAL,
ef-ehplmn File OPTIONAL,
ef-epsloci File OPTIONAL,
ef-epsnsc File OPTIONAL,
df-df-5gs File OPTIONAL,
ef-5gs3gpploci File OPTIONAL,
ef-5gsn3gpploci File OPTIONAL,
ef-5gs3gppnsc File OPTIONAL,
ef-5gsn3gppnsc File OPTIONAL,
ef-5gauthkeys File OPTIONAL,
ef-uac-aic File OPTIONAL,
ef-suci-calc-info File OPTIONAL,
ef-opl5g File OPTIONAL,
ef-supi-nai File OPTIONAL,
ef-routing-indicator File OPTIONAL,
ef-ursp File OPTIONAL,
ef-tn3gppsnn File OPTIONAL,
df-df-saip File OPTIONAL,
ef-suci-calc-info-usim File OPTIONAL
}

/* Create GenericFileManagement
*/
PE-GenericFileManagement ::= SEQUENCE {
		gfm-header PEHeader,
	fileManagementCMD SEQUENCE (SIZE (1..MAX)) OF FileManagement
}

FileManagement ::= SEQUENCE (SIZE (1..MAX)) OF CHOICE {
filePath [0] OCTET STRING (SIZE (0..8)), -- Use Temporary File ID for ADF
createFCP [APPLICATION 2] Fcp,
fillFileOffset UInt16,
fillFileContent [1] OCTET STRING
}

MappingParameter ::= SEQUENCE {
mappingOptions	OCTET STRING (SIZE(1)),
	mappingSource	ApplicationIdentifier
}

AlgoParameter ::= SEQUENCE {
algorithmID INTEGER {
   milenage(1),
   tuak(2),
   usim-test-algorithm(3)
},
algorithmOptions	OCTET STRING (SIZE(1)),
key OCTET STRING,
opc OCTET STRING, /* OPc for Milenage; TOPc for TUAK; ignored in case of usim-test-algorithm */

/* rotationConstants only apply for Milenage; ignored in case of TUAK and usim-test-algorithm */
	rotationConstants	OCTET STRING (SIZE (5)) DEFAULT '4000204060'H,

/* xoringConstants only apply for Milenage; ignored in case of TUAK and usim-test-algorithm */
xoringConstants	OCTET STRING (SIZE (80)) DEFAULT '0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000020000000000000000000000000000000400000000000000000000000000000008'H,
authCounterMax	OCTET STRING (SIZE(3)) OPTIONAL, /* ignored in case of usim-test-algorithm */

/* Number of iterations of Keccak-f[1600] (noted:  ) permutation as recommended by 3GPP TS 35.231 [TUAK] in section 7.2.
This parameter only applies for TUAK; ignored otherwise.*/
numberOfKeccak	UInt8 DEFAULT 1
}

PE-AKAParameter ::= SEQUENCE {
	aka-header PEHeader,
algoConfiguration CHOICE {
		mappingParameter	MappingParameter,
		algoParameter	AlgoParameter
},

sqnOptions		OCTET STRING (SIZE(1)) DEFAULT '02'H, /* ignored in case of usim-test-algorithm */
-- maximum value for sqnDelta and sqnAgeLimit is '07FFFFFFFFFF'H
sqnDelta		OCTET STRING (SIZE(6)) DEFAULT '000010000000'H, /* ignored in case of usim-test-algorithm */
sqnAgeLimit 	OCTET STRING (SIZE(6)) DEFAULT '000010000000'H, /* ignored in case of usim-test-algorithm */

-- Sequence numbers do not include the index (IND)
-- maximum for any values within sqnInit is '07FFFFFFFFFF'H
sqnInit SEQUENCE (SIZE (32)) OF OCTET STRING (SIZE (6)) DEFAULT {
/* Index 0 */'000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H,'000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H,'000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H,'000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H, '000000000000'H,'000000000000'H, '000000000000'H, '000000000000'H,
/* Index 31 */'000000000000'H } /* ignored in case of usim-test-algorithm */
}

PE-CDMAParameter ::= SEQUENCE {
	cdma-header PEHeader,

/* A-Key for CAVE Authentication */
authenticationKey OCTET STRING (SIZE(8)),

/*
Optional value for ssd
Bytes 1..8: value if shared secret data A
Bytes 9..16: value if shared secret data B
*/
ssd OCTET STRING (SIZE (16)) OPTIONAL,

/*
   Shared Secrets for HRPD access authentication
   Includes the shared secret data. This field is coded as defined in section 4.5.7.10 HRPD Access Authentication CHAP SS Parameters of [S0016].
*/
hrpdAccessAuthenticationData OCTET STRING (SIZE (2..32)) OPTIONAL,

/*
   Parameters for simple IP authentication are coded as defined in section 4.5.7.7 SimpleIP CHAP SS Parameters of [S0016].
*/
simpleIPAuthenticationData OCTET STRING (SIZE (3..483)) OPTIONAL,

/*
   Parameters for mobile IP authentication are coded as defined in section 4.5.7.8 MobileIP SS Parameters of [S0016].
*/
mobileIPAuthenticationData OCTET STRING (SIZE (5..957)) OPTIONAL
}

PINKeyReferenceValue ::= INTEGER {
pinAppl1(1),		-- PIN global of App 1
pinAppl2(2), 		-- PIN global of App 2
pinAppl3(3), 		-- PIN global of App 3
pinAppl4(4), 		-- PIN global of App 4
pinAppl5(5), 		-- PIN global of App 5
pinAppl6(6), 		-- PIN global of App 6
pinAppl7(7), 		-- PIN global of App 7
pinAppl8(8), 		-- PIN global of App 8
adm1(10),			-- Administrative Key 1
adm2(11), 			-- Administrative Key 2
adm3(12), 			-- Administrative Key 3
adm4(13), 			-- Administrative Key 4
adm5(14), 			-- Administrative Key 5
secondPINAppl1(129),	-- PIN local of App 1
secondPINAppl2(130), 	-- PIN local of App 2
secondPINAppl3(131), 	-- PIN local of App 3
secondPINAppl4(132), 	-- PIN local of App 4
secondPINAppl5(133), 	-- PIN local of App 5
secondPINAppl6(134), 	-- PIN local of App 6
secondPINAppl7(135), 	-- PIN local of App 7
secondPINAppl8(136), 	-- PIN local of App 8
adm6(138), 			-- Administrative Key 6
adm7(139), 			-- Administrative Key 7
adm8(140), 			-- Administrative Key 8
adm9(141), 			-- Administrative Key 9
adm10(142) 			-- Administrative Key 10
}

PINConfiguration ::= SEQUENCE {
/*
For every value defined in PINKeyReferenceValue only one entry may be included per PE-PINCodes.
Within the PE-PINCodes sent in the context of the MF only global PIN key references shall be used. For PINs in any ADF/DF only local PINs shall be defined: secondPINAppl1  secondPINAppl8. It is allowed to define the same PINKeyReferenceValue in multiple directories (e.g. secondPINAppl1 may be defined in the ISIM NAA and within the USIM NAA). Provided they are not linked they shall be handled as two independent PIN values which also may reference different PUK references.
*/
	keyReference PINKeyReferenceValue,
	pinValue OCTET STRING (SIZE (8)),
/*
In case no unblockingPINReference is set, no PUK applies for the corresponding PIN.
In case a PUKKeyReferenceValue is defined the related PUKKeyReferenceValue shall exist within the PE-PUKCodes list.
Any value defined in PUKKeyReferenceValue may be applied for any PINKeyReferenceValue.
*/
	unblockingPINReference PUKKeyReferenceValue OPTIONAL,
	pinAttributes UInt8 DEFAULT 7,
	maxNumOfAttemps-retryNumLeft UInt8 DEFAULT 51
/* maxNumOfAttemps-retryNumLeft is encoded as follows: max Number of Attempts is encoded in the high nibble of this value (Bits b8 to b5) and the Number of retry left is encoded in the low nibble of this value (Bits b4 to b1)*/
}

PE-PINCodes ::= SEQUENCE {
	pin-Header PEHeader,
pinCodes CHOICE {
	pinconfig SEQUENCE (SIZE (1..26))OF PINConfiguration,
	filePath OCTET STRING (SIZE (0..8)) /* temporary File ID for ADF, coding according to section 8.3.5 */
}
/* PIN can be either defined in the current context or shared
 with another DF/ADF
 Up to 26 PIN could be defined according to TS 102 221 [102 221]
*/
}

PUKKeyReferenceValue ::= INTEGER {
pukAppl1(1),		-- PUK Reference 1
pukAppl2(2), 		-- PUK Reference 2
pukAppl3(3), 		-- PUK Reference 3
pukAppl4(4), 		-- PUK Reference 4
pukAppl5(5), 		-- PUK Reference 5
pukAppl6(6), 		-- PUK Reference 6
pukAppl7(7), 		-- PUK Reference 7
pukAppl8(8), 		-- PUK Reference 8
secondPUKAppl1(129),	-- PUK Reference 9
secondPUKAppl2(130), 	-- PUK Reference 10
secondPUKAppl3(131), 	-- PUK Reference 11
secondPUKAppl4(132), 	-- PUK Reference 12
secondPUKAppl5(133), 	-- PUK Reference 13
secondPUKAppl6(134), 	-- PUK Reference 14
secondPUKAppl7(135), 	-- PUK Reference 15
secondPUKAppl8(136) 	-- PUK Reference 16
}

PUKConfiguration ::= SEQUENCE {
/*
Any PUKKeyReferenceValue shall only be defined once within PE-PUKCodes.
*/
	keyReference PUKKeyReferenceValue,
	pukValue OCTET STRING (SIZE (8)),
	maxNumOfAttemps-retryNumLeft UInt8 DEFAULT 170
/* maxNumOfAttemps-retryNumLeft is encoded as follows: max Number of Attempts is encoded in the high nibble of this value (Bits b8 to b5) and the Number of retry left is encoded in the low nibble of this value (Bits b4 to b1)*/
}

PE-PUKCodes ::= SEQUENCE {
	puk-Header PEHeader,
pukCodes SEQUENCE (SIZE (1..16))OF PUKConfiguration
}

PE-SecurityDomain ::= SEQUENCE {
	sd-Header PEHeader,
instance ApplicationInstance, -- see section 8.7.3
keyList SEQUENCE (SIZE (1..MAX)) OF KeyObject OPTIONAL, -- see section 8.6.3
sdPersoData SEQUENCE (SIZE (1..MAX)) OF OCTET STRING OPTIONAL, /* see section 8.6.4 */
openPersoData SEQUENCE {
	restrictParameter [PRIVATE 25] OCTET STRING (SIZE(1)) OPTIONAL,
	contactlessProtocolParameters OCTET STRING OPTIONAL
} OPTIONAL, /* see section 8.6.6 */
catTpParameters SEQUENCE
{	catTpMaxSduSize UInt16,
	catTpMaxPduSize UInt16
} OPTIONAL -- see section 8.6.7
}

KeyObject::= SEQUENCE {
keyUsageQualifier [21] OCTET STRING (SIZE (1..2)), /* see [GPCS] section 11.1.9 */
keyAccess [22] OCTET STRING (SIZE (1)) DEFAULT '00'H,
keyIdentifier [2] OCTET STRING (SIZE (1)),
keyVersionNumber [3] OCTET STRING (SIZE (1)),
keyCounterValue [5] OCTET STRING OPTIONAL,
keyCompontents SEQUENCE (SIZE (1..MAX)) OF SEQUENCE {
		keyType [0] OCTET STRING,
		keyData [6] OCTET STRING,
		macLength[7] UInt8 DEFAULT 8
	}
}

PE-Application ::= SEQUENCE {
	app-Header PEHeader,
loadBlock ApplicationLoadPackage OPTIONAL,
instanceList SEQUENCE (SIZE (1..MAX)) OF ApplicationInstance OPTIONAL
}

ApplicationLoadPackage ::= SEQUENCE {
loadPackageAID [APPLICATION 15] ApplicationIdentifier,
securityDomainAID [APPLICATION 15] ApplicationIdentifier OPTIONAL,
nonVolatileCodeLimitC6 [PRIVATE 6] OCTET STRING OPTIONAL,
volatileDataLimitC7 [PRIVATE 7] OCTET STRING OPTIONAL,
nonVolatileDataLimitC8 [PRIVATE 8] OCTET STRING OPTIONAL,
hashValue [PRIVATE 1] OCTET STRING OPTIONAL,
loadBlockObject [PRIVATE 4] OCTET STRING
}

ApplicationInstance ::= SEQUENCE {
applicationLoadPackageAID [APPLICATION 15] ApplicationIdentifier,
classAID [APPLICATION 15] ApplicationIdentifier,
instanceAID [APPLICATION 15] ApplicationIdentifier,
extraditeSecurityDomainAID [APPLICATION 15] ApplicationIdentifier OPTIONAL,
applicationPrivileges [2] OCTET STRING,
lifeCycleState [3] OCTET STRING (SIZE(1)) DEFAULT '07'H,
/* Coding according to GP Life Cycle State.  */

applicationSpecificParametersC9 [PRIVATE 9] OCTET STRING,
systemSpecificParameters [PRIVATE 15] ApplicationSystemParameters OPTIONAL,
applicationParameters [PRIVATE 10] UICCApplicationParameters OPTIONAL,
processData SEQUENCE (SIZE (1..MAX)) OF OCTET STRING OPTIONAL,
controlReferenceTemplate [16] ControlReferenceTemplate OPTIONAL
}

ApplicationSystemParameters ::= SEQUENCE{
volatileMemoryQuotaC7 [PRIVATE 7] OCTET STRING (SIZE (2..4)) OPTIONAL,
nonVolatileMemoryQuotaC8 [PRIVATE 8] OCTET STRING (SIZE (2..4)) OPTIONAL,
globalServiceParameters [PRIVATE 11] OCTET STRING OPTIONAL,
implicitSelectionParameter [PRIVATE 15] OCTET STRING OPTIONAL,
volatileReservedMemory [PRIVATE 23] OCTET STRING (SIZE (2..4)) OPTIONAL,
nonVolatileReservedMemory [PRIVATE 24] OCTET STRING (SIZE (2..4)) OPTIONAL,
ts102226SIMFileAccessToolkitParameter [PRIVATE 10] OCTET STRING OPTIONAL,
ts102226AdditionalContactlessParameters [0] TS102226AdditionalContactlessParameters OPTIONAL,
contactlessProtocolParameters [PRIVATE 25] OCTET STRING OPTIONAL, /* Coded according to Contactless Protocol Parameters Structure as defined in GP Amd. C */
userInteractionContactlessParameters [PRIVATE 26] OCTET STRING OPTIONAL,  /* Coded according to User Interaction Parameters Structure as defined in GP Amd. C */
cumulativeGrantedVolatileMemory [2] OCTET STRING (SIZE (2..4)) OPTIONAL, /*
Coded according to Contactless Specific Parameters as defined in GP Amd. C */

cumulativeGrantedNonVolatileMemory [3] OCTET STRING (SIZE (2..4)) OPTIONAL /*
Coded according to Contactless Specific Parameters as defined in GP Amd. C */
}

UICCApplicationParameters ::= SEQUENCE {
uiccToolkitApplicationSpecificParametersField [0] OCTET STRING OPTIONAL,
uiccAccessApplicationSpecificParametersField [1] OCTET STRING OPTIONAL,
uiccAdministrativeAccessApplicationSpecificParametersField [2] OCTET STRING OPTIONAL
}

TS102226AdditionalContactlessParameters ::= SEQUENCE{
protocolParameterData OCTET STRING /* Parameters for contactless applications encoded according to TS 102 226 */
}

ControlReferenceTemplate ::= SEQUENCE{
applicationProviderIdentifier [APPLICATION 32] OCTET STRING
}


PE-RFM ::= SEQUENCE {
rfm-header [0] PEHeader,

	/* instanceAID
	AID of the RFM instance
	*/
	instanceAID [APPLICATION 15] ApplicationIdentifier,

	/* securityDomainAID to which the RFM instance is associated
	*/
	securityDomainAID [APPLICATION 15] ApplicationIdentifier OPTIONAL,

	tarList [0] SEQUENCE (SIZE (1..MAX)) OF OCTET STRING (SIZE(3)) OPTIONAL,

	minimumSecurityLevel [1] OCTET STRING (SIZE (1)),

uiccAccessDomain OCTET STRING,
      uiccAdminAccessDomain OCTET STRING,

	/*
       If the following parameter is available the respective ADF shall be the directory selected by default within an RFM script. In case it is not available the MF shall be the default selection.
        */
      adfRFMAccess ADFRFMAccess OPTIONAL
}

ADFRFMAccess ::= SEQUENCE {
    	adfAID ApplicationIdentifier,
      adfAccessDomain OCTET STRING,
      adfAdminAccessDomain OCTET STRING
}

PE-NonStandard ::= SEQUENCE {
nonStandard-header PEHeader,
issuerID OBJECT IDENTIFIER,
content OCTET STRING
}

PE-End ::= SEQUENCE {
end-header PEHeader
}

PEStatus ::= SEQUENCE {
status INTEGER {
ok(0), pe-not-supported(1), memory-failure(2),bad-values(3),
not-enough-memory(4),invalid-request-format(5), invalid-parameter(6),
runtime-not-supported (7), lib-not-supported (8),
template-not-supported (9), feature-not-supported (10),
pin-code-missing (11),
unsupported-profile-version(31)
/* ISO 7816 standard status values apply in the range of [24576...28671]
and [36864...40959] for reporting status values '6xxx'H and '9xxx'H
proprietary values apply in the range [40960...65535]
*/
},
identification UInt15 OPTIONAL,
-- Identification number of the PE triggering the error
additional-information UInt8 OPTIONAL,
-- Additional information related to the status code
offset UInt31 OPTIONAL
-- Position of the part of the PE generating this status code
}

EUICCResponse ::= SEQUENCE {
	peStatus SEQUENCE OF PEStatus,
profileInstallationAborted NULL OPTIONAL,
statusMessage UTF8String (SIZE (2..64)) OPTIONAL
}

END
