/* SGP22 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 RSPDefinitions_Templates {

import from PEDefinitions all;
import from RSPDefinitions all;
import from RSPDefinitions_Types all;

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

import from PKIX1Implicit88 all;

/* GSMA SGP.22, section 2.5.4 */
template (present) BoundProfilePackage
tr_boundProfilePackage := {
	initialiseSecureChannelRequest := {
		remoteOpId := ?,
		transactionId := ?,
		controlRefTemplate := {
			keyType := ?,
			keyLen := ?,
			hostId := ?
		},
		smdpOtpk := ?,
		smdpSign := ?
	},
	/* ES8+.ConfigureISDP */
	firstSequenceOf87 := ?,
	/* ES8+.StoreMetadata */
	sequenceOf88 := ?,
	/* ES8+.ReplaceSessionKeys (optional) */
	secondSequenceOf87 := *,
	/* ES8+.LoadProfileElements */
	sequenceOf86 := ?
}
template (value) BoundProfilePackage
ts_boundProfilePackage := {
	initialiseSecureChannelRequest := {
		remoteOpId := 1,
		transactionId := 'AABBCC'O,
		controlRefTemplate := {
			keyType := '88'O, /* AES */
			keyLen := '10'O, /* 16 byte key-length */
			hostId := '01020304050607080910111213141516'O
		},
		smdpOtpk := '1122334455667788'O,
		smdpSign := 'AABBCCDDEEFF0000'O
	},
	/* ES8+.ConfigureISDP */
	firstSequenceOf87 := {'41414141414141414141414141414141414141414141414141414141414141'O,
			      '42424242424242424242424242424242424242424242424242424242424242'O,
			      '43434343434343434343434343434343434343434343434343434343434343'O},
	/* ES8+.StoreMetadata */
	sequenceOf88 := {'444444444444444444444444444444444444444444'O,
			 '454545454545454545454545454545454545454545'O,
			 '464646464646464646464646464646464646464646'O},
	/* ES8+.ReplaceSessionKeys (optional) */
	secondSequenceOf87 := omit,
	/* ES8+.LoadProfileElements */
	sequenceOf86 := {'474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747'O,
			 '484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848'O,
			 '494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949494949'O,
			 '505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050'O,
			 '515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151'O}
}

template (present) ServerSigned1 tr_serverSigned1(template (present) octetstring transactionId := ?,
						  template (present) octetstring euiccChallenge := ?,
						  template (present) universal charstring serverAddress := ?,
						  template (present) octetstring serverChallenge := ?) := {
	 transactionId := transactionId,
	 euiccChallenge := euiccChallenge,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge
}
template (value) ServerSigned1 ts_serverSigned1(template (value) octetstring transactionId := 'ABCDEF'O,
						template (value) octetstring euiccChallenge := '00112233445566778899AABBCCDDEEFF'O,
						template (value) universal charstring serverAddress := "smdp.example.com",
						template (value) octetstring serverChallenge := '01020304050607080910111213141516'O) := {
	 transactionId := transactionId,
	 euiccChallenge := euiccChallenge,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge
}

template (present) CtxParams1 tr_ctxParams1 := {
	 ctxParamsForCommonAuthentication := {
		matchingId := *,
		deviceInfo := {
			tac := ?,
			deviceCapabilities := {
				gsmSupportedRelease := *,
				utranSupportedRelease := *,
				cdma2000onexSupportedRelease := *,
				cdma2000hrpdSupportedRelease := *,
				cdma2000ehrpdSupportedRelease := *,
				eutranEpcSupportedRelease := *,
				contactlessSupportedRelease := *,
				rspCrlSupportedVersion := *,
				nrEpcSupportedRelease := *,
				nr5gcSupportedRelease := *,
				eutran5gcSupportedRelease := *,
				lpaSvn := *,
				catSupportedClasses := *,
				euiccFormFactorType := *,
				deviceAdditionalFeatureSupport := *
			},
			imei := *
		}
	}
}
template (value) CtxParams1 ts_ctxParams1 := {
	ctxParamsForCommonAuthentication := {
		matchingId := omit,
		deviceInfo := {
			tac := '12345678'O,
			deviceCapabilities := {
				gsmSupportedRelease := omit,
				utranSupportedRelease := omit,
				cdma2000onexSupportedRelease := omit,
				cdma2000hrpdSupportedRelease := omit,
				cdma2000ehrpdSupportedRelease := omit,
				eutranEpcSupportedRelease := omit,
				contactlessSupportedRelease := omit,
				rspCrlSupportedVersion := omit,
				nrEpcSupportedRelease := omit,
				nr5gcSupportedRelease := omit,
				eutran5gcSupportedRelease := omit,
				lpaSvn := omit,
				catSupportedClasses := omit,
				euiccFormFactorType := omit,
				deviceAdditionalFeatureSupport := omit
			},
			imei := omit
		}
	}
}

