Как разобрать класс объекта из грамматики ASN1 для использования в pyasn1?

Мне нужно использовать GSM MAP ASN.1, но в этой спецификации есть один класс информационных объектов ( или здесь), и я не знаю, как разобрать эту грамматику для использования в pyasn1 lib.

Есть ли способ (или обходной путь) для его анализа?

Вот случай (взят из 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 }

1 ответ

Решение

На данный момент pyasn1 реализует только X.208, а не X.68*. Это означает, что более новые конструкции ASN.1 (такие как классы информационных объектов) еще не поддерживаются напрямую.

Хорошей новостью является то, что существует определенная степень обратной совместимости между X.68 * и X.208, встроенными в стандарт. В зависимости от функций X.68 *, используемых в вашей спецификации ASN.1, вы можете понизить определение ASN.1 с X.68 * до X.208, не теряя совместимости протокола уровня провода с полноценным X.68 * сущность на другом конце соединения. Как только вам удалось преобразовать одну спецификацию в другую, вы сможете использовать pyasn1.

Существует также незавершенная ветвь, которая автоматизирует ANY DEFINED BY Конструкция X.208 работает так, что все это автоматически обрабатывается pyasn1.

Другие вопросы по тегам