/* SGP32 Templates in TTCN-3
 *
 * Author: Philipp Maier <pmaier@sysmocom.de> / sysmocom - s.f.m.c. GmbH
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

module SGP32Definitions_Templates {

import from SGP32Definitions all;
import from SGP32Definitions_Types all;

import from RSPDefinitions all;
import from RSPDefinitions_Types all;
import from RSPDefinitions_Templates all;

import from PKIX1Explicit88 all;
import from PKIX1Explicit88_Templates all;
import from PKIX1Explicit88_Types all;

/* GSMA SGP.32, section 5.9.2 (ES10x) */
template (present) SGP32_EUICCInfo2
tr_SGP32_EUICCInfo2 := {
	profileVersion := ?,
	svn := ?,
	euiccFirmwareVer := ?,
	extCardResource := ?,
	uiccCapability := ?,
	ts102241Version := *,
	globalplatformVersion := *,
	rspCapability := ?,
	euiccCiPKIdListForVerification := ?,
	euiccCiPKIdListForSigning := ?,
	euiccCategory := *,
	forbiddenProfilePolicyRules := *,
	ppVersion := ?,
	sasAcreditationNumber := ?,
	certificationDataObject := *,
	treProperties := *,
	treProductReference := *,
	additionalEuiccProfilePackageVersions := *,
	ipaMode := *,
	rfu2 := *,
	rfu3 := *,
	rfu4 := *,
	iotSpecificInfo:= *
}
template (value) SGP32_EUICCInfo2
ts_SGP32_EUICCInfo2 := {
	profileVersion := '414243'O,
	svn := '02000C'O,
	euiccFirmwareVer := '414243'O,
	extCardResource := '414243'O,
	uiccCapability := '1111111111111111111'B,
	ts102241Version := omit,
	globalplatformVersion := omit,
	rspCapability := '1111'B,
	euiccCiPKIdListForVerification := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	},
	euiccCiPKIdListForSigning := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	},
	euiccCategory := omit,
	forbiddenProfilePolicyRules := omit,
	ppVersion := '414243'O,
	sasAcreditationNumber := "123456",
	certificationDataObject := omit,
	treProperties := omit,
	treProductReference := omit,
	additionalEuiccProfilePackageVersions := omit,
	ipaMode := omit,
	rfu2 := omit,
	rfu3 := omit,
	rfu4 := omit,
	iotSpecificInfo:= omit
}

/* GSMA SGP.32, section 6.3.2.1 */
template (present) EsipaMessageFromEimToIpa
tr_initiateAuthenticationResponseEsipa(template (present) octetstring euiccChallenge := ?,
				       template (present) universal charstring serverAddress := ?) := {
	initiateAuthenticationResponseEsipa := {
		initiateAuthenticationOkEsipa := {
			transactionId := *,
			serverSigned1 := tr_serverSigned1(euiccChallenge := euiccChallenge, serverAddress := serverAddress),
			serverSignature1 := ?,
			euiccCiPKIdToBeUsed := ?,
			serverCertificate := ?,
			matchingId := *,
			ctxParams1 := *
		}
	}
}

template (value) EsipaMessageFromEimToIpa
ts_initiateAuthenticationResponseEsipa(template (value) octetstring euiccChallenge := '00112233445566778899AABBCCDDEEFF'O,
				       template (value) universal charstring serverAddress := "smdp.example.com") := {
	initiateAuthenticationResponseEsipa := {
		initiateAuthenticationOkEsipa := {
			transactionId := omit,
			serverSigned1 := ts_serverSigned1(euiccChallenge := euiccChallenge, serverAddress := serverAddress),
			serverSignature1 := '5252525252525252525252525252525252525252525252525252525252525252
					     5353535353535353535353535353535353535353535353535353535353535353'O,
			euiccCiPKIdToBeUsed := 'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O, /* NIST */
			serverCertificate := ts_cert_s_sm_dpauth_nist,
//			serverCertificate := ts_cert_s_sm_dpauth_brp,
//			serverCertificate := ts_cert_s_sm_dp2auth_nist,
//			serverCertificate := ts_cert_s_sm_dp2auth_brp,
			matchingId := omit,
			ctxParams1 := omit
		}
	}
}