template (present) EuiccSigned1 tr_euiccSigned1(template (present) octetstring transactionId := ?,
						template (present) universal charstring serverAddress := ?,
						template (present) octetstring serverChallenge := ?,
						template (present) EUICCInfo2 euiccInfo2 := ?,
						template (present) CtxParams1 ctxParams1 := ?) := {
	 transactionId := transactionId,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge,
	 euiccInfo2 := euiccInfo2,
	 ctxParams1 := ctxParams1
}
template (value) EuiccSigned1 ts_euiccSigned1(template (value) octetstring transactionId := 'ABCDEF'O,
					      template (value) universal charstring serverAddress := "smdp.example.com",
					      template (value) octetstring serverChallenge := '01020304050607080910111213141516'O,
					      template (value) EUICCInfo2 euiccInfo2 := ts_EUICCInfo2,
					      template (value) CtxParams1 ctxParams1 := ts_ctxParams1) := {
	 transactionId := transactionId,
	 serverAddress := serverAddress,
	 serverChallenge := serverChallenge,
	 euiccInfo2 := euiccInfo2,
	 ctxParams1 := ctxParams1
}

template (present) StoreMetadataRequest tr_storeMetadataRequest := {
	iccid := ?,
	serviceProviderName := ?,
	profileName := ?,
	iconType := *,
	icon := *,
	profileClass := ?,
	notificationConfigurationInfo := *,
	profileOwner := *,
	profilePolicyRules := *,
	serviceSpecificDataStoredInEuicc := *,
	serviceSpecificDataNotStoredInEuicc := *
}
template (value) StoreMetadataRequest ts_storeMetadataRequest := {
	iccid := '123456789ABCDEFFAAAA'O,
	serviceProviderName := "testsuite",
	profileName := "testprofile",
	iconType := omit,
	icon := omit,
	profileClass := 2, /* operational */
	notificationConfigurationInfo := omit,
	profileOwner := omit,
	profilePolicyRules := omit,
	serviceSpecificDataStoredInEuicc := omit,
	serviceSpecificDataNotStoredInEuicc := omit
}

template (present) SmdpSigned2 tr_smdpSigned2(template (present) octetstring transactionId := ?,
					      template (present) boolean ccRequiredFlag := ?) := {
	 transactionId := transactionId,
	 ccRequiredFlag := ccRequiredFlag,
	 bppEuiccOtpk := ?
}
template (value) SmdpSigned2 ts_smdpSigned2(template (value) octetstring transactionId := 'ABCDEF'O,
					    template (value) boolean ccRequiredFlag := false) := {
	 transactionId := transactionId,
	 ccRequiredFlag := ccRequiredFlag,
	 bppEuiccOtpk := omit
}

/* GSMA SGP.22, section 2.5.6 */
template (present) ProfileInstallationResult
tr_profileInstallationResult := {
	profileInstallationResultData := {
		transactionId := ?,
		notificationMetadata := {
			seqNumber := ?,
			profileManagementOperation := ?,
			notificationAddress := ?,
			iccid := *
		},
		smdpOid := ?,
		finalResult := ?
	},
	euiccSignPIR := ?
}
template (value) ProfileInstallationResult
ts_profileInstallationResult := {
	profileInstallationResultData := {
		transactionId := 'AABBCC'O,
		notificationMetadata := {
			seqNumber := 1234,
			profileManagementOperation := '01'B, /* is this correct? (notificationInstall) */
			notificationAddress := "smdp.example.com",
			iccid := omit
		},
		smdpOid := id_rsp, /* random OBJECT IDENTIFIER for testing */
		finalResult := {
			successResult := {
				aid := '0102030405'O,
				simaResponse := '4141414141414141414141414141414141414141414141414141'O
			}
		}
	},
	euiccSignPIR := '00112233445566778899AABBCCDDEEFF'O
}


