Как разобрать класс объекта из грамматики 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.