/* GSMA SGP.32, section 6.3.2.1 */
template (present) EsipaMessageFromIpaToEim
tr_initiateAuthenticationRequestEsipa(template (present) octetstring euiccChallenge := ?) := {
	initiateAuthenticationRequestEsipa := {
		euiccChallenge := euiccChallenge,
		smdpAddress := *,
		euiccInfo1 := *
	}
}
template (value) EsipaMessageFromIpaToEim
ts_initiateAuthenticationRequestEsipa(template (value) octetstring euiccChallenge := '00112233445566778899aabbccddeeff'O,
				      template (omit) charstring smdpAddress := "smdp.example.com",
				      template (omit) EUICCInfo1 euiccInfo1 := ts_EUICCInfo1) := {
	initiateAuthenticationRequestEsipa := {
		euiccChallenge := euiccChallenge,
		smdpAddress := smdpAddress,
		euiccInfo1 := euiccInfo1
	}
}

/* GSMA SGP.32, section 6.3.2.2 */
template (present) EsipaMessageFromIpaToEim
tr_authenticateClientRequestEsipa := {
	authenticateClientRequestEsipa := {
		transactionId := ?,
		authenticateServerResponse := {
			authenticateResponseOk := ?
		}
	}
}
template (value) EsipaMessageFromIpaToEim
ts_authenticateClientRequestEsipa(template (value) octetstring transactionId := 'ABCDEF'O) := {
	authenticateClientRequestEsipa := {
		transactionId := transactionId,
		authenticateServerResponse := {
			authenticateResponseOk := {
				euiccSigned1 := ts_euiccSigned1,
				euiccSignature1 := '5252525252525252525252525252525252525252525252525252525252525252
						    5353535353535353535353535353535353535353535353535353535353535353'O,
				euiccCertificate := ts_cert_euicc_nist,
				eumCertificate := ts_cert_eum_nist
			}
		}
	}
}

