MAP-ST-DataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0)
   gsm-Network (1) modules (3) map-ST-DataTypes (27) version9 (9)}

DEFINITIONS
IMPLICIT TAGS
::=
BEGIN

EXPORTS
	SecureTransportArg,
	SecureTransportRes,
	SecurityHeader,
	ProtectedPayload
;

IMPORTS
	IMSI

FROM MAP-CommonDataTypes {
   itu-t identified-organization (4) etsi (0) mobileDomain (0)
   gsm-Network (1) modules (3) map-CommonDataTypes (18) version9 (9)}
;

SecureTransportArg ::= SEQUENCE {
	securityHeader		SecurityHeader,
	protectedPayload		ProtectedPayload	OPTIONAL
	}
	-- The protectedPayload carries the result of applying the security function 
	-- defined in 3GPP TS 33.200 to the encoding of the argument of the securely
	-- transported operation

SecureTransportRes ::= SEQUENCE {
	securityHeader		SecurityHeader,
	protectedPayload		ProtectedPayload	OPTIONAL
	}
	-- The protectedPayload carries the result of applying the security function 
	-- defined in 3GPP TS 33.200 to the encoding of the result of the securely
	-- transported operation

SecurityHeader ::= SEQUENCE {
	securityParametersIndex	SecurityParametersIndex,
	originalComponentIdentifier	OriginalComponentIdentifier,
	initialisationVector	InitialisationVector	OPTIONAL,
	...}

ProtectedPayload ::= OCTET STRING(SIZE(1.. 3438))
	-- In protection mode 0 (noProtection) the ProtectedPayload carries the transfer
		-- syntax value of the component parameter identified by the
		-- originalComponentIdentifier.
	-- In protection mode 1 (integrityAuthenticity) the protectedPayload carries 
		--  the transfer syntax value of the component
		-- parameter identified by the originalComponentIdentifier, followed by
		-- the 32 bit integrity check value.
		-- The integrity check value is the result of applying the hash algorithm
		-- to the concatenation of the transfer syntax value of the SecurityHeader,
		-- and the transfer syntax value of the component parameter. 
	-- In protection mode 2 (confidentialityIntegrityAuthenticity) the protected
		-- payload carries the encrypted transfer syntax
		-- value of the component parameter identified by the
		-- originalComponentIdentifier, followed by the 32 bit integrity check value.
		-- The integrity check value is the result of applying the hash algorithm
		-- to the concatenation of the transfer syntax value of the SecurityHeader,
		-- and the encrypted transfer syntax value of the component parameter. 
	-- See 33.200.
	-- The length of the protectedPayload is adjusted according to the capabilities of
	-- the lower protocol layers

SecurityParametersIndex ::= OCTET STRING (SIZE(4))

InitialisationVector ::= OCTET STRING (SIZE(14)) 
	-- the internal structure is defined as follows:
	-- Octets 1 to 4 : TVP. The TVP is a 32 bit time stamp. Its value is binary coded
	--		          and indicates the number of intervals of 100 milliseconds
	--		          elapsed since 1st January 2002, 0:00:00 UTC
	-- Octets 5 to 10: NE-Id. The NE-Id uniquely identifies the sending network entity
	--		          within the PLMN. It is the entity's E.164 number without CC and
	--		          NDC. It is TBCD-coded, padded with zeros.
	-- Octets 11 to 14: PROP. This 32 bit value is used to make the
	--		          InitialisationVector unique within the same TVP period.
	--		          The content is not standardized.


OriginalComponentIdentifier ::= CHOICE {
	operationCode	[0] OperationCode,
	errorCode		[1] ErrorCode,
	userInfo		[2] NULL}

OperationCode ::= CHOICE {
	localValue	INTEGER,
	globalValue	OBJECT IDENTIFIER}

ErrorCode ::= CHOICE {
	localValue	INTEGER,
	globalValue	OBJECT IDENTIFIER}

END

