如何从 ASN1 语法解析对象 Class 以在 pyasn1 中使用?

How to parse Object Class from ASN1 grammar to use in pyasn1?

我需要在该规范中使用 GSM MAP ASN.1, but there is one Information Object Classes (or here),但我不知道如何解析此语法以在 pyasn1 库中使用。

是否有某种方法(或解决方法)来解析它?

情况如下(取自3GPP TS 29.002 V12.3.0):

MAP-EXTENSION  ::= CLASS {
    &ExtensionType              OPTIONAL,
    &extensionId    OBJECT IDENTIFIER }
    -- The length of the Object Identifier shall not exceed 16 octets and the
    -- number of components of the Object Identifier shall not exceed 16

-- data types

ExtensionContainer ::= SEQUENCE {
    privateExtensionList    [0]PrivateExtensionList OPTIONAL, 
    pcs-Extensions  [1]PCS-Extensions   OPTIONAL,
    ...}

SLR-ArgExtensionContainer ::= SEQUENCE {
    privateExtensionList    [0]PrivateExtensionList OPTIONAL, 
    slr-Arg-PCS-Extensions  [1]SLR-Arg-PCS-Extensions   OPTIONAL,
    ...}

PrivateExtensionList ::= SEQUENCE SIZE (1..maxNumOfPrivateExtensions) OF
                PrivateExtension

PrivateExtension ::= SEQUENCE {
    extId       MAP-EXTENSION.&extensionId
                ({ExtensionSet}),
    extType     MAP-EXTENSION.&ExtensionType
                ({ExtensionSet}{@extId})    OPTIONAL}

maxNumOfPrivateExtensions  INTEGER ::= 10

ExtensionSet        MAP-EXTENSION ::=
        {...
         -- ExtensionSet is the set of all defined private extensions
    }   
    -- Unsupported private extensions shall be discarded if received.

PCS-Extensions ::= SEQUENCE {
    ...}

SLR-Arg-PCS-Extensions ::= SEQUENCE {
    ...,
    na-ESRK-Request [0] NULL        OPTIONAL }

截至目前,pyasn1 仅实现 X.208,未实现 X.68*。这意味着较新的 ​​ASN.1 构造(例如信息对象 类)尚未得到直接支持。

好消息是标准中内置的 X.68* 和 X.208 之间存在一定程度的向后兼容性。根据您的 ASN.1 规范中使用的 X.68* 功能,您可以 downgrade 您的 ASN.1 定义从 X.68* 到 X.208,而不会失去与连接另一端的成熟 X.68* 实体。一旦你设法将一种规范转换为另一种规范,你应该能够使用 pyasn1。

还有一个正在进行的工作 branch,它使 ANY DEFINED BY X.208 构造的工作自动化,以便它全部由 pyasn1 自动处理。