Как смоделировать 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