diff --git a/102232-1/HI1NotificationOperations.asn b/102232-1/HI1NotificationOperations.asn new file mode 100644 index 0000000000000000000000000000000000000000..c17136dee9b00b6e92c5184c38839f9a6240c7b9 --- /dev/null +++ b/102232-1/HI1NotificationOperations.asn @@ -0,0 +1,151 @@ +HI1NotificationOperations +{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi1(0) notificationOperations(1) version7(7)} + +-- This ASN.1 module was previously provided by TS 101 671, +-- which was marked as historical in V3.15.1 (2018-06). +-- +-- This ASN.1 module has been copied from TS 101 671 V3.15.1 to +-- TS 102 232-1 (the present document) to assist implementors of LI-PS-PDU. +-- The ASN.1 in this module shall be equivalent to that in TS 101 671 +-- so that the ASN.1 encodes identically. +-- +-- The types based on ITU-T X.880 ROSE have been disabled because they're not +-- required by LI-PS-PDU or modules imported by LI-PS-PDU. +-- +-- Due to the historical status of ETSI TS 101 671 it is not possible to update +-- this module. Do not use it in future change requests. + +DEFINITIONS IMPLICIT TAGS ::= +BEGIN + +IMPORTS + +-- Start of disable of ITU-T X.880 ROSE +-- +-- OPERATION, +-- ERROR +-- FROM Remote-Operations-Information-Objects +-- {joint-iso-itu-t(2) remote-operations(4) informationObjects(5) version1(0)} +-- +-- End of disable of ITU-T X.880 ROSE + + CommunicationIdentifier, + TimeStamp, + LawfulInterceptionIdentifier + FROM HI2Operations + {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi2(1) version10(10)}; + +-- ============================= +-- Object Identifier Definitions +-- ============================= + +-- LawfulIntercept DomainId +lawfulInterceptDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2)} + +-- hi1 Domain +hi1NotificationOperationsId OBJECT IDENTIFIER ::= {lawfulInterceptDomainId hi1(0) notificationOperations(1)} +hi1OperationId OBJECT IDENTIFIER ::= {hi1NotificationOperationsId version6(6)} + + +-- Start of disable of ITU-T X.880 ROSE +-- +-- sending-of-HI1-Notification OPERATION ::= +-- { +-- ARGUMENT HI1-Operation +-- ERRORS {ErrorHI1Notifications} +-- CODE global:{hi1NotificationOperationsId version1(1)} +-- } +-- Class 2 operation. The timer shall be set to a value between 3s and 240s. +-- The timer default value is 60s. +-- NOTE: The value for this timer is to be set on the equipment waiting for the returned message; +-- its value shall be agreed between the NWO/AP/SvP and the LEA, depending on their equipment +-- properties. +-- +-- other-failure-causes ERROR ::= {CODE local:0} +-- missing-parameter ERROR ::= {CODE local:1} +-- unknown-parameter ERROR ::= {CODE local:2} +-- erroneous-parameter ERROR ::= {CODE local:3} +-- +-- ErrorHI1Notifications ERROR ::= +-- { +-- other-failure-causes | +-- missing-parameter | +-- unknown-parameter | +-- erroneous-parameter +-- } +-- +-- End of disable of ITU-T X.880 ROSE + + +HI1-Operation ::= CHOICE +{ + liActivated [1] Notification, + liDeactivated [2] Notification, + liModified [3] Notification, + alarms-indicator [4] Alarm-Indicator, + ..., + national-HI1-ASN1parameters [5] National-HI1-ASN1parameters +} + +-- ================== +-- PARAMETERS FORMATS +-- ================== + +Notification ::= SEQUENCE +{ + domainID [0] OBJECT IDENTIFIER (hi1OperationId) OPTIONAL, + -- Once using FTP delivery mechanism + lawfulInterceptionIdentifier [1] LawfulInterceptionIdentifier, + -- This identifier is the LIID identity provided with the lawful authorization + -- for each target. + communicationIdentifier [2] CommunicationIdentifier OPTIONAL, + -- Only the NWO/PA/SvPIdentifier is provided (the one provided with the Lawful + -- authorization). + -- Called "callIdentifier" in V1.1.1 of TS 101 671 + timeStamp [3] TimeStamp, + -- date and time of the report. + ..., + national-HI1-ASN1parameters [5] National-HI1-ASN1parameters OPTIONAL, + target-Information [6] OCTET STRING (SIZE (1..256)) OPTIONAL + -- provides information about the number or the characteristic of the target + -- (e.g. E-mail address, E.164 number), ASCII format +} + +Alarm-Indicator ::= SEQUENCE +{ + domainID [0] OBJECT IDENTIFIER (hi1OperationId) OPTIONAL, + -- Once using FTP delivery mechanism + communicationIdentifier [1] CommunicationIdentifier OPTIONAL, + -- Only the NWO/PA/SvPIdentifier is provided (the one provided with the + -- Lawful authorization) + timeStamp [2] TimeStamp, + -- date and time of the report. + alarm-information [3] OCTET STRING (SIZE (1..256)), + -- Provides information about alarms (free format). + -- Until ASN.1 version 6 (TS 101 671 V3.12.1) the octet string + -- was limited to a size of 25 + ..., + lawfulInterceptionIdentifier [4] LawfulInterceptionIdentifier OPTIONAL, + -- This identifier is the LIID identity provided with the lawful authorization + -- for each target in according to national law. + national-HI1-ASN1parameters [5] National-HI1-ASN1parameters OPTIONAL +} + +National-HI1-ASN1parameters ::= SEQUENCE +{ + domainID [0] OBJECT IDENTIFIER (hi1OperationId) OPTIONAL, + -- Once using FTP delivery mechanism. + countryCode [1] PrintableString (SIZE (2)), + -- Country Code according to ISO 3166-1, + -- the country to which the parameters inserted after the extension marker apply. + ... + -- In case a given country wants to use additional national parameters according to its law, + -- these national parameters should be defined using the ASN.1 syntax and added after the + -- extension marker (...). + -- It is recommended that "version parameter" and "vendor identification parameter" are + -- included in the national parameters definition. Vendor identifications can be + -- retrieved from IANA web site (see annex K). Besides, it is recommended to avoid + -- using tags from 240 to 255 in a formal type definition. +} + +END -- end of HI1NotificationOperations diff --git a/102232-1/HI2Operations.asn b/102232-1/HI2Operations.asn new file mode 100644 index 0000000000000000000000000000000000000000..4dcf260ca3a7b0dc67e3489ebe99290857ea1ffb --- /dev/null +++ b/102232-1/HI2Operations.asn @@ -0,0 +1,1067 @@ +HI2Operations +{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi2(1) version17(18)} + +-- This ASN.1 module was previously provided by TS 101 671, +-- which was marked as historical in V3.15.1 (2018-06). +-- +-- This ASN.1 module has been copied from TS 101 671 V3.15.1 to +-- TS 102 232-1 (the present document) to assist implementors of LI-PS-PDU. +-- The ASN.1 in this module shall be equivalent to that in TS 101 671 +-- so that the ASN.1 encodes identically. +-- +-- The types based on ITU-T X.880 ROSE have been disabled because they're not +-- required by LI-PS-PDU or modules imported by LI-PS-PDU. +-- +-- Due to the historical status of ETSI TS 101 671 it is not possible to update +-- this module. Do not use it in future change requests. + +-- It is advised not to use version11(11) of this ASN.1 module since it contains a syntax error. +-- Version11(11) of HI2Operations is only defined in TS 101 671 v3.5.1. + +DEFINITIONS IMPLICIT TAGS ::= + +BEGIN + +IMPORTS + +-- Start of disable of ITU-T X.880 ROSE +-- +-- OPERATION, +-- ERROR +-- FROM Remote-Operations-Information-Objects +-- {joint-iso-itu-t(2) remote-operations(4) informationObjects(5) version1(0)} +-- +-- End of disable of ITU-T X.880 ROSE + + -- from 3GPP TS 33.108 + UmtsQos, + IMSevent, + LDIevent, + CorrelationValues + FROM UmtsHI2Operations + {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulintercept(2) threeGPP(4) hi2(1) r11(11) version-0(0)} + + -- from TS 101 909-20-1 + TARGETACTIVITYMONITOR-1 + FROM TS101909201 + {itu-t(0) identified-organization(4) etsi(0) ts101909(1909) part20(20) subpart1(1) interceptVersion(0)} + + -- from EN 301 040 + TARGETACTIVITYMONITORind, + TARGETCOMMSMONITORind, + TTRAFFICind, + CTTRAFFICind + FROM EN301040 + {itu-t(0) identified-organization(4) etsi(0) en301040 (1040) interceptVersion (0)}; + +-- ============================= +-- Object Identifier Definitions +-- ============================= + +-- LawfulIntercept DomainId +lawfulInterceptDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2)} + +-- Security Subdomains +hi2DomainId OBJECT IDENTIFIER ::= {lawfulInterceptDomainId hi2(1)} +hi2OperationId OBJECT IDENTIFIER ::= {hi2DomainId version18(18)} + + +-- Start of disable of ITU-T X.880 ROSE +-- +-- sending-of-IRI OPERATION ::= +-- { +-- ARGUMENT IRIsContent +-- ERRORS {OperationErrors} +-- CODE global:{hi2DomainId sending-of-IRI(1) version1(1)} +-- } +-- Class 2 operation. The timer shall be set to a value between 3s and 240s. +-- The timer default value is 60s. +-- NOTE: The same note as for HI management operation applies. +-- +-- End of disable of ITU-T X.880 ROSE + + +IRIsContent ::= CHOICE +{ + iRIContent IRIContent, + iRISequence IRISequence +} + +IRISequence ::= SEQUENCE OF IRIContent + -- Aggregation of IRIContent is an optional feature. + -- It may be applied in cases when at a given point in time several IRI records are + -- available for delivery to the same LEA destination. + -- As a general rule, records created at any event shall be sent immediately and shall + -- not held in the DF or MF in order to apply aggregation. + -- When aggregation is not to be applied, IRIContent needs to be chosen. + +IRIContent ::= CHOICE +{ + iRI-Begin-record [1] IRI-Parameters, + -- At least one optional parameter must be included within the iRI-Begin-Record. + iRI-End-record [2] IRI-Parameters, + iRI-Continue-record [3] IRI-Parameters, + -- At least one optional parameter must be included within the iRI-Continue-Record. + iRI-Report-record [4] IRI-Parameters, + -- At least one optional parameter must be included within the iRI-Report-Record. + ... +} + + +-- Start of disable of ITU-T X.880 ROSE +-- +-- unknown-version ERROR ::= {CODE local:0} +-- missing-parameter ERROR ::= {CODE local:1} +-- unknown-parameter-value ERROR ::= {CODE local:2} +-- unknown-parameter ERROR ::= {CODE local:3} +-- +-- OperationErrors ERROR ::= +-- { +-- unknown-version | +-- missing-parameter | +-- unknown-parameter-value | +-- unknown-parameter +-- } +-- These values may be sent by the LEMF, when an operation or a parameter is misunderstood. +-- +-- End of disable of ITU-T X.880 ROSE + + +IRI-Parameters ::= SEQUENCE +{ + domainID [0] OBJECT IDENTIFIER (hi2OperationId) OPTIONAL, + -- for the sending entity the inclusion of the Object Identifier is mandatory + iRIversion [23] ENUMERATED + { + version2(2), + ..., + version3(3), + version4(4), + version5(5), + version6(6), + version7(7), + lastVersion(8) + } OPTIONAL, + -- Optional parameter "iRIversion" (tag 23) is redundant starting + -- from TS 101 671 v2.5.1 + -- where to the object identifier "domainID" was introduced into IRI-Parameters. + -- In order to keep backward compatibility, even when the version of the "domainID" + -- parameter will be incremented it is recommended to always send to LEMF the same: + -- enumeration value "lastVersion(8)". + -- if not present, it means version 1 is handled + lawfulInterceptionIdentifier [1] LawfulInterceptionIdentifier, + -- This identifier is associated to the target. + communicationIdentifier [2] CommunicationIdentifier, + -- used to uniquely identify an intercepted call. + -- Called "callIdentifier" in v1.1.1 of TS 101 671 + timeStamp [3] TimeStamp, + -- date and time of the event triggering the report. + intercepted-Call-Direct [4] ENUMERATED + { + not-Available(0), + originating-Target(1), + -- In case of GPRS, this indicates that the PDP context activation, modification + -- or deactivation is MS requested. + terminating-Target(2), + -- In case of GPRS, this indicates that the PDP context activation, modification + -- or deactivation is network initiated. + ... + } OPTIONAL, + intercepted-Call-State [5] Intercepted-Call-State OPTIONAL, + ringingDuration [6] OCTET STRING (SIZE (3)) OPTIONAL, + -- Duration in seconds. BCD coded: HHMMSS + conversationDuration [7] OCTET STRING (SIZE (3)) OPTIONAL, + -- Duration in seconds. BCD coded: HHMMSS + locationOfTheTarget [8] Location OPTIONAL, + -- location of the target subscriber + partyInformation [9] SET SIZE (1..10) OF PartyInformation OPTIONAL, + -- This parameter provides the concerned party (Originating, Terminating or forwarded + -- party), the identity(ies) of the party and all the information provided by the party. + callContentLinkInformation [10] SEQUENCE + { + cCLink1Characteristics [1] CallContentLinkCharacteristics OPTIONAL, + -- Information concerning the Content of Communication Link Tx channel established + -- toward the LEMF (or the sum signal channel, in case of mono mode). + cCLink2Characteristics [2] CallContentLinkCharacteristics OPTIONAL, + -- Information concerning the Content of Communication Link Rx channel established + -- toward the LEMF. + ... + } OPTIONAL, + release-Reason-Of-Intercepted-Call [11] OCTET STRING (SIZE (2)) OPTIONAL, + -- Release cause coded in Recommendation ITU-T Q.850 format. + -- This parameter indicates the reason why the intercepted call cannot be established or + -- why the intercepted call has been released after the active phase. + nature-Of-The-intercepted-call [12] ENUMERATED + { + -- Nature of the intercepted "call": + gSM-ISDN-PSTN-circuit-call(0), + -- the possible UUS content is sent through the HI2 or HI3 "data" interface + -- the possible call content call is established through the HI3 "circuit" interface + gSM-SMS-Message(1), + -- the SMS content is sent through the HI2 or HI3 "data" interface + uUS4-Messages(2), + -- the UUS content is sent through the HI2 or HI3 "data" interface + tETRA-circuit-call(3), + -- the possible call content call is established through the HI3 "circuit" interface + -- the possible data are sent through the HI3 "data" interface + teTRA-Packet-Data(4), + -- the data are sent through the HI3 "data" interface + gPRS-Packet-Data(5), + -- the data are sent through the HI3 "data" interface + ..., + uMTS-circuit-call(6), + -- the possible call content call is established through the HI3 "circuit" interface + -- the possible data are sent through the HI3 "data" interface + lTE-SMS-Message(7), + -- indicator for SMS from LTE handset + -- the SMS content is sent through the HI2 or HI3 "data" interface + lTE-circuit-call(8) + -- indicator for CS call from LTE handset +} OPTIONAL, + serverCenterAddress [13] PartyInformation OPTIONAL, + -- e.g. in case of SMS message this parameter provides the address of the relevant + -- server within the calling (if server is originating) or called + -- (if server is terminating) party address parameters + sMS [14] SMS-report OPTIONAL, + -- this parameter provides the SMS content and associated information + cC-Link-Identifier [15] CC-Link-Identifier OPTIONAL, + -- Depending on a network option, this parameter may be used to identify a CC link + -- in case of multiparty calls. + national-Parameters [16] National-Parameters OPTIONAL, + gPRSCorrelationNumber [18] GPRSCorrelationNumber OPTIONAL, + gPRSevent [20] GPRSEvent OPTIONAL, + -- This information is used to provide particular action of the target + -- such as attach/detach + sgsnAddress [21] DataNodeAddress OPTIONAL, + gPRSOperationErrorCode [22] GPRSOperationErrorCode OPTIONAL, + ..., + ggsnAddress [24] DataNodeAddress OPTIONAL, + qOS [25] UmtsQos OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108. + networkIdentifier [26] Network-Identifier OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108. + sMSOriginatingAddress [27] DataNodeAddress OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108. + sMSTerminatingAddress [28] DataNodeAddress OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108. + iMSevent [29] IMSevent OPTIONAL, + sIPMessage [30] OCTET STRING OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108. + servingSGSN-number [31] OCTET STRING (SIZE (1..20)) OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108. + servingSGSN-address [32] OCTET STRING (SIZE (5..17)) OPTIONAL, + -- Octets are coded according to 3GPP TS 23.003 + -- This parameter is duplicated from 3GPP TS 33.108. + tARGETACTIVITYMONITOR [33] TARGETACTIVITYMONITOR-1 OPTIONAL, + -- Parameter is used in TS 101 909-20-1 + ldiEvent [34] LDIevent OPTIONAL, + -- The "Location Dependent Interception" parameter is duplicated from 3GPP TS 33.108 + correlation [35] CorrelationValues OPTIONAL, + -- This parameter is duplicated from 3GPP TS 33.108 + tARGETACTIVITYMONITORind [36] TARGETACTIVITYMONITORind OPTIONAL, + -- Parameter is used in EN 301 040 + tARGETCOMMSMONITORind [37] TARGETCOMMSMONITORind OPTIONAL, + -- Parameter is used in EN 301 040 + tTRAFFICind [38] TTRAFFICind OPTIONAL, + -- Parameter is used in EN 301 040 + cTTRAFFICind [39] CTTRAFFICind OPTIONAL, + -- Parameter is used in EN 301 040 + servingSystem [40] Network-Element-Identifier OPTIONAL, + -- Parameter identifies the visited network element + national-HI2-ASN1parameters [255] National-HI2-ASN1parameters OPTIONAL +} + +-- ================== +-- PARAMETERS FORMATS +-- ================== + +CommunicationIdentifier ::= SEQUENCE +{ + communication-Identity-Number [0] OCTET STRING (SIZE (1..8)) OPTIONAL, + -- Temporary Identifier of an intercepted call to uniquely identify an intercepted call + -- within the node. This parameter is mandatory if there is associated + -- information sent over HI3interface (CClink, data,..) or when + -- CommunicationIdentifier is used for IRI other than IRI-Report-record + -- This parameter was called "call-Identity-Number" in V1.1.1 of TS 101 671 + -- The individual digits of the communication-Identity-Number shall be represented in + -- ASCII format, e.g. "12345678" = 8 octets 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38. + -- For subaddress option only "0"..."9" shall be used. + network-Identifier [1] Network-Identifier, + ... +} +-- NOTE: The same "CommunicationIdentifier" value is sent: +-- with the HI3 information for correlation purpose between the IRI and the information sent +-- on the HI3 interfaces (CCLink, data, ..) with each IRI associated to a same intercepted +-- call for correlation purpose between the different IRI. + +Network-Identifier ::= SEQUENCE +{ + operator-Identifier [0] OCTET STRING (SIZE (1..5)), + -- It is a notification of the NWO/AP/SvP in ASCII- characters. + -- For subaddress option only "0"..."9" shall be used. + -- The parameter is mandatory. + network-Element-Identifier [1] Network-Element-Identifier OPTIONAL, + ... +} + +Network-Element-Identifier ::= CHOICE +{ + e164-Format [1] OCTET STRING (SIZE (1..25)), + -- E164 address of the node in international format. Coded in the same format as the + -- calling party number parameter of the ISUP (parameter part: EN 300 356). + x25-Format [2] OCTET STRING (SIZE (1..25)), + -- X25 address + iP-Format [3] OCTET STRING (SIZE (1..25)), + -- IP address + dNS-Format [4] OCTET STRING (SIZE (1..25)), + -- DNS address + ..., + iP-Address [5] IPAddress +} + +CC-Link-Identifier ::= OCTET STRING (SIZE (1..8)) + -- Depending on a network option, this parameter may be used to identify a CClink + -- in case of multiparty calls. + -- The individual digits of the CC-Link-Identifier shall be represented in + -- ASCII format, e.g. "12345678" = 8 octets 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38. + -- For subaddress option only "0"..."9" shall be used. + +TimeStamp ::= CHOICE +{ +-- The minimum resolution required is one second. +-- "Resolution" is the smallest incremental change that can be measured for time and +-- is expressed with a definite number of decimal digits or bits. + localTime [0] LocalTimeStamp, + utcTime [1] UTCTime +} + +LocalTimeStamp ::= SEQUENCE +{ + generalizedTime [0] GeneralizedTime, + -- The minimum resolution required is one second. + -- "Resolution" is the smallest incremental change that can be measured for time and + -- is expressed with a definite number of decimal digits or bits. + winterSummerIndication [1] ENUMERATED + { + notProvided(0), + winterTime(1), + summerTime(2), + ... + } +} + +PartyInformation ::= SEQUENCE +{ + party-Qualifier [0] ENUMERATED + { + originating-Party(0), + -- In this case, the partyInformation parameter provides the identities related to + -- the originating party and all information provided by this party. + -- This parameter provides also all the information concerning the redirecting + -- party when a forwarded call reaches a target. + terminating-Party(1), + -- In this case, the partyInformation parameter provides the identities related to + -- the terminating party and all information provided by this party. + forwarded-to-Party(2), + -- In this case, the partyInformation parameter provides the identities related to + -- the forwarded to party and parties beyond this one and all information + -- provided by this parties, including the call forwarding reason. + gPRS-Target(3), + ... + }, + partyIdentity [1] SEQUENCE + { + imei [1] OCTET STRING (SIZE (8)) OPTIONAL, + -- See MAP format 3GPP TS 29.002 + tei [2] OCTET STRING (SIZE (1..15)) OPTIONAL, + -- ISDN-based Terminal Equipment Identity + imsi [3] OCTET STRING (SIZE (3..8)) OPTIONAL, + -- See MAP format 3GPP TS 29.002 International Mobile + -- Station Identity E.212 number beginning with Mobile Country Code + callingPartyNumber [4] CallingPartyNumber OPTIONAL, + -- The calling party format is used to transmit the identity of a calling party + calledPartyNumber [5] CalledPartyNumber OPTIONAL, + -- The called party format is used to transmit the identity of a called party or + -- a forwarded to party. + msISDN [6] OCTET STRING (SIZE (1..9)) OPTIONAL, + -- MSISDN of the target, encoded in the same format as the AddressString + -- parameters defined in MAP format 3GPP TS 29.002 + ..., + e164-Format [7] OCTET STRING (SIZE (1..25)) OPTIONAL, + -- E164 address of the node in international format. Coded in the same format as + -- the calling party number parameter of the ISUP (parameter part: EN 300 356) + sip-uri [8] OCTET STRING OPTIONAL, + -- Session Initiation Protocol - Uniform Resource Identifier. See IETF RFC 3261. + -- This parameter is duplicated from 3GPP TS 33.108. + tel-url [9] OCTET STRING OPTIONAL, + -- See "URLs for Telephone Calls", IETF RFC 3966. + -- This parameter is duplicated from 3GPP TS 33.108. + party-Validity [10] ENUMERATED + { + trusted(0), + -- The operator has assured the party identity + untrusted(1), + -- The operator does not assure the party identity + operator-added(2), + -- The party identity is added by the operator, e.g. the roaming number + ... + } OPTIONAL, + alphanumeric [11] UTF8String OPTIONAL + -- see TS 101 671 clause A.3.3 on usage of this parameter + }, + services-Information [2] Services-Information OPTIONAL, + -- This parameter is used to transmit all the information concerning the + -- complementary information associated to the basic call + supplementary-Services-Information [3] Supplementary-Services OPTIONAL, + -- This parameter is used to transmit all the information concerning the + -- activation/invocation of supplementary services during a call or out-of call not + -- provided by the previous parameters. + services-Data-Information [4] Services-Data-Information OPTIONAL, + -- This parameter is used to transmit all the information concerning the complementary + -- information associated to the basic data call. + ... +} + +CallingPartyNumber ::= CHOICE +{ + iSUP-Format [1] OCTET STRING (SIZE (1..25)), + -- Encoded in the same format as the calling party number (parameter field) + -- of the ISUP (see EN 300 356). + dSS1-Format [2] OCTET STRING (SIZE (1..25)), + -- Encoded in the format defined for the value part of the Calling party number + -- information element of DSS1 protocol EN 300 403-1. + -- The DSS1 Information element identifier and the DSS1 length are not included. + ..., + mAP-Format [3] OCTET STRING (SIZE (1..25)) + -- Encoded as AddressString of the MAP protocol 3GPP TS 29.002. +} + +CalledPartyNumber ::= CHOICE +{ + iSUP-Format [1] OCTET STRING (SIZE (1..25)), + -- Encoded in the same format as the called party number (parameter field) + -- of the ISUP (see EN 300 356). + mAP-Format [2] OCTET STRING (SIZE (1..25)), + -- Encoded as AddressString of the MAP protocol 3GPP TS 29.002. + dSS1-Format [3] OCTET STRING (SIZE (1..25)), + -- Encoded in the format defined for the value part of the Called party number information + -- element of DSS1 protocol EN 300 403-1. + -- The DSS1 Information element identifier and the DSS1 length are not included. + ... +} + +Location ::= SEQUENCE +{ + e164-Number [1] OCTET STRING (SIZE (1..25)) OPTIONAL, + -- Coded in the same format as the ISUP location number (parameter field) + -- of the ISUP (see EN 300 356). + globalCellID [2] OCTET STRING (SIZE (5..7)) OPTIONAL, + -- See MAP format (see 3GPP TS 29.002). + tetraLocation [3] TetraLocation OPTIONAL, + -- This optional parameter is not in use anymore, but is kept for backwards compatibility. + rAI [4] OCTET STRING (SIZE (6)) OPTIONAL, + -- The Routeing Area Identifier (RAI) in the current SGSN is coded in accordance with + -- 3GPP TS 24.008 without the Routing Area Identification IEI (only the + -- last 6 octets are used). + gsmLocation [5] GSMLocation OPTIONAL, + umtsLocation [6] UMTSLocation OPTIONAL, + sAI [7] OCTET STRING (SIZE (7)) OPTIONAL, + -- format: PLMN-ID 3 octets (no. 1-3), + -- LAC 2 octets (no. 4-5), + -- SAC 2 octets (no. 6-7) + -- (according to 3GPP TS 25.413). + ..., + oldRAI [8] OCTET STRING (SIZE (6)) OPTIONAL, + -- the "Routeing Area Identifier" in the old SGSN is coded in accordance with + -- 3GPP TS 24.008 without the Routing Area Identification IEI + -- (only the last 6 octets are used). + -- This parameter is duplicated from 3GPP TS 33.108. + tAI [9] OCTET STRING (SIZE (6)) OPTIONAL, + -- The "Tracking Area Identity" (TAI) is coded in accordance with 3GPP TS 29.118 + -- without the TAI IEI. + -- The tAI parameter is applicable only to the CS traffic cases where the available + -- location information is the one received from the Mobility Management Entity (MME). + -- This parameter is duplicated from 3GPP TS 33.108. + eCGI [10] OCTET STRING (SIZE (8)) OPTIONAL + -- the "E-UTRAN Cell Global Identity" (E-CGI) is coded in accordance with + -- 3GPP TS 29.118 without the E-CGI IEI. + -- The eCGI parameter is applicable only to the CS traffic cases where + -- the available location information is the one received from the MME. + -- This parameter is duplicated from 3GPP TS 33.108. +} + +TetraLocation ::= CHOICE + -- This optional parameter is not in use anymore, but is kept for backwards compatibility. +{ + ms-Loc [1] SEQUENCE + { + mcc [1] INTEGER (0..1023), + -- 10 bits EN 300 392-1 + mnc [2] INTEGER (0..16383), + -- 14 bits EN 300 392-1 + lai [3] INTEGER (0..65535), + -- 14 bits EN 300 392-1 + ci [4] INTEGER OPTIONAL + }, + ls-Loc [2] INTEGER +} + +GSMLocation ::= CHOICE +{ + geoCoordinates [1] SEQUENCE + { + latitude [1] PrintableString (SIZE(7..10)), + -- format: XDDMMSS.SS + longitude [2] PrintableString (SIZE(8..11)), + -- format: XDDDMMSS.SS + mapDatum [3] MapDatum DEFAULT wGS84, + ..., + azimuth [4] INTEGER (0..359) OPTIONAL + -- The azimuth is the bearing, relative to true north + }, + -- format: XDDDMMSS.SS + -- X : N(orth), S(outh), E(ast), W(est) + -- DD or DDD : degrees (numeric characters) + -- MM : minutes (numeric characters) + -- SS.SS : seconds, the second part (.SS) is optional + -- Example: + -- latitude short form N502312 + -- longitude long form E1122312.18 + + utmCoordinates [2] SEQUENCE + { + utm-East [1] PrintableString (SIZE(10)), + utm-North [2] PrintableString (SIZE(7)), + -- Universal Transverse Mercator + -- example utm-East 32U0439955 + -- utm-North 5540736 + mapDatum [3] MapDatum DEFAULT wGS84, + ..., + azimuth [4] INTEGER (0..359) OPTIONAL + -- The azimuth is the bearing, relative to true north + }, + + utmRefCoordinates [3] SEQUENCE + { + utmref-string PrintableString (SIZE(13)), + mapDatum MapDatum DEFAULT wGS84, + ... + }, + -- example 32UPU91294045 + + wGS84Coordinates [4] OCTET STRING + -- format is as defined in 3GPP TS 23.032 +} + +MapDatum ::= ENUMERATED +{ + wGS84, + -- World Geodetic System 1984 + wGS72, + eD50, + -- European Datum 50 + ... +} + +UMTSLocation ::= CHOICE +{ + point [1] GA-Point, + pointWithUnCertainty [2] GA-PointWithUnCertainty, + polygon [3] GA-Polygon, + ... +} + +GeographicalCoordinates ::= SEQUENCE +{ + latitudeSign ENUMERATED + { + north, + south + }, + latitude INTEGER (0..8388607), + longitude INTEGER (-8388608..8388607), + ... +} + +GA-Point ::= SEQUENCE +{ + geographicalCoordinates GeographicalCoordinates, + ... +} + +GA-PointWithUnCertainty ::=SEQUENCE +{ + geographicalCoordinates GeographicalCoordinates, + uncertaintyCode INTEGER (0..127) +} + +maxNrOfPoints INTEGER ::= 15 + +GA-Polygon ::= SEQUENCE (SIZE (1..maxNrOfPoints)) OF + SEQUENCE + { + geographicalCoordinates GeographicalCoordinates, + ... + } + +CallContentLinkCharacteristics ::= SEQUENCE +{ + cCLink-State [1] CCLink-State OPTIONAL, + -- current state of the CCLink + release-Time [2] TimeStamp OPTIONAL, + -- date and time of the release of the Call Content Link. + release-Reason [3] OCTET STRING (SIZE(2)) OPTIONAL, + -- Release cause coded in Recommendation ITU-T Q.850 format + lEMF-Address [4] CalledPartyNumber OPTIONAL, + -- Directory number used to route the call toward the LEMF + ... +} + +CCLink-State ::= ENUMERATED +{ + setUpInProcess(1), + -- The set-up of the call is in process + callActive(2), + callReleased(3), + lack-of-resource(4), + -- The lack-of-resource state is sent when a CC Link cannot + -- be established because of lack of resource at the MF level. + ... +} + +Intercepted-Call-State ::= ENUMERATED +{ + idle(1), + -- When the intercept call is released, the state is IDLE and the reason is provided + -- by the release-Reason-Of-Intercepted-Call parameter. + setUpInProcess(2), + -- The set-up of the call is in process + connected(3), + -- The answer has been received + ... +} + +Services-Information ::= SEQUENCE +{ + iSUP-parameters [1] ISUP-parameters OPTIONAL, + dSS1-parameters-codeset-0 [2] DSS1-parameters-codeset-0 OPTIONAL, + ..., + mAP-parameters [3] MAP-parameters OPTIONAL +} + +ISUP-parameters ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "OCTET STRING" contains one additional ISUP parameter TLV coded not already defined in + -- the previous parameters. The Tag value is the one given in EN 300 356. + + -- In version 1 of the present document "iSUP-parameters" is defined as mandatory. + -- It might occur that no ISUP parameter is available. In that case in a version 1 + -- implementation the value "zero" may be included in the first octet string of the SET. + + -- The Length and the Value are coded in accordance with the parameter definition in + -- EN 300 356. Hereafter are listed the main parameters. + -- However other parameters may be added: + + -- Transmission medium requirement: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the "calling party". + + -- Transmission medium requirement prime: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the "calling party". + +DSS1-parameters-codeset-0 ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "OCTET STRING" contains one DSS1 parameter of the codeset-0. The parameter is coded as + -- described in EN 300 403-1 (The DSS1 Information element identifier and the DSS1 length + -- are included). Hereafter are listed the main parameters. + -- However other parameters may be added: + + -- Bearer capability: this parameter may be repeated. Format defined in EN 300 403-1. + -- This parameter can be provided with the "Party Information" of the "calling party", + -- "called party" or "forwarded to party". + + -- High Layer Compatibility: this parameter may be repeated. Format defined in EN 300 403-1 + -- This parameter can be provided with the "Party Information" of the "calling party", + -- "called party" or "forwarded to party". + + -- Low Layer capability: this parameter may be repeated. Format defined in EN 300 403-1. + -- This parameter can be provided with the "Party Information" of the "calling party", + -- "called party" or "forwarded to party". + +MAP-parameters ::= SET SIZE (1..256) OF OCTET STRING (SIZE(1..256)) + -- Each "OCTET STRING" contains one MAP parameter. The parameter is coded as described in + -- 3GPP TS 29.002 (The map-TS-Code is included). + +Supplementary-Services ::= SEQUENCE +{ + standard-Supplementary-Services [1] Standard-Supplementary-Services OPTIONAL, + non-Standard-Supplementary-Services [2] Non-Standard-Supplementary-Services OPTIONAL, + other-Services [3] Other-Services OPTIONAL, + ... +} + +Standard-Supplementary-Services ::= SEQUENCE +{ + iSUP-SS-parameters [1] ISUP-SS-parameters OPTIONAL, + dSS1-SS-parameters-codeset-0 [2] DSS1-SS-parameters-codeset-0 OPTIONAL, + dSS1-SS-parameters-codeset-4 [3] DSS1-SS-parameters-codeset-4 OPTIONAL, + dSS1-SS-parameters-codeset-5 [4] DSS1-SS-parameters-codeset-5 OPTIONAL, + dSS1-SS-parameters-codeset-6 [5] DSS1-SS-parameters-codeset-6 OPTIONAL, + dSS1-SS-parameters-codeset-7 [6] DSS1-SS-parameters-codeset-7 OPTIONAL, + dSS1-SS-Invoke-components [7] DSS1-SS-Invoke-Components OPTIONAL, + mAP-SS-Parameters [8] MAP-SS-Parameters OPTIONAL, + mAP-SS-Invoke-Components [9] MAP-SS-Invoke-Components OPTIONAL, + ... +} + +Non-Standard-Supplementary-Services ::= SET SIZE (1..20) OF CHOICE +{ + simpleIndication [1] SimpleIndication, + sciData [2] SciDataMode, + ... +} + +Other-Services ::= SET SIZE (1..50) OF OCTET STRING (SIZE (1..256)) + -- Reference manufacturer manuals. + +ISUP-SS-parameters ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- It must be noticed this parameter is retained for compatibility reasons. + -- It is recommended not to use it in new work but to use ISUP-parameters parameter. + + -- Each "OCTET STRING" contains one additional ISUP parameter TLV coded not already defined in + -- the previous parameters. The Tag value is the one given in EN 300 356. + -- The Length and the Value are coded in accordance with the parameter definition in + -- EN 300 356. Hereafter are listed the main parameters. + -- However other parameters may be added: + + -- Connected Number: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the + -- "called party" or "forwarded to party". + + -- RedirectingNumber: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the "originating party" + -- or/and of the "terminating party". + + -- Original Called Party Number: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the "originating party". + + -- Redirection information: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the + -- "originating party", "forwarded to party" or/and "Terminating party". + + -- Redirection Number: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the + -- "forwarded to party" or "Terminating party". + + -- Call diversion information: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the + -- "forwarded to party" or "Terminating party". + + -- Generic Number: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the + -- "calling party", "called party" or "forwarded to party". + -- This parameters are used to transmit additional identities (additional, calling party + -- number, additional called number, etc.). + + -- Generic Notification: format defined in EN 300 356. + -- This parameter may be provided with the "Party Information" of the + -- "calling party", "called party" or "forwarded to party". + -- This parameters transmit the notification to the other part of the call of the supplementary + -- services activated or invoked by a subscriber during the call. + + -- CUG Interlock Code: format defined in EN 300 356. + -- This parameter can be provided with the "Party Information" of the "calling party". + +DSS1-SS-parameters-codeset-0 ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "OCTET STRING" contains one DSS1 parameter of the codeset-0. The parameter is coded as + -- described in EN 300 403-1 (The DSS1 Information element identifier and the DSS1 length + -- are included). Hereafter are listed the main parameters. + -- However other parameters may be added: + + -- Calling Party Subaddress: format defined in EN 300 403-1. + -- This parameter can be provided with the "Party Information" of the "calling party". + + -- Called Party Subaddress: format defined in EN 300 403-1. + -- This parameter can be provided with the "Party Information" of the "calling party". + + -- Connected Subaddress: format defined in recommendation (see EN 300 097-1). + -- This parameter can be provided with the "Party Information" of the + -- "called party" or "forwarded to party". + + -- Connected Number: format defined in recommendation (see EN 300 097-1). + -- This parameter can be provided with the "Party Information" of the + -- "called party" or "forwarded to party". + + -- Keypad facility: format defined in EN 300 403-1. + -- This parameter can be provided with the "Party Information" of the + -- "calling party", "called party" or "forwarded to party". + + -- Called Party Number: format defined in EN 300 403-1. + -- This parameter could be provided with the "Party Information" of the "calling party" + -- when target is the originating party; it contains the dialled digits before modification + -- at network level (e.g. IN interaction, translation, etc ...). + + -- User-user: format defined in EN 300 286-1). + -- This parameter can be provided with the "Party Information" of the + -- "calling party", "called party" or "forwarded to party". + +DSS1-SS-parameters-codeset-4 ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "OCTET STRING" contains one DSS1 parameter of the codeset-4. The parameter is coded as + -- described in the relevant recommendation. + +DSS1-SS-parameters-codeset-5 ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "OCTET STRING" contains one DSS1 parameter of the codeset-5. The parameter is coded as + -- described in the relevant national recommendation. + +DSS1-SS-parameters-codeset-6 ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "OCTET STRING" contains one DSS1 parameter of the codeset-6. The parameter is coded as + -- described in the relevant local network recommendation. + +DSS1-SS-parameters-codeset-7 ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "octet string" contains one DSS1 parameter of the codeset-7. The parameter is coded as + -- described in the relevant user specific recommendation. + +DSS1-SS-Invoke-Components ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "octet string" contains one DSS1 Invoke or Return Result component. + -- The invoke or return result component is coded as + -- described in the relevant DSS1 supplementary service recommendation. + + -- Invoke or Return Result component (BeginCONF): EN 300 185-1 + -- Invoke or Return Result component (AddCONF): EN 300 185-1 + -- Invoke or Return Result component (SplitCONF): EN 300 185-1 + -- Invoke or Return Result component (DropCONF): EN 300 185-1 + -- Invoke or Return Result component (IsolateCONF): EN 300 185-1 + -- Invoke or Return Result component (ReattachCONF): EN 300 185-1 + -- Invoke or Return Result component (PartyDISC): EN 300 185-1 + -- Invoke or Return Result component (MCIDRequest): EN 300 130-1 + -- Invoke or Return Result component (Begin3PTY): EN 300 188-1 + -- Invoke or Return Result component (End3PTY): EN 300 188-1 + -- Invoke or Return Result component (ECTExecute): EN 300 369-1 + -- Invoke or Return Result component (ECTInform): EN 300 369-1 + -- Invoke or Return Result component (ECTLinkIdRequest): EN 300 369-1 + -- Invoke or Return Result component (ECTLoopTest): EN 300 369-1 + -- Invoke or Return Result component (ExplicitECTExecute): EN 300 369-1 + -- Invoke or Return Result component (ECT: RequestSubaddress): EN 300 369-1 + -- Invoke or Return Result component (ECT: SubaddressTransfer): EN 300 369-1 + -- Invoke or Return Result component (CF: ActivationDiversion): EN 300 207-1 + -- Invoke or Return Result component (CF: DeactivationDiversion): EN 300 207-1 + -- Invoke or Return Result component (CF: ActivationStatusNotification): EN 300 207-1 + -- Invoke or Return Result component (CF: DeactivationStatusNotification): EN 300 207-1 + -- Invoke or Return Result component (CF: InterrogationDiversion): EN 300 207-1 + -- Invoke or Return Result component (CF: InterrogationServedUserNumber): EN 300 207-1 + -- Invoke or Return Result component (CF: DiversionInformation): EN 300 207-1 + -- Invoke or Return Result component (CF: CallDeflection): EN 300 207-1 + -- Invoke or Return Result component (CF: CallRerouteing): EN 300 207-1 + -- Invoke or Return Result component (CF: DivertingLegInformation1): EN 300 207-1 + -- Invoke or Return Result component (CF: DivertingLegInformation2): EN 300 207-1 + -- Invoke or Return Result component (CF: DivertingLegInformation3): EN 300 207-1 + -- other invoke or return result components ... + +MAP-SS-Invoke-Components ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "octet string" contains one MAP Invoke or Return Result component. + -- The invoke or return result component is coded as + -- described in the relevant MAP supplementary service recommendation. + +MAP-SS-Parameters ::= SET SIZE (1..256) OF OCTET STRING (SIZE (1..256)) + -- Each "octet string" contains one MAP Parameter. The parameter is coded as + -- described in the relevant MAP supplementary service recommendation. + +SimpleIndication ::= ENUMERATED +{ + call-Waiting-Indication(0), + -- The target has received a call waiting indication for this call + add-conf-Indication(1), + -- this call has been added to a conference + call-on-hold-Indication(2), + -- indication that this call is on hold + retrieve-Indication(3), + -- indication that this call has been retrieved + suspend-Indication(4), + -- indication that this call has been suspended + resume-Indication(5), + -- indication that this call has been resumed + answer-Indication(6), + -- indication that this call has been answered + ... +} + +SciDataMode ::= OCTET STRING (SIZE (1..256)) + +SMS-report ::= SEQUENCE +{ + communicationIdentifier [1] CommunicationIdentifier, + -- used to uniquely identify an intercepted call: the same used for the + -- relevant IRI + -- Called "callIdentifier" in V1.1.1 of TS 101 671 + timeStamp [2] TimeStamp, + -- date and time of the report. The format is + -- the one defined in case a) of the ASN.1 Recommendation ITU-T X.680. + -- (year month day hour minutes seconds) + sMS-Contents [3] SEQUENCE + { + initiator [1] ENUMERATED + { + -- party which sent the SMS + target(0), + server(1), + undefined-party(2), + ... + }, + transfer-status [2] ENUMERATED + { + succeed-transfer(0), + --the transfer of the SMS message succeeds + not-succeed-transfer(1), + undefined(2), + ... + } OPTIONAL, + other-message [3] ENUMERATED + { + -- In case of terminating call, indicates if the server will send other SMS. + yes(0), + no(1), + undefined(2), + ... + } OPTIONAL, + content [4] OCTET STRING (SIZE (1..270)) OPTIONAL, + -- Encoded in the format defined for the SMS mobile. + -- The content and enhancedContent fields are mutually exclusive. + -- The content field is dedicated for 3GPP purposes. + ..., + enhancedContent [5] SEQUENCE + { + content [1] OCTET STRING, + -- The character encoding used in the content field is specified in the + -- character-encoding field. + character-encoding [2] ENUMERATED + { + gsm-7-bit-ascii(0), + eight-bit-ascii(1), + eight-bit-binary(2), + ucs-2(3), + utf-8(4), + utf-16(5), + other(6), + ... + } + } OPTIONAL + } +} + +LawfulInterceptionIdentifier ::= OCTET STRING (SIZE (1..25)) + -- It is recommended to use ASCII characters in "a"..."z", "A"..."Z", "-", "_", ".", and "0"..."9". + -- For subaddress option only "0"..."9" shall be used. + +National-Parameters ::= SET SIZE (1..40) OF OCTET STRING (SIZE (1..256)) + -- Content defined by national law. + +GPRSCorrelationNumber ::= OCTET STRING (SIZE(8..20)) + +GPRSEvent ::= ENUMERATED + -- see 3GPP TS 03.33 +{ + pDPContextActivation(1), + startOfInterceptionWithPDPContextActive(2), + pDPContextDeactivation(4), + gPRSAttach(5), + gPRSDetach(6), + cellOrRAUpdate(10), + sMS(11), + ..., + pDPContextModification(13), + endOfInterceptionWithPDPContextActive(14) +} + +Services-Data-Information ::= SEQUENCE +{ + gPRS-parameters [1] GPRS-parameters OPTIONAL, + ... +} + +GPRS-parameters ::= SEQUENCE +{ + pDP-address-allocated-to-the-target [1] DataNodeAddress OPTIONAL, + aPN [2] OCTET STRING (SIZE(1..100)) OPTIONAL, + -- The Access Point Name (APN) is coded in accordance with + -- 3GPP TS 24.008 without the APN IEI (only the last 100 octets are used). + -- Octets are coded according to 3GPP TS 23.003. + -- This parameter is duplicated from 3GPP TS 33.108. + pDP-type [3] OCTET STRING (SIZE(2)) OPTIONAL, + -- when PDP-type is IPv4 or IPv6, the IP address is carried by parameter + -- pDP-address-allocated-to-the-target when PDP-type is IPv4v6, + -- the additional IP address is carried by parameter additionalIPaddress + ..., + nSAPI [4] OCTET STRING (SIZE (1)) OPTIONAL, + additionalIPaddress [5] DataNodeAddress OPTIONAL +} + +GPRSOperationErrorCode ::= OCTET STRING (SIZE(2)) + -- Refer to 3GPP TS 24.008 for values (GMM cause or SM cause parameter). + +DataNodeAddress ::= CHOICE +{ + ipAddress [1] IPAddress, + x25Address [2] X25Address, + ... +} + +IPAddress ::= SEQUENCE +{ + iP-type [1] ENUMERATED + { + iPV4(0), + iPV6(1), + ... + }, + iP-value [2] IP-value, + iP-assignment [3] ENUMERATED + { + static(1), + -- The static coding shall be used to report a static address. + dynamic(2), + -- The dynamic coding shall be used to report a dynamically allocated address. + notKnown(3), + -- The notKnown coding shall be used to report other then static or dynamically + -- allocated IP addresses. + ... + } OPTIONAL, + ..., + iPv6PrefixLength [4] INTEGER (1..128) OPTIONAL, + -- Indicates the length of the prefix delegated by the CSP to the subscriber + -- example: 60 if IP address is "2001:db8:0:85a3::ac1f:8001/60" + -- Mandatory in case where the iP-value contains an IPv6 binary value + iPv4SubnetMask [5] OCTET STRING (SIZE(4)) OPTIONAL + -- For IPv4 addresses, this indicates the subnetmask to be applied to the iP-value field. + -- The subnet mask is intended to be presented as a binary value, e.g. "ff ff ff f8" to + -- represent the dotted-decimal subnet mask of "255.255.255.248" corresponding to + -- a /29 CIDR-format subnet mask +} + +IP-value ::= CHOICE +{ + iPBinaryAddress [1] OCTET STRING (SIZE(4..16)), + -- In case of IPv6, the Prefix Length is provided by the "iPv6PrefixLength" + -- In case of IPv4, the netmask is provided by the "iPv4SubnetMask" + iPTextAddress [2] IA5String (SIZE(7..45)), + -- In case of IPv6, the delivered iPTextAddress field could include a complete + -- single IPv6-Address or an IPv6-Prefix for a subnetwork on the target side. + -- In case of IPv4, the delivered iPTextAddress field could include a single + -- IPv4 address or an IPv4address/netmask, for example "192.168.1.1" or "192.168.1.1/24" + ... +} + +X25Address ::= OCTET STRING (SIZE(1..25)) + +National-HI2-ASN1parameters ::= SEQUENCE +{ + countryCode [1] PrintableString (SIZE (2)), + -- Country Code according to ISO 3166-1, + -- the country to which the parameters inserted after the extension marker apply. + ... + -- In case a given country wants to use additional national parameters according to its law, + -- these national parameters should be defined using the ASN.1 syntax and added after the + -- extension marker (...). + -- It is recommended that "version parameter" and "vendor identification parameter" are + -- included in the national parameters definition. Vendor identifications can be + -- retrieved from the IANA web site (see annex K). Besides, it is recommended to avoid + -- using tags from 240 to 255 in a formal type definition. +} + +END -- end of HI2Operations diff --git a/102232-1/LI-PS-PDU.asn b/102232-1/LI-PS-PDU.asn index 910729a3afa38b63037ea151c061377c38234eef..f3b23292df3b57d4fce23a3f0ea8a975667248c8 100644 --- a/102232-1/LI-PS-PDU.asn +++ b/102232-1/LI-PS-PDU.asn @@ -1,5 +1,5 @@ LI-PS-PDU -{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) genHeader(1) version36(36)} +{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) genHeader(1) version37(37)} DEFINITIONS IMPLICIT TAGS ::= @@ -11,10 +11,10 @@ IMPORTS -- from ETSI TS 103 280 [44] LIID FROM Common-Parameters - {itu-t(0) identified-organization(4) etsi(0) common-parameters(3280) version241(241)} + {itu-t(0) identified-organization(4) etsi(0) common-parameters(3280) version251(251)} - -- from ETSI TS 101 671 [4] + -- previously from ETSI TS 101 671 [4]; now provided with this specification IRI-Parameters, IRIsContent, Location, @@ -22,7 +22,7 @@ IMPORTS FROM HI2Operations {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi2(1) version18(18)} - -- from ETSI TS 101 671 [4] + -- previously from ETSI TS 101 671 [4]; now provided with this specification HI1-Operation FROM HI1NotificationOperations {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi1(0) notificationOperations(1) version7(7)} @@ -41,14 +41,14 @@ IMPORTS IPIRI, IPIRIOnly FROM IPAccessPDU - {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) iPAccess(3) version16(16)} + {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) iPAccess(3) version17(17)} -- from ETSI TS 102 232-4 [32] L2CC, L2IRI, L2IRIOnly FROM L2AccessPDU - {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) l2Access(4) version8(8)} + {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) l2Access(4) version9(9)} -- from ETSI TS 102 232-5 [37] IPMMCC, @@ -205,7 +205,7 @@ IMPORTS lawfulInterceptDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2)} -li-psDomainId OBJECT IDENTIFIER ::= {lawfulInterceptDomainId li-ps(5) genHeader(1) version36(36)} +li-psDomainId OBJECT IDENTIFIER ::= {lawfulInterceptDomainId li-ps(5) genHeader(1) version37(37)} -- ==================== -- Top-level definition @@ -249,7 +249,7 @@ Payload ::= CHOICE hI1-Operation [3] HI1NotificationOperations.HI1-Operation, encryptionContainer [4] EncryptionContainer, threeGPP-HI1-Operation [5] ThreeGPP-HI1NotificationOperations.ThreeGPP-HI1-Operation, - -- This structure may be functionally redundant with hI1-Operation from ETSI TS 101 671 [4] + -- This structure may be functionally redundant with hI1-Operation previously from ETSI TS 101 671 [4] iLHIPayload [6] SEQUENCE OF ILHIPDU.ILHIPayload, -- For typical use cases see ETSI TS 103 462 [45] hI4Payload [7] SEQUENCE OF HI4Payload diff --git a/102232-3/IPAccessPDU.asn b/102232-3/IPAccessPDU.asn index 8080b90b6318fd1f0abb2e26d34852d60a46fa28..f418ce58e6cc97eb20f6e4527167b9ed3f105cb6 100644 --- a/102232-3/IPAccessPDU.asn +++ b/102232-3/IPAccessPDU.asn @@ -1,5 +1,5 @@ IPAccessPDU -{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) iPAccess(3) version16(16)} +{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) iPAccess(3) version17(17)} DEFINITIONS IMPLICIT TAGS ::= BEGIN @@ -9,14 +9,14 @@ IMPORTS IPAddress, Location FROM LI-PS-PDU - {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) genHeader(1) version36(36)}; + {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) li-ps(5) genHeader(1) version37(37)}; -- ============================ -- Object Identifier Definition -- ============================ -iPAccessPDUObjId RELATIVE-OID ::= {li-ps(5) iPAccess(3) version16(16)} +iPAccessPDUObjId RELATIVE-OID ::= {li-ps(5) iPAccess(3) version17(17)} iPIRIObjId RELATIVE-OID ::= {iPAccessPDUObjId iRI(1)} iPCCObjId RELATIVE-OID ::= {iPAccessPDUObjId cC(2)} iPIRIOnlyObjId RELATIVE-OID ::= {iPAccessPDUObjId iRIOnly(3)} @@ -38,6 +38,14 @@ IPCC ::= SEQUENCE IPCCContents ::= CHOICE { iPPackets [0] OCTET STRING, + ..., + iPTruncatedPacket [1] IPTruncatedPacket +} + +IPTruncatedPacket ::= SEQUENCE +{ + truncatedPacket [0] OCTET STRING, + originalLength [1] INTEGER OPTIONAL, ... } diff --git a/102232-4/L2AccessPDU.asn b/102232-4/L2AccessPDU.asn index 23b97e092fffdc1a51b0aec2baf0240dd480af3b..eaf7cc85ed13b2c3714685dc2bd6c0e6c073ba04 100644 --- a/102232-4/L2AccessPDU.asn +++ b/102232-4/L2AccessPDU.asn @@ -1,6 +1,6 @@ L2AccessPDU {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) -li-ps(5) l2Access(4) version8(8)} +li-ps(5) l2Access(4) version9(9)} DEFINITIONS IMPLICIT TAGS ::= BEGIN @@ -9,7 +9,7 @@ BEGIN -- Object Identifier Definition -- ============================ -l2AccessPDUObjId RELATIVE-OID ::= {li-ps(5) l2Access(4) version8(8)} +l2AccessPDUObjId RELATIVE-OID ::= {li-ps(5) l2Access(4) version9(9)} l2IRIObjId RELATIVE-OID ::= {l2AccessPDUObjId iRI(1)} l2CCObjId RELATIVE-OID ::= {l2AccessPDUObjId cC(2)} l2IRIOnlyObjId RELATIVE-OID ::= {l2AccessPDUObjId iRIOnly(3)} @@ -27,24 +27,45 @@ L2CC ::= SEQUENCE l2CCObjId [0] RELATIVE-OID, l2CCContents [1] CHOICE { - l2TP [1] OCTET STRING, + l2TP [1] OCTET STRING, -- The L2TP protocol is used - l2F [2] OCTET STRING, + l2F [2] OCTET STRING, -- The L2F protocol is used - pPTP [3] OCTET STRING, + pPTP [3] OCTET STRING, -- The PPTP protocol is used - pPP [4] OCTET STRING, + pPP [4] OCTET STRING, -- The PPP protocol is used - ethernet [5] OCTET STRING, + ethernet [5] OCTET STRING, -- The ethernet protocol is used ..., - l2ATM2684 [6] OCTET STRING, + l2ATM2684 [6] OCTET STRING, -- The protocol RFC 2684, method "LLC Encapsulation for Bridged Protocols" [16] is used - l2FR2427 [7] OCTET STRING + l2FR2427 [7] OCTET STRING, -- The protocol RFC 2427 "Multiprotocol Interconnect over Frame Relay" [18] is used + truncatedL2TP [8] L2TruncatedDatagram, + -- truncated l2TP[1] + truncatedL2F [9] L2TruncatedDatagram, + -- truncated l2F[2] + truncatedPPTP [10] L2TruncatedDatagram, + -- truncated pPTP[3] + truncatedPPP [11] L2TruncatedDatagram, + -- truncated pPP[4] + truncatedEthernet [12] L2TruncatedDatagram, + -- truncated ethernet[5] + truncatedL2ATM2684 [13] L2TruncatedDatagram, + -- truncated l2ATM2684[6] + truncatedL2FR2427 [14] L2TruncatedDatagram + -- truncated l2FR2427[7] } } +L2TruncatedDatagram ::= SEQUENCE +{ + truncatedDatagram [0] OCTET STRING, + originalLength [1] INTEGER, + ... +} + -- =================================================== -- Intercept-related information for general L2-Access -- =================================================== diff --git a/102657/RDMessage.asn b/102657/RDMessage.asn index 227664276ee7f7d577144240694c4d91424e047f..7d312cec22d9ee559f99a04d916344d70c35dab5 100644 --- a/102657/RDMessage.asn +++ b/102657/RDMessage.asn @@ -1,4 +1,4 @@ -RDMessage {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) retainedData(3) rdHeader(0) version28(28)} +RDMessage {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) retainedData(3) rdHeader(0) version29(29)} DEFINITIONS IMPLICIT TAGS ::= @@ -12,7 +12,7 @@ BEGIN retainedDataDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) retainedData(3)} -- rdHeader -rdHeaderId OBJECT IDENTIFIER ::= {retainedDataDomainId rdHeader(0) version28(28)} +rdHeaderId OBJECT IDENTIFIER ::= {retainedDataDomainId rdHeader(0) version29(29)} -- ====================================== -- Top level definitions for RDHI wrapper @@ -3204,7 +3204,12 @@ RAT5Type ::= ENUMERATED trustedN3GA(13), trustedWLAN(14), uTRA(15), - gERA(16) + gERA(16), + nRLEO(17), + nRMEO(18), + nRGEO(19), + nROTHERSAT(20), + nRREDCAP(21) } AMFID ::= SEQUENCE diff --git a/102657/RDMessage.xsd b/102657/RDMessage.xsd index f5bd974a75032027c43dc2ded32a34689afa74ad..f3b0e7791090ee2fb6fa3b0c733e40b2e47c646f 100644 --- a/102657/RDMessage.xsd +++ b/102657/RDMessage.xsd @@ -1,5 +1,5 @@ - + XSD translated from ASN.1 derived from outcome of TS 102 657 v2.1.1 @@ -2449,6 +2449,11 @@ + + + + + diff --git a/103120/examples/json/request1_signed.json b/103120/examples/json/request1_signed.json new file mode 100644 index 0000000000000000000000000000000000000000..4339ce3a7226385566db891b287a5ba631ae24f7 --- /dev/null +++ b/103120/examples/json/request1_signed.json @@ -0,0 +1,100 @@ +{ + "@xmlns": "http://uri.etsi.org/03120/common/2019/10/Core", + "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", + "@xmlns:common": "http://uri.etsi.org/03120/common/2016/02/Common", + "@xmlns:task": "http://uri.etsi.org/03120/common/2020/09/Task", + "@xmlns:auth": "http://uri.etsi.org/03120/common/2020/09/Authorisation", + "Header": { + "SenderIdentifier": { + "CountryCode": "XX", + "UniqueIdentifier": "ACTOR01" + }, + "ReceiverIdentifier": { + "CountryCode": "XX", + "UniqueIdentifier": "ACTOR02" + }, + "TransactionIdentifier": "c02358b2-76cf-4ba4-a8eb-f6436ccaea2e", + "Timestamp": "2015-09-01T12:00:00.000000Z", + "Version": { + "ETSIVersion": "V1.13.1", + "NationalProfileOwner": "XX", + "NationalProfileVersion": "v1.0" + } + }, + "Payload": { + "RequestPayload": { + "ActionRequests": { + "ActionRequest": [ + { + "ActionIdentifier": 0, + "CREATE": { + "HI1Object": { + "@xsi:type": "{http://uri.etsi.org/03120/common/2020/09/Authorisation}AuthorisationObject", + "ObjectIdentifier": "7dbbc880-8750-4d3c-abe7-ea4a17646045", + "CountryCode": "XX", + "OwnerIdentifier": "ACTOR01", + "auth:AuthorisationReference": "W000001", + "auth:AuthorisationTimespan": { + "auth:StartTime": "2015-09-01T12:00:00Z", + "auth:EndTime": "2015-12-01T12:00:00Z" + } + } + } + }, + { + "ActionIdentifier": 1, + "CREATE": { + "HI1Object": { + "@xsi:type": "{http://uri.etsi.org/03120/common/2020/09/Task}LITaskObject", + "ObjectIdentifier": "2b36a78b-b628-416d-bd22-404e68a0cd36", + "CountryCode": "XX", + "OwnerIdentifier": "ACTOR01", + "AssociatedObjects": { + "AssociatedObject": [ + "7dbbc880-8750-4d3c-abe7-ea4a17646045" + ] + }, + "task:Reference": "LIID1", + "task:TargetIdentifier": { + "task:TargetIdentifierValues": { + "task:TargetIdentifierValue": [ + { + "task:FormatType": { + "task:FormatOwner": "ETSI", + "task:FormatName": "InternationalE164" + }, + "task:Value": "442079460223" + } + ] + } + }, + "task:DeliveryType": { + "common:Owner": "ETSI", + "common:Name": "TaskDeliveryType", + "common:Value": "IRIandCC" + }, + "task:DeliveryDetails": { + "task:DeliveryDestination": [ + { + "task:DeliveryAddress": { + "task:IPv4Address": "192.0.2.0" + } + } + ] + }, + "task:CSPID": { + "CountryCode": "XX", + "UniqueIdentifier": "RECVER01" + } + } + } + } + ] + } + } + }, + "Signature": { + "protected": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9", + "signature": "RImkRSJkh46537Bh4LpNbkL2O64jInUv0JLGeoKJ-2M" + } +} diff --git a/103120/examples/json/request5-JSON-Delivery.json b/103120/examples/json/request5-JSON-Delivery.json new file mode 100644 index 0000000000000000000000000000000000000000..34d84a01608f9b52c2ef1906b034da26b2894603 --- /dev/null +++ b/103120/examples/json/request5-JSON-Delivery.json @@ -0,0 +1,68 @@ +{ + "@xmlns": "http://uri.etsi.org/03120/common/2019/10/Core", + "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", + "@xmlns:task": "http://uri.etsi.org/03120/common/2020/09/Task", + "@xmlns:delivery": "http://uri.etsi.org/03120/common/2019/10/Delivery", + "@xmlns:common": "http://uri.etsi.org/03120/common/2016/02/Common", + "Header": { + "SenderIdentifier": { + "CountryCode": "XX", + "UniqueIdentifier": "ACTOR2" + }, + "ReceiverIdentifier": { + "CountryCode": "XX", + "UniqueIdentifier": "ACTOR1" + }, + "TransactionIdentifier": "64cd73e1-a438-4d47-9cfb-cead9125a502", + "Timestamp": "2019-09-30T13:37:37.000000Z", + "Version": { + "ETSIVersion": "V1.14.1", + "NationalProfileOwner": "XX", + "NationalProfileVersion": "v1.0" + } + }, + "Payload": { + "RequestPayload": { + "ActionRequests": { + "ActionRequest": [ + { + "ActionIdentifier": 0, + "DELIVER": { + "Identifier": "11f49f11-39df-4596-aa58-1f7199b587df", + "HI1Object": { + "@xsi:type": "{http://uri.etsi.org/03120/common/2019/10/Delivery}DeliveryObject", + "ObjectIdentifier": "11f49f11-39df-4596-aa58-1f7199b587df", + "AssociatedObjects": { + "AssociatedObject": [ + "2b36a78b-b628-416d-bd22-404e68a0cd36" + ] + }, + "delivery:Reference": { + "delivery:LDID": "XX-ACTOR01-1234" + }, + "delivery:SequenceNumber": 1, + "delivery:LastSequence": true, + "delivery:Manifest": { + "delivery:ExternalSchema": { + "delivery:ManifestID" : "ExampleJSONSchema", + "delivery:ManifestContents" : { + "delivery:JSONSchema" : { + "schema_goes_here" : "schema_goes_here" + } + } + } + }, + "delivery:Delivery": { + "delivery:JSONData": { + "field1" : "this is native JSON embedded data", + "field2" : 1234 + } + } + } + } + } + ] + } + } + } +} diff --git a/103120/schema/json/ts_103120_Core.schema.json b/103120/schema/json/ts_103120_Core.schema.json index 8225cf3e1ca13734e06b6e19ad6f21116b30e757..b7f61078d24233c7a98df13c9189340c00c6b78e 100644 --- a/103120/schema/json/ts_103120_Core.schema.json +++ b/103120/schema/json/ts_103120_Core.schema.json @@ -13,9 +13,19 @@ "Payload": { "$ref": "#/$defs/MessagePayload" }, - "Signature": {}, - "xmldsig:Signature": { - "$ref": "www.w3.org_2000_09_xmldsig##/$defs/SignatureType" + "Signature": { + "properties": { + "protected": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "required": [ + "protected", + "signature" + ] } }, "required": [ @@ -593,4 +603,4 @@ } }, "$ref": "#/$defs/HI1Message" -} \ No newline at end of file +} diff --git a/103120/schema/json/ts_103120_Delivery.schema.json b/103120/schema/json/ts_103120_Delivery.schema.json index 093d1276aa3ad3480d106df81f4f60f764ae294b..f87f7f5844d4507a0ee1cc8b5a75a92120f71a13 100644 --- a/103120/schema/json/ts_103120_Delivery.schema.json +++ b/103120/schema/json/ts_103120_Delivery.schema.json @@ -145,6 +145,17 @@ "required": [ "delivery:XMLSchema" ] + }, + { + "type": "object", + "properties": { + "delivery:JSONSchema": { + "$ref": "#/$defs/EmbeddedJSONData" + } + }, + "required": [ + "delivery:JSONSchema" + ] } ] }, @@ -180,6 +191,17 @@ "required": [ "delivery:XMLData" ] + }, + { + "type": "object", + "properties": { + "delivery:JSONData": { + "$ref": "#/$defs/EmbeddedJSONData" + } + }, + "required": [ + "delivery:JSONData" + ] } ] }, @@ -204,6 +226,7 @@ "delivery:Data" ] }, - "EmbeddedXMLData": {} + "EmbeddedXMLData": {}, + "EmbeddedJSONData": {} } } \ No newline at end of file diff --git a/103120/schema/json/ts_103120_TrafficPolicy.schema.json b/103120/schema/json/ts_103120_TrafficPolicy.schema.json index 1d9619e456ebd108829819edb66a613155ef640a..013e0a7dcb9999947aaee41cb852f115fee7d176 100644 --- a/103120/schema/json/ts_103120_TrafficPolicy.schema.json +++ b/103120/schema/json/ts_103120_TrafficPolicy.schema.json @@ -154,6 +154,28 @@ "required": [ "tp:MobileAccessPolicyCriteria" ] + }, + { + "type": "object", + "properties": { + "tp:EthernetPolicyCriteria": { + "$ref": "#/$defs/EthernetPolicyCriteria" + } + }, + "required": [ + "tp:EthernetPolicyCriteria" + ] + }, + { + "type": "object", + "properties": { + "tp:RCSPolicyCriteria": { + "$ref": "#/$defs/RCSPolicyCriteria" + } + }, + "required": [ + "tp:RCSPolicyCriteria" + ] } ] }, @@ -193,6 +215,63 @@ } }, "required": [] + }, + "EthernetPolicyCriteria": { + "type": "object", + "properties": { + "tp:SourceMACAddress": { + "$ref": "ts_103280_2017_07#/$defs/MACAddress" + }, + "tp:DestinationMACAddress": { + "$ref": "ts_103280_2017_07#/$defs/MACAddress" + }, + "tp:BothDirections": { + "type": "boolean" + }, + "tp:VLANCriteria": { + "$ref": "#/$defs/VLANCriteria" + } + }, + "required": [] + }, + "VLANCriteria": { + "oneOf": [ + { + "type": "object", + "properties": { + "tp:OuterVLANs": { + "$ref": "#/$defs/VLANIDList" + } + }, + "required": [ + "tp:OuterVLANs" + ] + } + ] + }, + "VLANIDList": { + "type": "object", + "properties": { + "tp:VLANID": { + "type": "array", + "items": { + "$ref": "ts_103280_2017_07#/$defs/VLANID" + }, + "minItems": 1 + } + }, + "required": [] + }, + "RCSPolicyCriteria": { + "type": "object", + "properties": { + "tp:CommunicationServiceID": { + "$ref": "ts_103280_2017_07#/$defs/ShortString" + } + }, + "required": [ + "tp:CommunicationServiceID" + ] } } -} \ No newline at end of file +} diff --git a/103120/schema/xsd/ts_103120_Delivery.xsd b/103120/schema/xsd/ts_103120_Delivery.xsd index d1daddd94709a4a83684c5a19c0835de781a5e37..0cb4b4cda3c639d1e0e18a8c403ab7260d0d8371 100644 --- a/103120/schema/xsd/ts_103120_Delivery.xsd +++ b/103120/schema/xsd/ts_103120_Delivery.xsd @@ -39,6 +39,7 @@ + @@ -50,6 +51,7 @@ + @@ -65,4 +67,9 @@ + + + + + diff --git a/103120/schema/xsd/ts_103120_TrafficPolicy.xsd b/103120/schema/xsd/ts_103120_TrafficPolicy.xsd index e201f0293f7b9d307b492474fbb79393ebb8d99c..0ef26315c17c4ea65c8596d17ad3186461ebe123 100644 --- a/103120/schema/xsd/ts_103120_TrafficPolicy.xsd +++ b/103120/schema/xsd/ts_103120_TrafficPolicy.xsd @@ -53,6 +53,8 @@ + + @@ -71,4 +73,27 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/103221-1/TS_103_221_01.xsd b/103221-1/TS_103_221_01.xsd index 4bc8a1480bf20b19d082220c445bd8a73149084d..48288eeb6289593f4ea6e2dc4b86a72b04522b6a 100644 --- a/103221-1/TS_103_221_01.xsd +++ b/103221-1/TS_103_221_01.xsd @@ -1,5 +1,5 @@ - + @@ -354,6 +354,16 @@ + + + + + + + + + + @@ -776,6 +786,7 @@ + @@ -833,6 +844,7 @@ + diff --git a/103280/TS_103_280.asn1 b/103280/TS_103_280.asn1 index 0bf52025fd2344350103148938882a37dafc8144..d384ec866a9ad37d73552de8dd77f3fbeb2e2ec0 100644 --- a/103280/TS_103_280.asn1 +++ b/103280/TS_103_280.asn1 @@ -1,11 +1,11 @@ Common-Parameters -{itu-t(0) identified-organization(4) etsi(0) common-parameters(3280) version241(241)} +{itu-t(0) identified-organization(4) etsi(0) common-parameters(3280) version251(251)} DEFINITIONS IMPLICIT TAGS EXTENSIBILITY IMPLIED ::= BEGIN -- Object Identifier definitions -commonParameterDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) common-parameters(3280) version241(241)} +commonParameterDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) common-parameters(3280) version251(251)} -- Common Parameters (below are as defined in clause 6) @@ -93,4 +93,6 @@ NAI ::= UTF8String IPProtocol ::= INTEGER (0..255) +VLANID ::= INTEGER (0..4095) + END diff --git a/103280/TS_103_280.schema.json b/103280/TS_103_280.schema.json index 17d01361efba2c1dfc01b151815786bff0f84452..1d1e0c0b4722abe16fac4714551cb4df9be95faf 100644 --- a/103280/TS_103_280.schema.json +++ b/103280/TS_103_280.schema.json @@ -191,6 +191,11 @@ "minimum": 0, "maximum": 255 }, + "VLANID": { + "type": "integer", + "minimum": 0, + "maximum": 4095 + }, "IPAddress": { "oneOf": [ { diff --git a/103280/TS_103_280.xsd b/103280/TS_103_280.xsd index 66a4d64347ab55579c5e40df97daa9702faf763e..1eb122884223c99806cb466f1d30c1d01e151110 100644 --- a/103280/TS_103_280.xsd +++ b/103280/TS_103_280.xsd @@ -1,5 +1,5 @@ - + @@ -272,4 +272,10 @@ + + + + + + diff --git a/103707/TS_103_707.xsd b/103707/TS_103_707.xsd index 591007e23ae5c9531241954b6cff9547c6b64aff..9d4b86a0e3013d1379b0f20e77744032261e9d72 100644 --- a/103707/TS_103_707.xsd +++ b/103707/TS_103_707.xsd @@ -1,6 +1,7 @@ - + + @@ -66,12 +67,21 @@ - + + + + + + + + + + @@ -101,6 +111,7 @@ + diff --git a/103707/examples/example_new_identifier.xml b/103707/examples/example_new_identifier.xml new file mode 100644 index 0000000000000000000000000000000000000000..7477baa1379bce0f6e3ea0f83f8424ae5e934de1 --- /dev/null +++ b/103707/examples/example_new_identifier.xml @@ -0,0 +1,49 @@ + + +
+ + + + + + + ETSI + EmailAddress + + qualified@example.com + + old_style_unqualified@example.com + + true + + + + + + + ETSI + EmailAddress + + qualified@example.com + + + + + 2019-10-17T06:42:23.000000+01:00 + + + + + http://FooServiceSchema.example.com/schema/v1.1.1/ + + + + Foo + Bar + Baz + + + + + + diff --git a/testing/xsd_compile_targets.json b/testing/xsd_compile_targets.json index 3b28b4305a3ebf3b0d5e398fecf7a4f98458ae38..bb4f13ec91434c2818693a6a8271f4ae62ec0e36 100644 --- a/testing/xsd_compile_targets.json +++ b/testing/xsd_compile_targets.json @@ -51,5 +51,19 @@ "exampleFiles" : [ "103120/examples/xml" ] - } + }, + { + "coreSchema" : "103707/TS_103_707.xsd", + "supportingSchemas" : [ + "103280/TS_103_280.xsd", + "103120/schema/xsd/ts_103120_Common.xsd", + "103120/schema/xsd/ts_103120_Core.xsd", + "103120/schema/xsd/ts_103120_Task.xsd", + "testing/deps/xmldsig/xmldsig-core-schema.xsd", + "103707/examples/FooServiceSchema.xsd" + ], + "exampleFiles" : [ + "103707/examples" + ] + } ] diff --git a/utils/json_validator.py b/utils/json_validator.py new file mode 100644 index 0000000000000000000000000000000000000000..fb4619384b416e0156f517c14a0b0c4f0a6817cb --- /dev/null +++ b/utils/json_validator.py @@ -0,0 +1,156 @@ +import sys +from jsonschema import validate, RefResolver, Draft202012Validator +from jsonschema.exceptions import ValidationError +import json +from pathlib import Path +import logging +import argparse +from itertools import chain + +class JsonValidator: + def __init__(self, core_schema: str, other_schemas : dict): + self._core_schema = json.load(Path(core_schema).open()) + self._schema_dict = { self._core_schema['$id'] : self._core_schema } + self._supporting_paths = [] + for thing in other_schemas: + path = Path(thing) + if path.is_dir(): + logging.debug(f"Searching {path} for schema files") + self._supporting_paths.extend(path.rglob("*.schema.json")) + else: + logging.debug(f"Appending {path} as schema file") + self._supporting_paths.append(path) + logging.info(f"Supporting schema paths: {self._supporting_paths}") + self._supporting_schemas = [json.load(p.open()) for p in self._supporting_paths] + self._schema_dict = self._schema_dict | { s['$id'] : s for s in self._supporting_schemas } + logging.info(f"Loaded schema IDs: {[k for k in self._schema_dict.keys()]}") + self._resolver = RefResolver(None, + referrer=None, + store=self._schema_dict) + logging.info("Created RefResolver") + self._validator = Draft202012Validator(self._core_schema, resolver=self._resolver) + logging.info("Created validator") + + def validate(self, instance_doc: str): + errors = list(self._validator.iter_errors(instance_doc)) + return errors + +class TS103120Validator (JsonValidator): + def __init__ (self, path_to_repo): + repo_path = Path(path_to_repo) + schema_dirs = [str(repo_path / "103120/schema/json"), str("103280/")] + core_schema = str(repo_path / "103120/schema/json/ts_103120_Core.schema.json") + JsonValidator.__init__(self, core_schema, schema_dirs) + request_fragment_schema = { "$ref" : "ts_103120_Core_2019_10#/$defs/RequestPayload" } + self._request_fragment_validator = Draft202012Validator(request_fragment_schema, resolver=self._resolver) + response_fragment_schema = { "$ref" : "ts_103120_Core_2019_10#/$defs/ResponsePayload" } + self._response_fragment_validator = Draft202012Validator(response_fragment_schema, resolver=self._resolver) + + def expand_request_response_exception (self, ex): + if list(ex.schema_path) == ['properties', 'Payload', 'oneOf']: + logging.info ("Error detected validating payload oneOf - attempting explicit validation...") + if 'RequestPayload' in instance_doc['Payload'].keys(): + ret_list = list(chain(*[self.expand_action_exception(x) for x in self._request_fragment_validator.iter_errors(instance_doc['Payload']['RequestPayload'])])) + for r in ret_list: + r.path = ex.path + r.path + return ret_list + elif 'ResponsePayload' in instance_doc['Payload'].keys(): + ret_list = list(chain(*[self.expand_action_exception(x) for x in self._request_fragment_validator.iter_errors(instance_doc['Payload']['ResponsePayload'])])) + for r in ret_list: + r.path = ex.path + r.path + return ret_list + else: + logging.error("No RequestPayload or ResponsePayload found - is the Payload malformed?") + return [ex] + else: + return [ex] + + def expand_action_exception (self, ex): + logging.error("Error detected in ActionRequests/ActionResponses") + error_path = list(ex.schema_path) + if error_path != ['properties', 'ActionRequests', 'properties', 'ActionRequest', 'items', 'allOf', 1, 'oneOf'] and error_path != ['properties', 'ActionResponses', 'properties', 'ActionResponse', 'items', 'allOf', 1, 'oneOf']: + logging.error("Error not in inner Request/Response allOf/oneOf constraint") + return[ex] + j = ex.instance + j.pop('ActionIdentifier') # Remove ActionIdentifier - one remaining key will be the verb + verb = list(j.keys())[0] + message = "Request" if error_path[1] == "ActionRequests" else "Response" + v = Draft202012Validator({"$ref" : f"ts_103120_Core_2019_10#/$defs/{verb}{message}"}, resolver=self._resolver) + ret_list = list(chain(*[self.expand_object_exception(x) for x in v.iter_errors(j[verb])])) + for r in ret_list: + r.path = ex.path + r.path + return ret_list + + def expand_object_exception (self, ex): + logging.error("Error detected in verb") + # The final level of validation is for the actual HI1Object validation + if list(ex.schema_path) != ['properties', 'HI1Object', 'oneOf']: + logging.error("Error not inside HI1Object") + return [ex] + object_type = ex.instance['@xsi:type'].split('}')[-1] + object_ref = { + 'AuthorisationObject': 'ts_103120_Authorisation_2020_09#/$defs/AuthorisationObject', + 'LITaskObject': 'ts_103120_Task_2020_09#/$defs/LITaskObject', + 'LDTaskObject': 'ts_103120_Task_2020_09#/$defs/LDTaskObject', + 'LPTaskObject': 'ts_103120_Task_2020_09#/$defs/LPTaskObject', + 'DocumentObject': 'ts_103120_Document_2020_09#/$defs/DocumentObject', + 'NotificationObject': 'ts_103120_Notification_2016_02#/$defs/NotificationObject', + 'DeliveryObject': 'ts_103120_Delivery_2019_10#/$defs/DeliveryObject', + 'TrafficPolicyObject': 'ts_103120_TrafficPolicy_2022_07#/$defs/TrafficPolicyObject', + 'TrafficRuleObject': 'ts_103120_TrafficPolicy_2022_07#/$defs/TrafficRuleObject', + }[object_type] + v = Draft202012Validator({"$ref" : object_ref}, resolver=self._resolver) + return list(v.iter_errors(ex.instance)) + + def validate(self, instance_doc: str): + errors = JsonValidator.validate(self, instance_doc) + out_errors = list(chain(*[self.expand_request_response_exception(ex) for ex in errors])) + return out_errors + + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + parser.add_argument('-s','--schemadir', action="append", help="Directory containing supporting schema files to use for validation") + parser.add_argument('-v', '--verbose', action="count", help="Verbose logging (can be specified multiple times)") + parser.add_argument('-i', '--input', type=argparse.FileType('r'), default=sys.stdin, help="Path to input file (if absent, stdin is used)") + parser.add_argument('--ts103120', action="store_true", help="Validate a TS 103 120 JSON document") + parser.add_argument('--schema', default=None, help="Primary schema to validate against") + parser.add_argument('-p', '--printerror', action="count", help="Controls how verbose validation error printing is (can be specified multiple times)") + args = parser.parse_args() + + match args.verbose: + case v if v and v >= 2: + logging.basicConfig(level=logging.DEBUG) + case 1: + logging.basicConfig(level=logging.INFO) + case _: + logging.basicConfig(level=logging.WARNING) + + logging.debug(f"Arguments: {args}") + + if (args.ts103120): + v = TS103120Validator("./") + else: + v = JsonValidator(args.schema, args.schemadir) + + logging.info(f"Taking instance doc input from {args.input.name}") + instance_doc = json.loads(args.input.read()) + args.input.close() + + errors = v.validate(instance_doc) + for error in errors: + if args.printerror == 2: + logging.error(error) + elif args.printerror == 1: + logging.error(f"{list(error.path)} - {error.message}") + if len(errors) > 0: + logging.error(f"{len(errors)} errors detected") + else: + logging.info(f"{len(errors)} errors detected") + + if len(errors) > 0: + exit(-1) + else: + exit(0) diff --git a/utils/sign_json.py b/utils/sign_json.py new file mode 100644 index 0000000000000000000000000000000000000000..1ce0bba5b21d00ff86bcab7d680425451d0e24f8 --- /dev/null +++ b/utils/sign_json.py @@ -0,0 +1,57 @@ + +import argparse +import logging +import sys +from jose import jws +from pathlib import Path + +import json + + +def insert_sig_block (j): + j['Signature'] = { + 'protected' : '', + 'signature' : '' + } + return j + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('-v', '--verbose', action='count', help='Verbose logging (can be specified multiple times)') + parser.add_argument('--pretty', action="store_true", help='Pretty-print the JSON document before signing') + parser.add_argument('-i', '--input', type=argparse.FileType('r'), default=sys.stdin, help="Path to input file (if absent, stdin is used)") + args = parser.parse_args() + + match args.verbose: + case v if v and v >= 2: + logging.basicConfig(level=logging.DEBUG) + case 1: + logging.basicConfig(level=logging.INFO) + case _: + logging.basicConfig(level=logging.WARNING) + + logging.debug(f"Arguments: {args}") + + json_text = args.input.read() + args.input.close() + + j = json.loads(json_text) + j = insert_sig_block(j) + + indent = None + if args.pretty: + indent = ' ' + presigned_json_text = json.dumps(j, indent=indent) + Path('presigned.json').write_text(presigned_json_text) + presigned_json_bytes = presigned_json_text.encode('utf-8') + + signed = jws.sign(presigned_json_bytes, 'secret_key', algorithm="HS256") + components = signed.split('.') + + j['Signature']['protected'] = components[0] + j['Signature']['signature'] = components[2] + + signed_json_text = json.dumps(j, indent=indent) + print(signed_json_text) + + diff --git a/utils/translate_spec.py b/utils/translate_spec.py index eac24e496f3c5e2cf3c6640161db6563b3607044..ce7a05572deaabffdd85573c38b154fe31991b5c 100644 --- a/utils/translate_spec.py +++ b/utils/translate_spec.py @@ -10,6 +10,14 @@ from translate import * logging.basicConfig(level = logging.INFO) +json_signature_struct = { + "properties" : { + "protected" : { "type" : "string" }, + "signature" : { "type" : "string" } + }, + "required" : ["protected", "signature" ] +} + def build_schema_locations (paths): schema_locations = [] for schemaFile in paths: @@ -70,15 +78,17 @@ if __name__ == "__main__": json_schemas = {} for schema_tuple in schema_locations: logging.info(f" Translating {schema_tuple}") - if 'xmldsig' in (schema_tuple[1]): - # TODO - work out what to do here - logging.info(" Skipping XML Dsig...") + if 'skip' in ns_map[schema_tuple[0]]: + logging.info(f" Skipping {schema_tuple[0]}...") continue js = translate_schema(schema_tuple[1], ns_map, schema_locations) - # TODO - Special case, get rid of signature - if ns_map[schema_tuple[0]] == 'core.json': - js['$defs']['HI1Message']['properties'].pop('Signature') + # TODO - Special case, get rid of XML Dsig signature and insert JSON signature + if schema_tuple[0] == 'http://uri.etsi.org/03120/common/2019/10/Core': + logging.info ("Modifying signature elements") + js['$defs']['HI1Message']['properties'].pop('xmldsig:Signature') + js['$defs']['HI1Message']['properties']['Signature'] = json_signature_struct + js_path = output_path / convert_xsd_to_filename(schema_tuple[1]) # TODO - Special case - abstract HI1Object diff --git a/utils/ts103280_config.json b/utils/ts103280_config.json new file mode 100644 index 0000000000000000000000000000000000000000..d36a86ebc4c83efe4ce623e60f06d76c4beb7953 --- /dev/null +++ b/utils/ts103280_config.json @@ -0,0 +1,8 @@ +{ + "schemas" : { + "./103280/TS_103_280.xsd" : { + "prefix" : "etsi280" + } + }, + "output" : "./103280/" +} diff --git a/utils/validate_json.py b/utils/validate_json.py deleted file mode 100644 index 43f460b4eb6c5ad7191cf02ebf88417d19535c24..0000000000000000000000000000000000000000 --- a/utils/validate_json.py +++ /dev/null @@ -1,122 +0,0 @@ -import sys -from jsonschema import validate, RefResolver, Draft202012Validator -from jsonschema.exceptions import ValidationError -import json -from pathlib import Path -import logging -import argparse - - -def handle_uri(u): - print(u) - -def load_json(path : str): - with open(path) as f: - return json.load(f) - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - - parser.add_argument('-s','--schemadir', action="append", help="Directory containing supporting schema files to use for validation") - parser.add_argument('-v', '--verbose', action="count", help="Verbose logging (can be specified multiple times)") - parser.add_argument('-i', '--input', type=argparse.FileType('r'), default=sys.stdin, help="Path to input file (if absent, stdin is used)") - parser.add_argument('schema', help="Primary schema to validate against") - - args = parser.parse_args() - - match args.verbose: - case v if v and v >= 2: - logging.basicConfig(level=logging.DEBUG) - case 1: - logging.basicConfig(level=logging.INFO) - case _: - logging.basicConfig(level=logging.WARNING) - - logging.debug(f"Arguments: {args}") - - instance_doc = json.loads(args.input.read()) - args.input.close() - main_schema = load_json(args.schema) - schema_dict = { main_schema['$id'] : main_schema } - - if args.schemadir: - schema_paths = [] - for d in args.schemadir: - logging.info(f"Searching {d}") - logging.info(list(Path(d).rglob("*.schema.json"))) - schema_paths += [f for f in Path(d).rglob("*.schema.json")] - logging.info(f"Schema files loaded: {schema_paths}") - - schemas_json = [json.load(p.open()) for p in schema_paths] - schema_dict = schema_dict | { s['$id'] : s for s in schemas_json } - - logging.info(f"Schema IDs loaded: {[k for k in schema_dict.keys()]}") - - logging.debug (f"Instance doc: {instance_doc}") - logging.debug (f"Main schema: {main_schema}") - - resolver = RefResolver(None, - referrer=None, - store=schema_dict) - - v = Draft202012Validator(main_schema, resolver=resolver) - try: - v.validate(instance_doc) - except ValidationError as ex: - # Any failure within the Payload element results in a failure against the oneOf constraint in the Payload element - # This isn't terribly helpful in working out what is actually wrong, so in this case we attempt an explicit - # validation against the relevant oneOf alternation to try and get a more useful validation error - if list(ex.schema_path) == ['properties', 'Payload', 'oneOf']: - logging.error ("Error detected validating payload oneOf - attempting explicit validation...") - try: - if 'RequestPayload' in instance_doc['Payload'].keys(): - request_fragment_schema = { "$ref" : "ts_103120_Core_2019_10#/$defs/RequestPayload" } - v = Draft202012Validator(request_fragment_schema, resolver=resolver) - v.validate(instance_doc['Payload']['RequestPayload']) - elif 'ResponsePayload' in instance_doc['Payload'].keys(): - request_fragment_schema = { "$ref" : "ts_103120_Core_2019_10#/$defs/ResponsePayload" } - v = Draft202012Validator(request_fragment_schema, resolver=resolver) - v.validate(instance_doc['Payload']['ResponsePayload']) - else: - logging.error("No RequestPayload or ResponsePayload found - is the Payload malformed?") - raise ex - except ValidationError as ex2: - # Similar to above, this is inner validation to try and get a more useful error in the event - # that something fails the verb oneOf constraint - logging.error("Error detected in ActionRequests/ActionResponses") - error_path = list(ex2.schema_path) - if error_path != ['properties', 'ActionRequests', 'properties', 'ActionRequest', 'items', 'allOf', 1, 'oneOf'] and error_path != ['properties', 'ActionResponses', 'properties', 'ActionResponse', 'items', 'allOf', 1, 'oneOf']: - logging.error("Error not in inner Request/Response allOf/oneOf constraint") - raise ex2 - j = ex2.instance - j.pop('ActionIdentifier') # Remove ActionIdentifier - one remaining key will be the verb - verb = list(j.keys())[0] - message = "Request" if error_path[1] == "ActionRequests" else "Response" - v = Draft202012Validator({"$ref" : f"ts_103120_Core_2019_10#/$defs/{verb}{message}"}, resolver=resolver) - try: - v.validate(j[verb]) - except ValidationError as ex3: - logging.error("Error detected in verb") - # The final level of validation is for the actual HI1Object validation - if list(ex3.schema_path) != ['properties', 'HI1Object', 'oneOf']: - logging.error("Error not inside HI1Object") - raise ex3 - object_type = ex3.instance['@xsi:type'].split('}')[-1] - object_ref = { - 'AuthorisationObject': 'ts_103120_Authorisation_2020_09#/$defs/AuthorisationObject', - 'LITaskObject': 'ts_103120_Task_2020_09#/$defs/LITaskObject', - 'LDTaskObject': 'ts_103120_Task_2020_09#/$defs/LDTaskObject', - 'LPTaskObject': 'ts_103120_Task_2020_09#/$defs/LPTaskObject', - 'DocumentObject': 'ts_103120_Document_2020_09#/$defs/DocumentObject', - 'NotificationObject': 'ts_103120_Notification_2016_02#/$defs/NotificationObject', - 'DeliveryObject': 'ts_103120_Delivery_2019_10#/$defs/DeliveryObject', - 'TrafficPolicyObject': 'ts_103120_TrafficPolicy_2022_07#/$defs/TrafficPolicyObject', - 'TrafficRuleObject': 'ts_103120_TrafficPolicy_2022_07#/$defs/TrafficRuleObject', - }[object_type] - v = Draft202012Validator({"$ref" : object_ref}, resolver=resolver) - v.validate(ex3.instance) - - exit(-1) - - - logging.info("Done") diff --git a/utils/verify_json.py b/utils/verify_json.py new file mode 100644 index 0000000000000000000000000000000000000000..329c0692499ee7fd5bc4c36b81e1cebabc3d9d68 --- /dev/null +++ b/utils/verify_json.py @@ -0,0 +1,54 @@ + +import argparse +import sys +import logging +import base64 +from jose import jws +from pathlib import Path + +import json + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('-v', '--verbose', action='count', help='Verbose logging (can be specified multiple times)') + parser.add_argument('-i', '--input', type=argparse.FileType('r'), default=sys.stdin, help="Path to input file (if absent, stdin is used)") + args = parser.parse_args() + + match args.verbose: + case v if v and v >= 2: + logging.basicConfig(level=logging.DEBUG) + case 1: + logging.basicConfig(level=logging.INFO) + case _: + logging.basicConfig(level=logging.WARNING) + + logging.debug(f"Arguments: {args}") + + signed_json_text = args.input.read() + args.input.close() + + j = json.loads(signed_json_text) + + protected_header = j['Signature']['protected'] + signature = j['Signature']['signature'] + + # TODO some safety checks needed here + + # Remove the newline that appears from the console + if signed_json_text.endswith('\n'): signed_json_text = signed_json_text[:-1] + signed_json_text = signed_json_text.replace(protected_header, "").replace(signature, "") + + payload_bytes = signed_json_text.encode('utf-8') + payload_token = base64.b64encode(payload_bytes).decode('ascii') + + # Un-pad the token, as per RFC7515 annex C + payload_token = payload_token.split('=')[0] + payload_token = payload_token.replace('+','-') + payload_token = payload_token.replace('/','_') + + token = protected_header + "." + payload_token + "." + signature + result = jws.verify(token, key="secret_key", algorithms=['HS256']) + + print("Signature verified") +