Как установить значения по умолчанию в объекте SEQUENCE OF - PullRequest
0 голосов
/ 17 октября 2018

Я начинаю использовать библиотеку pyasn1, и у меня возникает вопрос о том, как установить значения по умолчанию в объекте SEQUENCE OF.Моя структура ASN1 следующая:

Asn1Def DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN
  CasinoPlayer ::= SEQUENCE       
  {                                                     
     name      UTF8String (SIZE(1..16)),
     luckyNumbers SEQUENCE  (SIZE(3)) OF INTEGER DEFAULT {7,7,7}
  }                                                     
END

Я понял, как создать поле DEFAULT в CasinoPlayer SEQUENCE, используя объекты namedtype.DefaultedNamedType и используя подтип для добавления ограничения SIZE, но как мне инициализироватьзначение по умолчанию {7,7,7}?

Спасибо

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, что это должно выглядеть так:

class CasinoPlayer(Sequence):
    componentType = NamedTypes(
        NamedType(
            'name',
            UTF8String(
                ConstraintsIntersection(
                    ValueSizeConstraint(1, 16)
                )
            )
        ),
        DefaultedNamedType(
            'luckyNumbers',
            SequenceOf(
                componentType=Integer(),
                sizeSpec=ConstraintsIntersection(
                    ValueSizeConstraint(3, 3)
                )
            ).setComponentByPosition(0, 7)
             .setComponentByPosition(1, 7)
             .setComponentByPosition(2, 7)
        )
    )

Кроме того, вам, вероятно, нужно назначить теги для каждого типа ASN.1 (как это подразумевается в предложении AUTOMATIC TAGS ).

ОБНОВЛЕНИЕ:

На самом деле, это должно работать, но это не так!К счастью, есть исправление , которое должно сделать дефолт SequenceOf распространяющимся на поле Sequence до тех пор, пока оно DefaultedNamedType.

...