/* GSMA SGP.22, section 5.6.1 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_initiateAuthenticationRequest(template (present) octetstring euiccChallenge := ?,
				 template (present) charstring smdpAddress := ?,
				 template (present) EUICCInfo1 euiccInfo1 := ?) := {
	initiateAuthenticationRequest := {
		euiccChallenge := euiccChallenge,
		smdpAddress := smdpAddress,
		euiccInfo1 := euiccInfo1
	}
}
template (value) RemoteProfileProvisioningRequest
ts_initiateAuthenticationRequest(template (value) octetstring euiccChallenge := '00112233445566778899aabbccddeeff'O,
				 template (value) charstring smdpAddress := "smdp.example.com",
				 template (value) EUICCInfo1 euiccInfo1 := ts_EUICCInfo1) := {
	initiateAuthenticationRequest := {
		euiccChallenge := euiccChallenge,
		smdpAddress := smdpAddress,
		euiccInfo1 := euiccInfo1
	}
}
template (present) RemoteProfileProvisioningResponse
tr_initiateAuthenticationResponse(template (present) octetstring transactionId := ?,
				  template (present) ServerSigned1 serverSigned1 := ?,
				  template (present) octetstring serverSignature1 := ?,
				  template (present) SubjectKeyIdentifier euiccCiPKIdToBeUsed := ?,
				  template (present) Certificate serverCertificate := ?) := {
	initiateAuthenticationResponse := {
		initiateAuthenticationOk := {
			transactionId := transactionId,
			serverSigned1 := serverSigned1,
			serverSignature1 := serverSignature1,
			euiccCiPKIdToBeUsed := euiccCiPKIdToBeUsed,
			serverCertificate := serverCertificate
		}
	}
}
template (value) RemoteProfileProvisioningResponse
ts_initiateAuthenticationResponse(template (value) octetstring transactionId := 'ABCDEF'O,
				  template (value) ServerSigned1 serverSigned1 := ts_serverSigned1,
				  template (value) octetstring serverSignature1 := '01020304'O,
				  template (value) SubjectKeyIdentifier euiccCiPKIdToBeUsed := 'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O, /* NIST */
				  template (value) Certificate serverCertificate := ts_cert_s_sm_dpauth_nist) := {
	initiateAuthenticationResponse := {
		initiateAuthenticationOk := {
			transactionId := transactionId,
			serverSigned1 := serverSigned1,
			serverSignature1 := serverSignature1,
			euiccCiPKIdToBeUsed := euiccCiPKIdToBeUsed,
			serverCertificate := serverCertificate
		}
	}
}

