aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/x420
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2005-09-04 16:22:12 +0000
committerAnders Broman <anders.broman@ericsson.com>2005-09-04 16:22:12 +0000
commitd9e1a9c0bbf93cd8573f970ef151c65d41f34629 (patch)
treebd96a6585605579987c8081a983df86d196a88d4 /asn1/x420
parentbc4b6481b473f64f20cb5d1c013b79eced4ddef5 (diff)
downloadwireshark-d9e1a9c0bbf93cd8573f970ef151c65d41f34629.tar.gz
wireshark-d9e1a9c0bbf93cd8573f970ef151c65d41f34629.tar.bz2
wireshark-d9e1a9c0bbf93cd8573f970ef151c65d41f34629.zip
From Graeme Lunt
I attach my RTSE dissector (in tar file) which requires the included ROS dissector, as well as a patch to the latest pres.{cnf,asn}. The ROS dissector uses a new field in the SESSION_DATA_STRUCTURE to pass the ROS operation to the sub-dissector, though this is also set by other dissectors (RTSE uses it in X.410 mode). Note that X.400 P1 in X.410 mode doesn't use ROS, so it is useful not to explicitly include ROS in my X411 dissector. However, the inclusion of a ROS dissector won't effect any dissectors that currently implement their own ROS. I also include dissectors for: X.411 (P1) X.400 OSI Message Transfer Service X.420 (P22) X.400 OSI Information Object STANAG 4406 (P772) STANAG 4406 Military Message Extensions (to P22) These rely on the RTSE and ROS dissectors. svn path=/trunk/; revision=15679
Diffstat (limited to 'asn1/x420')
-rw-r--r--asn1/x420/Makefile17
-rw-r--r--asn1/x420/Makefile.nmake42
-rw-r--r--asn1/x420/packet-x420-template.c123
-rw-r--r--asn1/x420/packet-x420-template.h31
-rw-r--r--asn1/x420/x420-exp.cnf8
-rw-r--r--asn1/x420/x420.asn640
-rw-r--r--asn1/x420/x420.cnf52
7 files changed, 913 insertions, 0 deletions
diff --git a/asn1/x420/Makefile b/asn1/x420/Makefile
new file mode 100644
index 0000000000..1dfe7a3c8b
--- /dev/null
+++ b/asn1/x420/Makefile
@@ -0,0 +1,17 @@
+# $Id$
+
+DISSECTOR_FILES=packet-x420.c packet-x420.h
+
+all: generate_dissector
+
+generate_dissector: $(DISSECTOR_FILES)
+
+$(DISSECTOR_FILES): ../../tools/asn2eth.py x420.asn packet-x420-template.c packet-x420-template.h x420.cnf
+ python ../../tools/asn2eth.py -X -b -e -p x420 -c x420.cnf -s packet-x420-template x420.asn
+
+clean:
+ rm -f parsetab.py $(DISSECTOR_FILES)
+
+copy_files: generate_dissector
+ cp $(DISSECTOR_FILES) ../../epan/dissectors
+
diff --git a/asn1/x420/Makefile.nmake b/asn1/x420/Makefile.nmake
new file mode 100644
index 0000000000..787c3c3ac3
--- /dev/null
+++ b/asn1/x420/Makefile.nmake
@@ -0,0 +1,42 @@
+## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
+#
+# $Id$
+
+include ../../config.nmake
+
+UNIX2DOS=$(PERL) ../../tools/unix2dos.pl
+
+PROTOCOL_NAME=x420
+DISSECTOR_FILES=packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).h
+
+all: generate_dissector
+
+generate_dissector: $(DISSECTOR_FILES)
+
+$(DISSECTOR_FILES): ../../tools/asn2eth.py $(PROTOCOL_NAME).asn packet-$(PROTOCOL_NAME)-template.c packet-$(PROTOCOL_NAME)-template.h $(PROTOCOL_NAME).cnf
+!IFDEF PYTHON
+ $(PYTHON) ../../tools/asn2eth.py -X -b -e -p $(PROTOCOL_NAME) -c $(PROTOCOL_NAME).cnf -s packet-$(PROTOCOL_NAME)-template $(PROTOCOL_NAME).asn
+!ELSE
+ @echo Error: You need Python to use asn2eth.py
+ @exit 1
+!ENDIF
+
+clean:
+ rm -f parsetab.py $(DISSECTOR_FILES)
+
+# Fix EOL in generated dissectors. Cygwin's python generates files with
+# mixed EOL styles, which can't be commited to the SVN repository.
+# Stuff included from template and "cnf" files has "\r\n" on windows, while
+# the generated stuff has "\n".
+
+fix_eol: generate_dissector
+ move packet-$(PROTOCOL_NAME).c packet-$(PROTOCOL_NAME).c.tmp
+ move packet-$(PROTOCOL_NAME).h packet-$(PROTOCOL_NAME).h.tmp
+ $(UNIX2DOS) < packet-$(PROTOCOL_NAME).c.tmp > packet-$(PROTOCOL_NAME).c
+ $(UNIX2DOS) < packet-$(PROTOCOL_NAME).h.tmp > packet-$(PROTOCOL_NAME).h
+ del /f packet-$(PROTOCOL_NAME).c.tmp packet-$(PROTOCOL_NAME).h.tmp
+
+copy_files: generate_dissector fix_eol
+ xcopy packet-$(PROTOCOL_NAME).c ..\..\epan\dissectors /d /y
+ xcopy packet-$(PROTOCOL_NAME).h ..\..\epan\dissectors /d /y
+
diff --git a/asn1/x420/packet-x420-template.c b/asn1/x420/packet-x420-template.c
new file mode 100644
index 0000000000..d7a55fd108
--- /dev/null
+++ b/asn1/x420/packet-x420-template.c
@@ -0,0 +1,123 @@
+/* packet-x420.c
+ * Routines for X.420 (X.400 Message Transfer) packet dissection
+ * Graeme Lunt 2005
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "packet-ber.h"
+#include "packet-acse.h"
+#include "packet-ros.h"
+
+#include "packet-x509af.h"
+#include "packet-x411.h"
+
+#include "packet-x420.h"
+
+#define PNAME "X.420 OSI Information Object"
+#define PSNAME "X420"
+#define PFNAME "x420"
+
+/* Initialize the protocol and registered fields */
+int proto_x420 = -1;
+
+static char object_identifier_id[BER_MAX_OID_STR_LEN]; /* content type identifier */
+
+#include "packet-x420-hf.c"
+
+/* Initialize the subtree pointers */
+static gint ett_x420 = -1;
+#include "packet-x420-ett.c"
+
+#include "packet-x420-fn.c"
+
+/*
+* Dissect X420 PDUs inside a PPDU.
+*/
+static void
+dissect_x420(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
+{
+ int offset = 0;
+ int old_offset;
+ proto_item *item=NULL;
+ proto_tree *tree=NULL;
+ int (*x420_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) = NULL;
+ char *x420_op_name;
+
+ if(parent_tree){
+ item = proto_tree_add_item(parent_tree, proto_x420, tvb, 0, -1, FALSE);
+ tree = proto_item_add_subtree(item, ett_x420);
+ }
+ if (check_col(pinfo->cinfo, COL_PROTOCOL))
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "X420");
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_str(pinfo->cinfo, COL_INFO, "Interpersonal Message");
+
+ dissect_x420_InformationObject(TRUE, tvb, offset, pinfo , tree, -1);
+}
+
+
+/*--- proto_register_x420 -------------------------------------------*/
+void proto_register_x420(void) {
+
+ /* List of fields */
+ static hf_register_info hf[] =
+ {
+#include "packet-x420-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+ &ett_x420,
+#include "packet-x420-ettarr.c"
+ };
+
+ /* Register protocol */
+ proto_x420 = proto_register_protocol(PNAME, PSNAME, PFNAME);
+ register_dissector("x420", dissect_x420, proto_x420);
+ /* Register fields and subtrees */
+ proto_register_field_array(proto_x420, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+}
+
+
+/*--- proto_reg_handoff_x420 --- */
+void proto_reg_handoff_x420(void) {
+
+#include "packet-x420-dis-tab.c"
+
+ register_ber_oid_dissector("2.6.1.10.0", dissect_x420, proto_x420, "InterPersonal Message (1984)");
+ register_ber_oid_dissector("2.6.1.10.1", dissect_x420, proto_x420, "InterPersonal Message (1988)");
+ register_ber_oid_dissector("1.3.26.0.4406.0.4.1", dissect_x420, proto_x420, "Military Message");
+
+}
diff --git a/asn1/x420/packet-x420-template.h b/asn1/x420/packet-x420-template.h
new file mode 100644
index 0000000000..68c9880aec
--- /dev/null
+++ b/asn1/x420/packet-x420-template.h
@@ -0,0 +1,31 @@
+/* packet-x420.h
+ * Routines for X.420 (X.400 Message Transfer) packet dissection
+ * Graeme Lunt 2005
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PACKET_X420_H
+#define PACKET_X420_H
+
+/*#include "packet-x420-exp.h"*/
+
+#endif /* PACKET_X420_H */
diff --git a/asn1/x420/x420-exp.cnf b/asn1/x420/x420-exp.cnf
new file mode 100644
index 0000000000..d515220732
--- /dev/null
+++ b/asn1/x420/x420-exp.cnf
@@ -0,0 +1,8 @@
+#.IMPORT_TAG
+ORDescriptor BER_CLASS_UNI BER_UNI_TAG_SET
+#.END
+
+#.TYPE_ATTR
+ORDescriptor TYPE = FT_NONE DISPLAY = BASE_NONE STRINGS = NULL BITMASK = 0
+#.END
+
diff --git a/asn1/x420/x420.asn b/asn1/x420/x420.asn
new file mode 100644
index 0000000000..2e24e21b4e
--- /dev/null
+++ b/asn1/x420/x420.asn
@@ -0,0 +1,640 @@
+-- Module IPMSInformationObjects (X.420:06/1999)
+IPMSInformationObjects {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+ information-objects(2) version-1999(1)} DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+-- Prologue
+-- Exports everything.
+IMPORTS
+ -- IPMS Extended Body Parts
+-- bilaterally-defined-body-part, encrypted-body-part, g3-facsimile-body-part,
+-- g4-class1-body-part, ia5-text-body-part, message-body-part,
+-- mixed-mode-body-part, nationally-defined-body-part, teletex-body-part,
+-- videotex-body-part
+ --==
+-- FROM IPMSExtendedBodyPartTypes {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+-- extended-body-part-types(7) version-1994(0)}
+-- general-text-body-part
+ --==
+-- FROM IPMSExtendedBodyPartTypes2 {iso standard mhs(10021) ipms(7)
+-- modules(0) extended-body-part-types-2(1)}
+-- file-transfer-body-part
+ --==
+-- FROM IPMSFileTransferBodyPartType {joint-iso-itu-t mhs(6) ipms(1)
+-- modules(0) file-transfer-body-part-type(9)}
+-- voice-body-part
+ --==
+-- FROM IPMSExtendedVoiceBodyPartType {joint-iso-itu-t mhs(6) ipms(1)
+-- modules(0) extended-voice-body-part-type(11)}
+-- notification-body-part, report-body-part
+ --==
+-- FROM IPMSForwardedReportBodyPartType {joint-iso-itu-t mhs(6) ipms(1)
+-- modules(0) forwarded-report-body-part-type(12)}
+-- content-body-part{}
+ --==
+-- FROM IPMSForwardedContentBodyPartType {joint-iso-itu-t mhs(6) ipms(1)
+-- modules(0) forwarded-content-body-part-type(15)}
+-- pkcs7-body-part
+ --==
+-- FROM PKCS7BodyPartType {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+-- pkcs7-body-part-type(16)}
+ -- IPMS Heading Extensions
+-- authorization-time, auto-submitted, body-part-signatures,
+-- circulation-list-indicator, circulation-list-recipients,
+-- distribution-codes, extended-subject, incomplete-copy,
+-- information-category, ipm-security-label, languages,
+-- manual-handling-instructions, originators-reference, precedence,
+-- precedence-policy-identifier
+ --==
+-- FROM IPMSHeadingExtensions {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+-- heading-extensions(6) version-1999(1)}
+ -- IPMS Security Extensions
+-- body-part-encryption-token, BodyPartTokens, forwarded-content-token,
+-- ForwardedContentToken, ipn-security-response, recipient-security-request
+ --==
+-- FROM IPMSSecurityExtensions {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+-- ipm-security-extensions(14) version-1999(1)}
+ -- IPMS Upper bounds
+-- ub-auto-forward-comment, ub-free-form-name, ub-local-ipm-identifier,
+-- ub-subject-field, ub-telephone-number
+ --==
+-- FROM IPMSUpperBounds {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+-- upper-bounds(10) version-1999(1)}
+ -- ODIF
+-- Interchange-Data-Element
+ --==
+-- FROM Interchange-Data-Elements {2 8 1 5 5}
+ -- MTS Abstract Service
+ EncodedInformationTypes, ExtendedCertificates, EXTENSION,
+ G3FacsimileNonBasicParameters, MessageDeliveryTime, ORName,
+ OtherMessageDeliveryFields, SupplementaryInformation,
+ TeletexNonBasicParameters
+ --==
+ FROM MTSAbstractService {joint-iso-itu-t mhs(6) mts(3) modules(0)
+ mts-abstract-service(1) version-1999(1)}
+ -- MS Abstract Service
+-- MS-EXTENSION, SequenceNumber
+ --==
+-- FROM MSAbstractService {joint-iso-itu-t mhs(6) ms(4) modules(0)
+-- abstract-service(1) version-1999(1)}
+ -- Directory Authentication Framework
+ AlgorithmIdentifier, ENCRYPTED{}
+ --==
+ FROM AuthenticationFramework {joint-iso-itu-t ds(5) module(1)
+ authenticationFramework(7) 3}
+ -- IPMS Object Identifiers
+-- id-mst-assembly-capability, id-mst-assembly-instructions,
+-- id-mst-invalid-assembly-instructions, id-mst-invalid-ipn,
+-- id-mst-originator-body-part-encryption-token,
+-- id-mst-originator-forwarded-content-token,
+-- id-mst-suspend-auto-acknowledgement, id-mst-prevent-nrn-generation,
+-- id-on-absence-advice, id-on-change-of-address-advice
+ --==
+-- FROM IPMSObjectIdentifiers {joint-iso-itu-t mhs(6) ipms(1) modules(0)
+-- object-identifiers(0) version-1999(1)} --;
+
+Time ::= UTCTime
+
+-- Information object
+InformationObject ::= CHOICE {ipm [0] IPM,
+ ipn [1] IPN
+}
+
+-- IPM
+IPM ::= SEQUENCE {heading Heading,
+ body Body
+}
+
+-- MTS Extensions
+--IPMPerRecipientEnvelopeExtensions EXTENSION ::=
+-- {blind-copy-recipients | body-part-encryption-token |
+-- forwarded-content-token, ...}
+
+-- IPMS Extensions
+IPMSExtension --{IPMS-EXTENSION:ChosenFrom}-- ::= SEQUENCE {
+ type OBJECT IDENTIFIER, --IPMS-EXTENSION.&id({ChosenFrom}),
+ value ANY --IPMS-EXTENSION.&Type({ChosenFrom}{@type}) DEFAULT NULL:NULL
+}
+
+--IPMS-EXTENSION ::= CLASS {&id OBJECT IDENTIFIER UNIQUE,
+-- &Type DEFAULT NULL
+--}WITH SYNTAX {[VALUE &Type,]
+-- IDENTIFIED BY &id
+--}
+
+--PrivateIPMSExtensions IPMS-EXTENSION ::=
+-- {...}
+
+-- Heading
+Heading ::= SET {
+ this-IPM ThisIPMField,
+ originator [0] OriginatorField OPTIONAL,
+ authorizing-users [1] AuthorizingUsersField OPTIONAL,
+ primary-recipients [2] PrimaryRecipientsField DEFAULT {},
+ copy-recipients [3] CopyRecipientsField DEFAULT {},
+ blind-copy-recipients [4] BlindCopyRecipientsField OPTIONAL,
+ replied-to-IPM [5] RepliedToIPMField OPTIONAL,
+ obsoleted-IPMs [6] ObsoletedIPMsField DEFAULT {},
+ related-IPMs [7] RelatedIPMsField DEFAULT {},
+ subject [8] EXPLICIT SubjectField OPTIONAL,
+ expiry-time [9] ExpiryTimeField OPTIONAL,
+ reply-time [10] ReplyTimeField OPTIONAL,
+ reply-recipients [11] ReplyRecipientsField OPTIONAL,
+ importance [12] ImportanceField DEFAULT normal,
+ sensitivity [13] SensitivityField OPTIONAL,
+ auto-forwarded [14] AutoForwardedField DEFAULT FALSE,
+ extensions [15] ExtensionsField DEFAULT {}
+}
+
+-- Heading component types
+IPMIdentifier ::= [APPLICATION 11] SET {
+ user ORName OPTIONAL,
+ user-relative-identifier LocalIPMIdentifier
+}
+
+LocalIPMIdentifier ::= PrintableString(SIZE (0..ub-local-ipm-identifier))
+
+RecipientSpecifier ::= SET {
+ recipient [0] ORDescriptor,
+ notification-requests [1] NotificationRequests DEFAULT {},
+ reply-requested [2] BOOLEAN DEFAULT FALSE,
+ recipient-extensions [3] RecipientExtensionsField OPTIONAL
+}
+
+ORDescriptor ::= SET {
+ formal-name ORName OPTIONAL,
+ free-form-name [0] FreeFormName OPTIONAL,
+ telephone-number [1] TelephoneNumber OPTIONAL
+}
+
+FreeFormName ::= TeletexString(SIZE (0..ub-free-form-name))
+
+TelephoneNumber ::= PrintableString(SIZE (0..ub-telephone-number))
+
+NotificationRequests ::= BIT STRING {
+ rn(0), nrn(1), ipm-return(2), an-supported(3), suppress-an(4)}
+
+RecipientExtensionsField ::= SET OF IPMSExtension --{{RecipientExtensions}}
+
+--RecipientExtensions IPMS-EXTENSION ::=
+-- {circulation-list-indicator | precedence | recipient-security-request |
+-- PrivateIPMSExtensions, ...}
+
+-- This IPM heading field
+ThisIPMField ::= IPMIdentifier
+
+-- Originator heading field
+OriginatorField ::= ORDescriptor
+
+-- Authorizing Users heading field
+AuthorizingUsersField ::= SEQUENCE OF AuthorizingUsersSubfield
+
+AuthorizingUsersSubfield ::= ORDescriptor
+
+-- Primary Recipients heading field
+PrimaryRecipientsField ::= SEQUENCE OF PrimaryRecipientsSubfield
+
+PrimaryRecipientsSubfield ::= RecipientSpecifier
+
+-- Copy Recipients heading field
+CopyRecipientsField ::= SEQUENCE OF CopyRecipientsSubfield
+
+CopyRecipientsSubfield ::= RecipientSpecifier
+
+-- Blind Copy Recipients heading field
+BlindCopyRecipientsField ::= SEQUENCE OF BlindCopyRecipientsSubfield
+
+BlindCopyRecipientsSubfield ::= RecipientSpecifier
+
+-- Blind Copy Recipients envelope field
+--blind-copy-recipients EXTENSION ::= {
+-- BlindCopyRecipientsField,
+-- IDENTIFIED BY standard-extension:41
+--}
+
+-- Replied-to IPM heading field
+RepliedToIPMField ::= IPMIdentifier
+
+-- Obsoleted IPMs heading field
+ObsoletedIPMsField ::= SEQUENCE OF ObsoletedIPMsSubfield
+
+ObsoletedIPMsSubfield ::= IPMIdentifier
+
+-- Related IPMs heading field
+RelatedIPMsField ::= SEQUENCE OF RelatedIPMsSubfield
+
+RelatedIPMsSubfield ::= IPMIdentifier
+
+-- Subject heading field
+SubjectField ::= TeletexString(SIZE (0..ub-subject-field))
+
+-- Expiry Time heading field
+ExpiryTimeField ::= Time
+
+-- Reply Time heading field
+ReplyTimeField ::= Time
+
+-- Reply Recipients heading field
+ReplyRecipientsField ::= SEQUENCE OF ReplyRecipientsSubfield
+
+ReplyRecipientsSubfield ::=
+ ORDescriptor --(WITH COMPONENTS {
+-- ...,
+-- formal-name PRESENT
+-- })
+
+-- Importance heading field
+ImportanceField ::= ENUMERATED {low(0), normal(1), high(2)}
+
+-- Sensitivity heading field
+SensitivityField ::= ENUMERATED {
+ personal(1), private(2), company-confidential(3)}
+
+-- Auto-forwarded heading field
+AutoForwardedField ::= BOOLEAN
+
+-- Extensions heading field
+ExtensionsField ::= SET OF IPMSExtension --{{HeadingExtensions}}
+
+--HeadingExtensions IPMS-EXTENSION ::=
+-- {authorization-time | auto-submitted | body-part-signatures |
+-- circulation-list-recipients | distribution-codes | extended-subject |
+-- incomplete-copy | information-category | ipm-security-label | languages |
+-- manual-handling-instructions | originators-reference |
+-- precedence-policy-identifier | PrivateIPMSExtensions, ...}
+
+-- Body
+Body ::= SEQUENCE OF BodyPart
+
+-- asn2eth seems to have problems with this CHOICE CHOICE
+BodyPart ::= CHOICE {
+-- basic
+-- CHOICE { -- ia5-text [0] IA5TextBodyPart,
+ g3-facsimile [3] G3FacsimileBodyPart,
+ g4-class1 [4] G4Class1BodyPart,
+ teletex [5] TeletexBodyPart,
+ videotex [6] VideotexBodyPart,
+ encrypted [8] EncryptedBodyPart,
+ message [9] MessageBodyPart,
+ mixed-mode [11] MixedModeBodyPart,
+ bilaterally-defined [14] BilaterallyDefinedBodyPart,
+ nationally-defined [7] NationallyDefinedBodyPart --} --,
+ extended [15] ExtendedBodyPart --{{IPMBodyPartTable}}
+}
+
+
+-- Extended body part
+ExtendedBodyPart --{EXTENDED-BODY-PART-TYPE:IPMBodyPartTable}-- ::= SEQUENCE {
+ parameters [0] OBJECT IDENTIFIER, --INSTANCE OF TYPE-IDENTIFIER OPTIONAL,
+ data ANY -- INSTANCE OF TYPE-IDENTIFIER
+}
+--(CONSTRAINED BY { - - must correspond to the &parameters field and &data field of a member of --
+-- IPMBodyPartTable})
+
+--IPMBodyPartTable EXTENDED-BODY-PART-TYPE ::=
+-- {StandardBodyParts | ApplicationSpecificBodyParts}
+
+--StandardBodyParts EXTENDED-BODY-PART-TYPE ::=
+-- {ia5-text-body-part | g3-facsimile-body-part | g4-class1-body-part |
+-- teletex-body-part | videotex-body-part | encrypted-body-part |
+-- message-body-part | mixed-mode-body-part | bilaterally-defined-body-part |
+-- nationally-defined-body-part | general-text-body-part |
+-- file-transfer-body-part | voice-body-part | report-body-part |
+-- notification-body-part |
+-- content-body-part{{1 2 3 - - RELATIVE-OID to be provided - -}} |
+-- pkcs7-body-part, ...}
+
+--ApplicationSpecificBodyParts EXTENDED-BODY-PART-TYPE ::=
+-- {- -any body part defined in other Specifications, or for proprietary or private use
+-- ...}
+
+--EXTENDED-BODY-PART-TYPE ::= CLASS {
+-- &parameters TYPE-IDENTIFIER OPTIONAL,
+-- &data TYPE-IDENTIFIER
+--}WITH SYNTAX {[PARAMETERS &parameters,]
+-- DATA &data
+--}
+
+-- IA5 Text body part
+IA5TextBodyPart ::= SEQUENCE {
+ parameters IA5TextParameters,
+ data IA5TextData
+}
+
+IA5TextParameters ::= SET {repertoire [0] Repertoire DEFAULT ia5
+}
+
+IA5TextData ::= IA5String
+
+Repertoire ::= ENUMERATED {ita2(2), ia5(5)}
+
+-- G3 Facsimile body part
+G3FacsimileBodyPart ::= SEQUENCE {
+ parameters G3FacsimileParameters,
+ data G3FacsimileData
+}
+
+G3FacsimileParameters ::= SET {
+ number-of-pages [0] INTEGER OPTIONAL,
+ non-basic-parameters [1] G3FacsimileNonBasicParameters OPTIONAL
+}
+
+G3FacsimileData ::= SEQUENCE OF BIT STRING
+
+-- G4 Class 1 and Mixed-mode body parts
+G4Class1BodyPart ::= SEQUENCE OF Interchange-Data-Element
+
+MixedModeBodyPart ::= SEQUENCE OF Interchange-Data-Element
+
+-- Teletex body part
+TeletexBodyPart ::= SEQUENCE {
+ parameters TeletexParameters,
+ data TeletexData
+}
+
+TeletexParameters ::= SET {
+ number-of-pages [0] INTEGER OPTIONAL,
+ telex-compatible [1] BOOLEAN DEFAULT FALSE,
+ non-basic-parameters [2] TeletexNonBasicParameters OPTIONAL
+}
+
+TeletexData ::= SEQUENCE OF TeletexString
+
+-- Videotex body part
+VideotexBodyPart ::= SEQUENCE {
+ parameters VideotexParameters,
+ data VideotexData
+}
+
+VideotexParameters ::= SET {syntax [0] VideotexSyntax OPTIONAL
+}
+
+VideotexSyntax ::= INTEGER {
+ ids(0), data-syntax1(1), data-syntax2(2), data-syntax3(3)}
+
+VideotexData ::= VideotexString
+
+-- Encrypted body part
+EncryptedBodyPart ::= SEQUENCE {
+ parameters EncryptedParameters,
+ data EncryptedData
+}
+
+EncryptedParameters ::= SET {
+ algorithm-identifier AlgorithmIdentifier,
+ originator-certificates ExtendedCertificates OPTIONAL,
+ ...
+}
+
+EncryptedData ::= BIT STRING(CONSTRAINED BY {BodyPart})
+
+-- Message body part
+MessageBodyPart ::= SEQUENCE {
+ parameters MessageParameters,
+ data MessageData
+}
+
+MessageParameters ::= SET {
+ delivery-time [0] MessageDeliveryTime OPTIONAL,
+ delivery-envelope [1] OtherMessageDeliveryFields OPTIONAL
+}
+
+MessageData ::= IPM
+
+-- Bilaterally Defined body part
+BilaterallyDefinedBodyPart ::= OCTET STRING
+
+-- Nationally Defined body part
+--NATIONAL-BODY-PARTS ::= CLASS {&Type
+--}
+
+--NationallyDefinedBodyPart ::= NATIONAL-BODY-PARTS.&Type
+
+-- Provided for Historic reasons. Use is strongly deprecated.
+-- IPN
+IPN ::= SET {
+ -- common-fields - -COMPONENTS OF CommonFields,
+ subject-ipm SubjectIPMField,
+ ipn-originator [1] IPNOriginatorField OPTIONAL,
+ ipm-intended-recipient [2] IPMIntendedRecipientField OPTIONAL,
+ conversion-eits ConversionEITsField OPTIONAL,
+ notification-extensions [3] NotificationExtensionsField OPTIONAL,
+ choice
+ [0] CHOICE {non-receipt-fields [0] NonReceiptFields,
+ receipt-fields [1] ReceiptFields,
+ other-notification-type-fields
+ [2] OtherNotificationTypeFields}
+}
+
+--RN ::=
+-- IPN
+-- (WITH COMPONENTS {
+-- ...,
+-- choice (WITH COMPONENTS {
+-- receipt-fields PRESENT
+-- })
+-- })
+
+--NRN ::=
+-- IPN
+-- (WITH COMPONENTS {
+-- ...,
+-- choice (WITH COMPONENTS {
+-- non-receipt-fields PRESENT
+-- })
+-- })
+
+--ON ::=
+-- IPN
+-- (WITH COMPONENTS {
+-- ...,
+-- choice (WITH COMPONENTS {
+-- other-notification-type-fields PRESENT
+-- })
+-- })
+
+CommonFields ::= SET {
+ subject-ipm SubjectIPMField,
+ ipn-originator [1] IPNOriginatorField OPTIONAL,
+ ipm-intended-recipient [2] IPMIntendedRecipientField OPTIONAL,
+ conversion-eits ConversionEITsField OPTIONAL,
+ notification-extensions [3] NotificationExtensionsField OPTIONAL
+}
+
+NonReceiptFields ::= SET {
+ non-receipt-reason [0] NonReceiptReasonField,
+ discard-reason [1] DiscardReasonField OPTIONAL,
+ auto-forward-comment [2] AutoForwardCommentField OPTIONAL,
+ returned-ipm [3] ReturnedIPMField OPTIONAL,
+ nrn-extensions [4] NRNExtensionsField OPTIONAL
+}
+
+ReceiptFields ::= SET {
+ receipt-time [0] ReceiptTimeField,
+ acknowledgment-mode [1] AcknowledgmentModeField DEFAULT manual,
+ suppl-receipt-info [2] SupplReceiptInfoField OPTIONAL,
+ rn-extensions [3] RNExtensionsField OPTIONAL
+}
+
+-- Common fields
+SubjectIPMField ::= IPMIdentifier
+
+IPNOriginatorField ::= ORDescriptor
+
+IPMIntendedRecipientField ::= ORDescriptor
+
+ConversionEITsField ::= EncodedInformationTypes
+
+NotificationExtensionsField ::= SET OF IPMSExtension --{{NotificationExtensions}}
+
+--NotificationExtensions IPMS-EXTENSION ::=
+-- {ipn-security-response | PrivateIPMSExtensions, ...}
+
+-- Non-receipt fields
+NonReceiptReasonField ::= ENUMERATED {
+ ipm-discarded(0), ipm-auto-forwarded(1), ...
+ }
+
+-- ITU-T version:
+DiscardReasonField ::= ENUMERATED {
+ ipm-expired(0), ipm-obsoleted(1), user-subscription-terminated(2),
+ not-used(3)}
+
+-- ISO/IEC version:
+--DiscardReasonField ::= ENUMERATED {
+-- ipm-expired (0),
+-- ipm-obsoleted (1),
+-- user-subscription-terminated (2),
+-- The following value may not be supported by implementations of earlier versions of this Specification
+-- ipm-deleted (3),
+-- ... }
+AutoForwardCommentField ::=
+ AutoForwardComment
+
+AutoForwardComment ::= PrintableString(SIZE (0..ub-auto-forward-comment))
+
+ReturnedIPMField ::= IPM
+
+NRNExtensionsField ::= SET OF IPMSExtension --{{NRNExtensions}}
+
+--NRNExtensions IPMS-EXTENSION ::= {PrivateIPMSExtensions, ...}
+
+-- Receipt fields
+ReceiptTimeField ::= Time
+
+AcknowledgmentModeField ::= ENUMERATED {manual(0), automatic(1)}
+
+SupplReceiptInfoField ::= SupplementaryInformation
+
+RNExtensionsField ::= SET OF IPMSExtension --{{RNExtensions}}
+
+--RNExtensions IPMS-EXTENSION ::= {PrivateIPMSExtensions, ...}
+
+-- Other Notification Type fields
+OtherNotificationTypeFields ::= SET OF IPMSExtension --{{OtherNotifications}}
+
+--OtherNotifications IPMS-EXTENSION ::=
+-- {AdviceNotifications | PrivateIPMSExtensions, ...}
+
+--AdviceNotifications IPMS-EXTENSION ::=
+-- {absence-advice | change-of-address-advice, ...}
+
+-- Advice Notification fields
+--absence-advice IPMS-EXTENSION ::= {
+-- VALUE AbsenceAdvice,
+-- IDENTIFIED BY id-on-absence-advice
+--}
+
+AbsenceAdvice ::= SEQUENCE {
+ advice BodyPart OPTIONAL,
+ next-available Time OPTIONAL
+}
+
+-- at least one component shall be present
+--change-of-address-advice IPMS-EXTENSION ::= {
+-- VALUE ChangeOfAddressAdvice,
+-- IDENTIFIED BY id-on-change-of-address-advice
+--}
+
+ChangeOfAddressAdvice ::= SEQUENCE {
+ new-address
+ [0] ORDescriptor --(WITH COMPONENTS {
+-- ...,
+-- formal-name PRESENT
+-- }) --,
+ effective-from [1] Time OPTIONAL
+}
+
+-- Message Store Realization
+--prevent-nrn-generation MS-EXTENSION ::= {
+-- NULL
+-- IDENTIFIED BY id-mst-prevent-nrn-generation
+--}
+
+--suspend-auto-acknowledgement MS-EXTENSION ::= {
+-- NULL
+-- IDENTIFIED BY id-mst-suspend-auto-acknowledgement
+--}
+
+--assembly-capability MS-EXTENSION ::= {
+-- NULL
+-- IDENTIFIED BY id-mst-assembly-capability
+--}
+
+--IPMSubmissionOptions MS-EXTENSION ::=
+-- {ipm-assembly-instructions | originator-body-part-encryption-token |
+-- originator-forwarded-content-token, ...} - - For future extension additions
+
+--ipm-assembly-instructions MS-EXTENSION ::= {
+-- IPMAssemblyInstructions
+-- IDENTIFIED BY id-mst-assembly-instructions
+--}
+
+IPMAssemblyInstructions ::= SET {assembly-instructions [0] BodyPartReferences
+}
+
+BodyPartReferences ::= SEQUENCE OF BodyPartReference
+
+BodyPartReference ::= CHOICE {
+ stored-entry [0] SequenceNumber,
+ stored-content [1] SequenceNumber,
+ submitted-body-part [2] INTEGER(1..MAX),
+ stored-body-part
+ [3] SEQUENCE {message-entry SequenceNumber,
+ body-part-number INTEGER(1..MAX)}
+}
+
+--originator-body-part-encryption-token MS-EXTENSION ::= {
+-- BodyPartTokens
+-- IDENTIFIED BY id-mst-originator-body-part-encryption-token
+--}
+
+--originator-forwarded-content-token MS-EXTENSION ::= {
+-- ForwardedContentToken
+-- IDENTIFIED BY id-mst-originator-forwarded-content-token
+--}
+
+--IPMSubmissionErrors MS-EXTENSION ::=
+-- {invalid-assembly-instructions | invalid-ipn, ...
+-- } - - For future extension additions
+
+--invalid-assembly-instructions MS-EXTENSION ::= {
+-- BodyPartReferences
+-- IDENTIFIED BY id-mst-invalid-assembly-instructions
+--}
+
+--invalid-ipn MS-EXTENSION ::= {NULL
+-- IDENTIFIED BY id-mst-invalid-ipn
+--}
+
+SequenceNumber ::= INTEGER
+Interchange-Data-Element ::= ANY
+NationallyDefinedBodyPart ::= ANY
+
+-- cannot refer to basic types in .cnf .#REGISTER - so we create an intermediate type
+OriginatingUA ::= IA5String
+
+END -- of IPMSInformationObjects
+
+-- Generated by Asnp, the ASN.1 pretty-printer of France Telecom R&D
+
diff --git a/asn1/x420/x420.cnf b/asn1/x420/x420.cnf
new file mode 100644
index 0000000000..3747f781f7
--- /dev/null
+++ b/asn1/x420/x420.cnf
@@ -0,0 +1,52 @@
+#.MODULE_IMPORT
+MTSAbstractService x411
+AuthenticationFramework x509af
+
+#.INCLUDE ../x411/x411-exp.cnf
+#.INCLUDE ../x509af/x509af-exp.cnf
+
+#.EXPORTS
+ORDescriptor
+
+#.FIELD_RENAME
+
+G3FacsimileBodyPart/data g3facsimile_data
+VideotexBodyPart/data videotex_data
+ExtendedBodyPart/data extended_data
+TeletexBodyPart/data teletex_data
+IA5TextBodyPart/data ia5text_data
+MessageBodyPart/data message_data
+EncryptedBodyPart/data encrypted_data
+
+G3FacsimileBodyPart/parameters g3facsimile_parameters
+VideotexBodyPart/parameters videotex_parameters
+ExtendedBodyPart/parameters extended_parameters
+TeletexBodyPart/parameters teletex_parameters
+IA5TextBodyPart/parameters ia5text_parameters
+MessageBodyPart/parameters message_parameters
+EncryptedBodyPart/parameters encrypted_parameters
+
+TeletexParameters/non-basic-parameters teletex_non_basic_parameters
+G3FacsimileParameters/non-basic-parameters g3facsimile_non_basic_parameters
+
+#.REGISTER
+OriginatingUA B "1.2.826.0.1004.10.1.1" "nexor-originating-ua"
+
+#.FN_BODY IPMSExtension/type
+
+ offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+ object_identifier_id);
+
+#.FN_BODY T_value
+
+ offset=call_ber_oid_callback(object_identifier_id, tvb, offset, pinfo, tree);
+
+#.FN_BODY T_data
+/* XXX Not implemented yet */
+
+#.FN_BODY Interchange_Data_Element
+/* XXX Not implemented yet */
+
+#.FN_BODY NationallyDefinedBodyPart
+/* XXX Not implemented yet */
+