Как смоделировать RFC3161 Точность ASN.1 SEQUENCE с использованием NEC SEC_ASN1Template?

Определение точности ASN.1:

Accuracy ::= SEQUENCE {
    seconds     INTEGER          OPTIONAL,
    millis  [0] INTEGER (1..999) OPTIONAL,
    micros  [1] INTEGER (1..999) OPTIONAL  }

Что мне неясно, так это то, как обращаться с миллис и микро. Невозможно использовать оба универсальных тега SEC_ASN1_INTEGER и теги 0 и 1 в одном и том же поле "kind" структуры SEC_ASN1Template, поскольку оба они будут входить в одну и ту же часть (младший байт) этого поля.

1 ответ

Обратите внимание, что

millis [0] INTEGER (1..999) OPTIONAL

на самом деле не типа INTEGER, а типа [0].

Возможно, вам поможет следующее эквивалентное определение типа:

Accuracy ::= SEQUENCE {
    seconds     AccuracySeconds      OPTIONAL,
    millis  [0] AccuracyMilliseconds OPTIONAL,
    micros  [1] AccuracyMicroseconds OPTIONAL  }

AccuracySeconds ::= INTEGER
AccuracyMilliseconds ::= INTEGER(1..999)
AccuracyMicroseconds ::= INTEGER(1..999)

Также необходимо учитывать, если в вашем определении типа используются теги IMPLICIT или EXPLICIT... кодировка будет другой:

(Неявный)

30 06
   01 01 02
   80 01 02

против (явный)

30 08
   01 01 02
   A0 03
      02 01 02
Другие вопросы по тегам