/* GSMA SGP.22, section 5.6.2 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_getBoundProfilePackageRequest(template (present) octetstring transactionId := ?,
				 template (present) PrepareDownloadResponse prepareDownloadResponse := ?) := {
	getBoundProfilePackageRequest := {
		transactionId := transactionId,
		prepareDownloadResponse := prepareDownloadResponse
	}
}
template (value) RemoteProfileProvisioningRequest
ts_getBoundProfilePackageRequest(template (value) octetstring transactionId,
			     	 template (value) PrepareDownloadResponse prepareDownloadResponse) := {
	getBoundProfilePackageRequest := {
		transactionId := transactionId,
		prepareDownloadResponse := prepareDownloadResponse
	}
}
template (present) RemoteProfileProvisioningResponse
tr_getBoundProfilePackageResponse(template (present) octetstring transactionId := ?,
				  template (present) BoundProfilePackage boundProfilePackage := ?) := {
	getBoundProfilePackageResponse := {
		getBoundProfilePackageOk := {
			transactionId := transactionId,
			boundProfilePackage := boundProfilePackage
		}
	}
}
template (value) RemoteProfileProvisioningResponse
ts_getBoundProfilePackageResponse(template (value) octetstring transactionId,
				  template (value) BoundProfilePackage boundProfilePackage) := {
	getBoundProfilePackageResponse := {
		getBoundProfilePackageOk := {
			transactionId := transactionId,
			boundProfilePackage := boundProfilePackage
		}
	}
}

/* GSMA SGP.22, section 5.6.3 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_authenticateClientRequest(template (present) octetstring transactionId := ?,
			     template (present) AuthenticateServerResponse authenticateServerResponse := ?) := {
	authenticateClientRequest := {
		transactionId := transactionId,
		authenticateServerResponse := authenticateServerResponse
	}
}
template (value) RemoteProfileProvisioningRequest
ts_authenticateClientRequest(template (value) octetstring transactionId,
			     template (value) AuthenticateServerResponse authenticateServerResponse) := {
	authenticateClientRequest := {
		transactionId := transactionId,
		authenticateServerResponse := authenticateServerResponse
	}
}
template (present) RemoteProfileProvisioningResponse
tr_authenticateClientResponseEs9(template (present) octetstring transactionId := ?,
				 template (present) StoreMetadataRequest profileMetaData := ?,
				 template (present) SmdpSigned2 smdpSigned2 := ?,
				 template (present) octetstring smdpSignature2 := ?,
				 template (present) Certificate smdpCertificate := ?) := {
	authenticateClientResponseEs9 := {
		authenticateClientOk := {
			transactionId := transactionId,
			profileMetaData := profileMetaData,
			smdpSigned2 := smdpSigned2,
			smdpSignature2 := smdpSignature2,
			smdpCertificate := smdpCertificate
		}
	}
}
template (value) RemoteProfileProvisioningResponse
ts_authenticateClientResponseEs9(template (value) octetstring transactionId := 'ABCDEF'O,
				 template (value) StoreMetadataRequest profileMetaData := ts_storeMetadataRequest,
				 template (value) SmdpSigned2 smdpSigned2 := ts_smdpSigned2,
				 template (value) octetstring smdpSignature2 := 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'O,
				 template (value) Certificate smdpCertificate := ts_cert_s_sm_dpauth_nist) := {
	authenticateClientResponseEs9 := {
		authenticateClientOk := {
			transactionId := transactionId,
			profileMetaData := profileMetaData,
			smdpSigned2 := smdpSigned2,
			smdpSignature2 := smdpSignature2,
			smdpCertificate := smdpCertificate
		}
	}
}

/* GSMA SGP.22, section 5.6.4 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_handleNotification(template (present) PendingNotification pendingNotification := ?) := {
	handleNotification := {
		pendingNotification := pendingNotification
	}
}
template (value) RemoteProfileProvisioningRequest
ts_handleNotification(template (value) PendingNotification pendingNotification) := {
	handleNotification := {
		pendingNotification := pendingNotification
	}
}

/* GSMA SGP.22, section 5.6.5 (ES9+) */
template (present) RemoteProfileProvisioningRequest
tr_cancelSessionRequestEs9(template (present) octetstring transactionId := ?,
			     template (present) CancelSessionResponse cancelSessionResponse := ?) := {
	cancelSessionRequestEs9 := {
		transactionId := transactionId,
		cancelSessionResponse := cancelSessionResponse
	}
}
template (value) RemoteProfileProvisioningRequest
ts_cancelSessionRequestEs9(template (value) octetstring transactionId,
			   template (value) CancelSessionResponse cancelSessionResponse) := {
	cancelSessionRequestEs9 := {
		transactionId := transactionId,
		cancelSessionResponse := cancelSessionResponse
	}
}
template (present) RemoteProfileProvisioningResponse
tr_cancelSessionResponseEs9 := {
	cancelSessionResponseEs9 := {
		cancelSessionOk := { } /* This function has no output data */
	}
}
template (value) RemoteProfileProvisioningResponse
ts_cancelSessionResponseEs9 := {
	cancelSessionResponseEs9 := {
		cancelSessionOk := { } /* This function has no output data */
	}
}


/* GSMA SGP.22, section 5.7.3 (ES10x) */
template (present) EuiccConfiguredAddressesResponse
tr_euiccConfiguredAddressesResponse := {
	defaultDpAddress := *,
	rootDsAddress := ?
}
template (value) EuiccConfiguredAddressesResponse
ts_euiccConfiguredAddressesResponse := {
	defaultDpAddress := "smdp.example.com",
	rootDsAddress := "smds.example.com"
}

/* GSMA SGP.22, section 5.7.5 (ES10x) */
template (present) PrepareDownloadResponse
tr_prepareDownloadResponse := {
	downloadResponseOk := {
		euiccSigned2 := {
			transactionId := ?,
			euiccOtpk := ?,
			hashCc := *
		},
		euiccSignature2 := ?
	}
}
template (value) PrepareDownloadResponse
ts_prepareDownloadResponse := {
	downloadResponseOk := {
		euiccSigned2 := {
			transactionId := 'ABCDEF'O,
			euiccOtpk := 'AABBCCDDEEFF'O,
			hashCc := omit
		},
		euiccSignature2 := 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'O
	}
}

/* GSMA SGP.22, section 5.7.7 (ES10x) */
template (present) GetEuiccChallengeResponse
tr_GetEuiccChallengeResponse := {
	euiccChallenge := ?
}
template (value) GetEuiccChallengeResponse
ts_GetEuiccChallengeResponse(template (value) octetstring euiccChallenge := '00112233445566778899AABBCCDDEEFF'O) := {
	euiccChallenge := euiccChallenge
}

/* GSMA SGP.22, section 5.7.8 (ES10x) */
template (present) EUICCInfo1
tr_EUICCInfo1 := {
	svn := ?,
	euiccCiPKIdListForVerification := ?,
	euiccCiPKIdListForSigning := ?
}
template (value) EUICCInfo1
ts_EUICCInfo1 := {
	svn := '020200'O,
	euiccCiPKIdListForVerification := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	},
	euiccCiPKIdListForSigning := {
	       'C0BC70BA36929D43B467FF57570530E57AB8FCD8'O,
	       'F54172BDF98A95D65CBEB88A38A1C11D800A85C3'O
	}
}