/* GSMA SGP.32, section 6.3.2.2 */
template (present) EsipaMessageFromEimToIpa
tr_authenticateClientResponseEsipa_dse(template (present) octetstring transactionId := ?,
				       template (present) charstring activationCode := ?) := {
	authenticateClientResponseEsipa := {
		authenticateClientOkDSEsipa := {
			transactionId := transactionId,
				profileDownloadTrigger := {
				profileDownloadData := {
					activationCode := ?
				},
				eimTransactionId := *
			}
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_authenticateClientResponseEsipa_dse(template (value) octetstring transactionId := 'ABCDEF'O,
				       template (value) charstring activationCode := "1$SMDP.EXAMPLE.COM$$1.3.6.1.4.1.31746") := {
	authenticateClientResponseEsipa := {
		authenticateClientOkDSEsipa := {
			transactionId := transactionId,
			profileDownloadTrigger := {
				profileDownloadData := {
					activationCode := activationCode
				},
				eimTransactionId := omit
			}
		}
	}
}

/* GSMA SGP.32, section 6.3.2.2 */
template (present) EsipaMessageFromEimToIpa
tr_authenticateClientResponseEsipa_dpe(template (present) octetstring transactionId := ?) := {
	authenticateClientResponseEsipa := {
		authenticateClientOkDPEsipa := {
			transactionId := transactionId,
			profileMetaData := *,
			smdpSigned2 := {
				transactionId := ?,
				ccRequiredFlag := ?,
				bppEuiccOtpk := *
			},
			smdpSignature2 := ?,
			smdpCertificate := ?,
			hashCc := *
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_authenticateClientResponseEsipa_dpe(template (value) octetstring transactionId := 'ABCDEF'O) := {
	authenticateClientResponseEsipa := {
		authenticateClientOkDPEsipa := {
			transactionId := transactionId,
			profileMetaData := omit,
			smdpSigned2 := {
				transactionId := transactionId,
				ccRequiredFlag := false,
				bppEuiccOtpk := omit
			},
			smdpSignature2 := '5252525252525252525252525252525252525252525252525252525252525252
				           5353535353535353535353535353535353535353535353535353535353535353'O,
			smdpCertificate := ts_cert_s_sm_dpauth_nist,
//			smdpCertificate := ts_cert_s_sm_dpauth_brp,
//			smdpCertificate := ts_cert_s_sm_dp2auth_nist,
//			smdpCertificate := ts_cert_s_sm_dp2auth_brp,
			hashCc := omit
		}
	}
}

/* GSMA SGP.32, section 6.3.2.6 */
template (present) EsipaMessageFromIpaToEim
tr_getEimPackageRequest(template (present) octetstring eidValue := ?) := {
	getEimPackageRequest := {
		eidValue := eidValue,
		notifyStateChange := *,
		rPLMN := *
	}
}
template (value) EsipaMessageFromIpaToEim
ts_getEimPackageRequest(template (value) octetstring eidValue) := {
	getEimPackageRequest := {
		eidValue := eidValue,
		notifyStateChange := omit,
		rPLMN := omit
	}
}

/* GSMA SGP.32, section 6.3.2.6 and 2.11.1.3 */
template (present) EsipaMessageFromEimToIpa
tr_getEimPackageResponse_dnlTrigReq(template (present) charstring activationCode := ?) := {
	getEimPackageResponse := {
		profileDownloadTriggerRequest := {
			profileDownloadData := {
				activationCode := activationCode
			},
			eimTransactionId := *
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_getEimPackageResponse_dnlTrigReq(template (value) charstring activationCode := "1$SMDP.EXAMPLE.COM$$1.3.6.1.4.1.31746") := {
	getEimPackageResponse := {
		profileDownloadTriggerRequest := {
			profileDownloadData := {
				activationCode := activationCode
			},
			eimTransactionId := omit
		}
	}
}

/* GSMA SGP.32, section 6.3.2.6 and 2.11.1.2 */
template (present) EsipaMessageFromEimToIpa
tr_getEimPackageResponse_euiccDataReq := {
	getEimPackageResponse := {
		ipaEuiccDataRequest := {
			tagList := ?,
			euiccCiPKId := *,
			searchCriteria := *
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_getEimPackageResponse_euiccDataReq := {
	getEimPackageResponse := {
		ipaEuiccDataRequest := {
			tagList := '80BF20BF228384A5A688A9BF2B'O,
			euiccCiPKId := omit,
			searchCriteria := omit
		}
	}
}

/* GSMA SGP.32, section 6.3.2.6 */
template (present) EsipaMessageFromEimToIpa
tr_getEimPackageResponse_eimPkgErrUndef := {
	getEimPackageResponse := {
		eimPackageError := ?
	}
}
template (value) EsipaMessageFromEimToIpa
ts_getEimPackageResponse_eimPkgErrUndef := {
	getEimPackageResponse := {
		eimPackageError := 127
	}
}

/* GSMA SGP.32, section 2.11.1.1.3 */
template (present) EuiccPackage
tr_euiccPackage_enablePsmo := {
	psmoList := {
		{
			enable := {
				iccid := ?,
				rollbackFlag := *
			}
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_enablePsmo := {
	psmoList := {
		{
			enable := {
				iccid := '123456789ABCDEFFAAAA'O,
				rollbackFlag := NULL
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_disablePsmo := {
	psmoList := {
		{
			disable := {
				iccid := ?
			}
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_disablePsmo := {
	psmoList := {
		{
			disable := {
				iccid := '123456789ABCDEFFAAAA'O
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_deletePsmo := {
	psmoList := {
		{
			delete := {
				iccid := ?
			}
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_deletePsmo := {
	psmoList := {
		{
			delete := {
				iccid := '123456789ABCDEFFAAAA'O
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_disableAndDeletePsmo := {
	psmoList := {
		{
			disable := {
				iccid := ?
			}
		},
		{
			delete := {
				iccid := ?
			}
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_disableAndDeletePsmo := {
	psmoList := {
		{
			disable := {
				iccid := '123456789ABCDEFFAAAA'O
			}
		},
		{
			delete := {
				iccid := '123456789ABCDEFFAAAA'O
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_listProfileInfo := {
	psmoList := {
		{
			listProfileInfo := {
				searchCriteria := *,
				tagList := *
			}
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_listProfileInfo := {
	psmoList := {
		{
			listProfileInfo := {
				searchCriteria := {
					iccid := '123456789ABCDEFFAAAA'O
				},
				tagList := '92'O /* profileName */
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_getRAT := {
	psmoList := {
		{
			getRAT := { }
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_getRAT := {
	psmoList := {
		{
			getRAT := { }
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_configureAutoEnable := {
	psmoList := {
		{
			configureAutoEnable := {
				autoEnableFlag := *,
				smdpOid := *,
				smdpAddress := *
			}
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_configureAutoEnable := {
	psmoList := {
		{
			configureAutoEnable := {
				autoEnableFlag := NULL,
				smdpOid := objid {1 2 3},
				smdpAddress := "smdp.example.com"
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_addEim := {
	ecoList := {
		{
			addEim := tr_eimConfigurationData
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_addEim := {
	ecoList := {
		{
			addEim := ts_eimConfigurationData
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_deleteEim := {
	ecoList := {
		{
			deleteEim := ?
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_deleteEim := {
	ecoList := {
		{
			deleteEim := {
				eimId := "eIM"
			}
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_updateEim := {
	ecoList := {
		{
			updateEim := tr_eimConfigurationData
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_updateEim := {
	ecoList := {
		{
			updateEim := ts_eimConfigurationData
		}
	}
}
template (present) EuiccPackage
tr_euiccPackage_listEim := {
	ecoList := {
		{
			listEim := { }
		}
	}
}
template (value) EuiccPackage
ts_euiccPackage_listEim := {
	ecoList := {
		{
			listEim := { }
		}
	}
}

/* GSMA SGP.32, section 6.3.2.6 */
template (present) EsipaMessageFromEimToIpa
tr_getEimPackageResponse_euiccPkgReq(template (present) EuiccPackage euiccPackage := tr_euiccPackage_enablePsmo) := {
	getEimPackageResponse := {
		euiccPackageRequest := {
			euiccPackageSigned := {
				eimId := ?,
				eidValue := ?,
				counterValue := ?,
				transactionId := *,
				euiccPackage := euiccPackage
			},
			eimSignature := ?
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_getEimPackageResponse_euiccPkgReq(template (value) EuiccPackage euiccPackage := ts_euiccPackage_enablePsmo) := {
	getEimPackageResponse := {
		euiccPackageRequest := {
			euiccPackageSigned := {
				eimId := "myEim",
				eidValue := '00112233445566778899AABBCCDDEEFF'O,
				counterValue := 123,
				transactionId := omit,
				euiccPackage := euiccPackage
			},
			eimSignature := '5252525252525252525252525252525252525252525252525252525252525252
				         5353535353535353535353535353535353535353535353535353535353535353'O
		}
	}
}

/* GSMA SGP.32, section 6.3.2.5 */
template (present) EsipaMessageFromIpaToEim
tr_cancelSessionRequestEsipa := {
	cancelSessionRequestEsipa := {
		transactionId := ?,
		cancelSessionResponse := {
			cancelSessionResponseOk := tr_cancelSessionResponseOk
		}
	}
}
template (value) EsipaMessageFromIpaToEim
ts_cancelSessionRequestEsipa := {
	cancelSessionRequestEsipa := {
		transactionId := 'AABBCC'O,
		cancelSessionResponse := {
			cancelSessionResponseOk := ts_cancelSessionResponseOk
		}
	}
}

/* GSMA SGP.32, section 6.3.2.5 */
template (present) EsipaMessageFromEimToIpa
tr_cancelSessionResponseEsipa := {
	cancelSessionResponseEsipa := {
		cancelSessionOk := {
			/* This function has no output data */
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_cancelSessionResponseEsipa := {
	cancelSessionResponseEsipa := {
		cancelSessionOk := {
			/* This function has no output data */
		}
	}
}

/* GSMA SGP.32, section 6.3.2.3 */
template (present) EsipaMessageFromIpaToEim
tr_getBoundProfilePackageRequestEsipa := {
	getBoundProfilePackageRequestEsipa := {
		transactionId := ?,
		prepareDownloadResponse := {
			downloadResponseOk := tr_prepareDownloadResponseOk
		}
	}
}
template (value) EsipaMessageFromIpaToEim
ts_getBoundProfilePackageRequestEsipa := {
	getBoundProfilePackageRequestEsipa := {
		transactionId := 'ABCDEF'O,
		prepareDownloadResponse := {
			downloadResponseOk := ts_prepareDownloadResponseOk
		}
	}
}

/* GSMA SGP.32, section 6.3.2.3 */
template (present) EsipaMessageFromEimToIpa
tr_getBoundProfilePackageResponseEsipa := {
	getBoundProfilePackageResponseEsipa := {
		getBoundProfilePackageOkEsipa := {
			transactionId := *,
			boundProfilePackage := tr_boundProfilePackage
		}
	}
}
template (value) EsipaMessageFromEimToIpa
ts_getBoundProfilePackageResponseEsipa := {
	getBoundProfilePackageResponseEsipa := {
		getBoundProfilePackageOkEsipa := {
			transactionId := omit,
			boundProfilePackage := ts_boundProfilePackage
		}
	}
}

/* GSMA SGP.32, section 5.9.1 */
template (present) EuiccPackageResult
tr_euiccPackageResult := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := ?
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResult := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEim",
			counterValue := 333,
			transactionId := omit,
			seqNumber := 1234,
			euiccResult := {
				{
					enableResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}

/* GSMA SGP.32, section 6.3.2.4 */
template (present) EsipaMessageFromIpaToEim
tr_handleNotificationEsipa_prfleInstRslt(template (present) charstring notificationAddress := ?) := {
	handleNotificationEsipa := {
		pendingNotification := {
			profileInstallationResult := {
				profileInstallationResultData := tr_profileInstallationResultData,
				euiccSignPIR := ?
			}
		}
	}
}
template (value) EsipaMessageFromIpaToEim
ts_handleNotificationEsipa_prfleInstRslt(template (value) charstring notificationAddress := "smdp.example.com") := {
	handleNotificationEsipa := {
		pendingNotification := {
			profileInstallationResult := {
				profileInstallationResultData := ts_profileInstallationResultData(notificationAddress),
				euiccSignPIR := '5252525252525252525252525252525252525252525252525252525252525252
						 5353535353535353535353535353535353535353535353535353535353535353'O
			}
		}
	}
}

/* GSMA SGP.32, section 6.3.2.7 */
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_enablePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					enableResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_enablePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					enableResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_disablePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					disableResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_disablePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					disableResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_deletePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					deleteResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_deletePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					deleteResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_disableAndDeletePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					disableResult := ?
				},
				{
					deleteResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_disableAndDeletePsmo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					disableResult := 0
				},
				{
					deleteResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_listProfileInfo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					listProfileInfoResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_listProfileInfo := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					listProfileInfoResult := {
						profileInfoListOk := {
							{
								iccid := '123456789ABCDEFFAAAA'O,
								isdpAid := omit,
								profileState := 1, /* enabled */
								profileNickname := omit,
								serviceProviderName := omit,
								profileName := "testme",
								iconType := omit,
								icon := omit,
								profileClass := 2, /* operational */
								notificationConfigurationInfo := omit,
								profileOwner := omit,
								dpProprietaryData := omit,
								profilePolicyRules := omit,
								serviceSpecificDataStoredInEuicc := omit
							}
						}
					}
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_getRAT := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					getRATResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_getRAT := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					getRATResult := {
						{
							pprIds := '000'B,
							allowedOperators := {
								{
									mccMnc := '001F01'O,
									gid1 := omit,
									gid2 := omit
								}
							},
							pprFlags := '0'B
						}
					}
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_configureAutoEnable := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					configureAutoEnableResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_configureAutoEnable := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					configureAutoEnableResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_addEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					addEimResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_addEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					addEimResult := {
						associationToken := 123
					}
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_deleteEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					deleteEimResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_deleteEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					deleteEimResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_updateEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					updateEimResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_updateEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					updateEimResult := 0
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EuiccPackageResult
tr_euiccPackageResultSigned_listEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := ?,
			counterValue := ?,
			transactionId := *,
			seqNumber := ?,
			euiccResult := {
				{
					listEimResult := ?
				}
			}
		},
		euiccSignEPR := ?
	}
}
template (value) EuiccPackageResult
ts_euiccPackageResultSigned_listEim := {
	euiccPackageResultSigned := {
		euiccPackageResultDataSigned := {
			eimId := "myEIM",
			counterValue := 1,
			transactionId := omit,
			seqNumber := 123,
			euiccResult := {
				{
					listEimResult := {
						eimIdList := {
							{
								eimId := "eIM",
								eimIdType := omit
							}
						}
					}
				}
			}
		},
		euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
				 5353535353535353535353535353535353535353535353535353535353535353'O
	}
}
template (present) EsipaMessageFromIpaToEim
tr_provideEimPackageResult_ePRAndNotif(template (present) EuiccPackageResult euiccPackageResult := tr_euiccPackageResultSigned_enablePsmo) := {
	provideEimPackageResult := {
		ePRAndNotifications := {
			euiccPackageResult := euiccPackageResult,
			notificationList := ?
		}
	}
}
template (value) EsipaMessageFromIpaToEim
ts_provideEimPackageResult_ePRAndNotif(template (value) EuiccPackageResult euiccPackageResult := ts_euiccPackageResultSigned_enablePsmo) := {
	provideEimPackageResult := {
		ePRAndNotifications := {
			euiccPackageResult := euiccPackageResult,
			notificationList := {
				notificationList := { }
			}
		}
	}
}

template (present) EsipaMessageFromIpaToEim
tr_provideEimPackageResult_euiccDataResp := {
	provideEimPackageResult := {
		ipaEuiccDataResponse := {
			ipaEuiccData := {
				defaultSmdpAddress := *,
				euiccInfo1 := *,
				euiccInfo2 := *,
				rootSmdsAddress := *,
				associationToken := *,
				eumCertificate := *,
				euiccCertificate := *,
				ipaCapabilities := *,
				deviceInfo := *,
				notificationsList := *
			}
		}
	}
}
template (value) EsipaMessageFromIpaToEim
ts_provideEimPackageResult_euiccDataResp := {
	provideEimPackageResult := {
		ipaEuiccDataResponse := {
			ipaEuiccData := {
				defaultSmdpAddress := "smdp.example.com",
				euiccInfo1 := ts_EUICCInfo1,
				euiccInfo2 := ts_SGP32_EUICCInfo2,
				rootSmdsAddress := "smds.example.com",
				associationToken := 1,
				eumCertificate := ts_cert_eum_nist,
				euiccCertificate := ts_cert_euicc_nist,
				ipaCapabilities := omit,
				deviceInfo := omit,
				notificationsList := omit
			}
		}
	}
}

template (present) EsipaMessageFromEimToIpa
tr_provideEimPackageResultResponse_eimAck := {
	provideEimPackageResultResponse := {
		eimAcknowledgements := *
	}
}
template (value) EsipaMessageFromEimToIpa
ts_provideEimPackageResultResponse_eimAck(template (value) EimAcknowledgements eimAcknowledgements := {}) := {
	provideEimPackageResultResponse := {
		eimAcknowledgements := eimAcknowledgements
	}
}

/* GSMA SGP.32, section 2.11.1.2 */
template (present) GetCertsResponse
tr_getCertsResponse := {
	certs := {
		eumCertificate := ?,
		euiccCertificate := ?
	}
}
template (value) GetCertsResponse
ts_getCertsResponse := {
	certs := {
		eumCertificate := ts_cert_eum_nist,
		euiccCertificate := ts_cert_euicc_nist
	}
}

/* GSMA SGP.32, section 5.9.18 */
template (present) EimConfigurationData
tr_eimConfigurationData := {
	eimId := ?,
	eimFqdn := *,
	eimIdType := *,
	counterValue := *,
	associationToken := *,
	eimPublicKeyData := *,
	trustedPublicKeyDataTls := *,
	eimSupportedProtocol := *,
	euiccCiPKId := *
}
template (value) EimConfigurationData
ts_eimConfigurationData(template (omit) charstring eimFqdn := omit) := {
	eimId := "myEIM",
	eimFqdn := eimFqdn,
	eimIdType := omit,
	counterValue := omit,
	associationToken := 123,
	eimPublicKeyData := omit,
	trustedPublicKeyDataTls := omit,
	eimSupportedProtocol := omit,
	euiccCiPKId := omit
}
template (present) GetEimConfigurationDataResponse
tr_getEimConfigurationDataResponse := {
	eimConfigurationDataList := ?
}
template (value) GetEimConfigurationDataResponse
ts_getEimConfigurationDataResponse(template (value) charstring eimFqdn := "127.0.0.1") := {
	eimConfigurationDataList := {
		ts_eimConfigurationData(eimFqdn)
	}
}

/* GSMA SGP.32, section 5.9.4 */
template (present) AddInitialEimResponse
tr_addInitialEimResponse := {
	addInitialEimOk := ?
}
template (value) AddInitialEimResponse
ts_addInitialEimResponse := {
	addInitialEimOk := {
		{
			addOk := NULL
		}
	}
}

/* GSMA SGP.32, section 5.9.15 */
template (present) EnableUsingDDResponse
tr_enableUsingDDResponse := {
	enableUsingDDResult := ?
}
template (value) EnableUsingDDResponse
ts_enableUsingDDResponse := {
	enableUsingDDResult := 1 /* autoEnableNotAvailable */
}

/* GSMA SGP.32, section 5.9.16 */
template (present) ProfileRollbackRequest
tr_profileRollbackRequest := {
	refreshFlag := ?
}
template (value) ProfileRollbackRequest
ts_profileRollbackRequest := {
	refreshFlag := false
}
template (present) ProfileRollbackResponse
tr_profileRollbackResponse := {
	cmdResult := ?,
	eUICCPackageResult := ?
}
template (value) ProfileRollbackResponse
ts_profileRollbackResponse := {
	cmdResult := 0,
	eUICCPackageResult := {
		euiccPackageResultSigned := {
			euiccPackageResultDataSigned := {
				eimId := "myEim",
				counterValue := 333,
				transactionId := omit,
				seqNumber := 1234,
				euiccResult := {
					{
						enableResult := 0
					},
					{
						rollbackResult := 0
					}
				}
			},
			euiccSignEPR := '5252525252525252525252525252525252525252525252525252525252525252
					 5353535353535353535353535353535353535353535353535353535353535353'O

		}
	}
}


}