/* GSMA SGP.22, section 5.7.8 (ES10x) */
template (present) EUICCInfo2
tr_EUICCInfo2 := {
	profileVersion := ?,
	svn := ?,
	euiccFirmwareVer := ?,
	extCardResource := ?,
	uiccCapability := ?,
	ts102241Version := *,
	globalplatformVersion := *,
	rspCapability := ?,
	euiccCiPKIdListForVerification := ?,
	euiccCiPKIdListForSigning := ?,
	euiccCategory := *,
	forbiddenProfilePolicyRules := *,
	ppVersion := ?,
	sasAcreditationNumber := ?,
	certificationDataObject := *,
	treProperties := *,
	treProductReference := *,
	additionalEuiccProfilePackageVersions := *
}
template (value) EUICCInfo2
ts_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
}

/* GSMA SGP.22, section 5.7.10 (ES10x) */
template (value) RetrieveNotificationsListResponse
ts_retrieveNotificationsListResponse := {
	notificationList := {
		{
			profileInstallationResult := {
				profileInstallationResultData := {
					transactionId := 'AABBCC'O,
					notificationMetadata := {
						seqNumber := 1234,
						profileManagementOperation := '01'B, /* is this correct? (notificationInstall) */
						notificationAddress := "smdp.example.com",
						iccid := omit
					},
					smdpOid := id_rsp, /* random OBJECT IDENTIFIER for testing */
					finalResult := {
						successResult := {
							aid :=  'A0000005591010FFFFFFFF8900000D00'O,
							simaResponse := 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'O
						}
					}
				},
				euiccSignPIR := 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'O
			}
		}
	}
}

/* GSMA SGP.22, section 5.7.11 (ES10x) */
template (present) NotificationSentResponse
tr_notificationSentResponse := {
	deleteNotificationStatus := ?
}
template (value) NotificationSentResponse
ts_notificationSentResponse := {
	deleteNotificationStatus := 0 /* 0k */
}

/* GSMA SGP.22, section 5.7.13 (ES10x) */
template (present) AuthenticateServerResponse
tr_authenticateServerResponse := {
	authenticateResponseOk := {
		euiccSigned1 := {
			transactionId := ?,
			serverAddress := ?,
			serverChallenge := ?,
			euiccInfo2 := ?,
			ctxParams1 := tr_ctxParams1
		},
		euiccSignature1 := ?,
		euiccCertificate := ?,
		eumCertificate := ?
	}
}
template (value) AuthenticateServerResponse
ts_authenticateServerResponse := {
	authenticateResponseOk := {
		euiccSigned1 := {
			transactionId := 'ABCDEF'O,
			serverAddress := "smdp.example.com",
			serverChallenge := '01020304050607080910111213141516'O,
			euiccInfo2 := ts_EUICCInfo2,
			ctxParams1 := ts_ctxParams1
		},
		euiccSignature1 := '12345678'O,
		euiccCertificate := ts_cert_euicc_nist,
//		euiccCertificate := ts_cert_euicc_brp,
		eumCertificate := ts_cert_eum_nist
//		eumCertificate := ts_cert_eum_brp

	}
}

/* GSMA SGP.22, section 5.7.13 (ES10x) */
template (present) CancelSessionResponseOk
tr_cancelSessionResponseOk := {
	euiccCancelSessionSigned := {
		 transactionId := ?,
		 smdpOid := ?,
		 reason := ?
	},
	euiccCancelSessionSignature := ?
}
template (value) CancelSessionResponseOk
ts_cancelSessionResponseOk := {
	euiccCancelSessionSigned := {
		 transactionId := 'AABBCC'O,
		 smdpOid := id_rspRole_euicc,
		 reason := 5
	},
	euiccCancelSessionSignature := '1234567890'O
}
template (present) CancelSessionResponse
tr_cancelSessionResponse := {
	cancelSessionResponseOk := tr_cancelSessionResponseOk
}
template (value) CancelSessionResponse
ts_cancelSessionResponse := {
	cancelSessionResponseOk := ts_cancelSessionResponseOk
}

/* GSMA SGP.22, section 5.7.20 (ES10x) */
template (present) GetEuiccDataResponse
tr_getEuiccDataResponse := {
	eidValue := ?
}
template (value) GetEuiccDataResponse
ts_getEuiccDataResponse(template (value) octetstring eidValue := '000102030405060708090A0B0C0D0E0F'O) := {
	eidValue := eidValue
}

}
