Кодирование ASN.1 с дополнительными полями

Предполагая, что следующий объект определен в файле .asn.

TestObject := IMPLICIT [APPLICATION 7] SEQUENCE {
version UTF8String,
a GeneralizedTime OPTIONAL,
b [APPLICATION C0] IMPLICIT SEQUENCE OF [PRIVATE P0] IMPLICIT ad OPTIONAL,
c [APPLICATION C1] IMPLICIT SEQUENCE OF ab OPTIONAL,
d [APPLICATION C2] IMPLICIT ac OPTIONAL,
e [APPLICATION C3] IMPLICIT ad OPTIONAL,
f [APPLICATION C4] IMPLICIT al OPTIONAL,
g [APPLICATION C6] IMPLICIT SEQUENCE OF an OPTIONAL,
h ASNSyncPayload OPTIONAL,
signature NULLOCTETSTRING,
}

Есть несколько необязательных полей, и я не уверен, как они будут закодированы.

Может кто-нибудь объяснить, как я могу кодировать следующее в двоичный файл, возможно, с использованием libtasn1?

1

Решение

Обратите внимание, что ваши теги [APPLICATION C0] — [APPLICATION C6] не являются допустимыми тегами ASN.1. То же самое относится и к [ЧАСТНЫЙ P0]. Удалите буквы «C» и «P», чтобы у вас было [APPLICATION 0] через APPLICATION 6] и [PRIVATE 0], и ваши теги будут в порядке. Кроме того, имена типов ASN.1 должны начинаться с заглавной буквы, поэтому «ad», «ab», «ac», «al» и «an» не являются допустимыми именами типов.

ASN.1 имеет несколько правил кодирования, которые обрабатывают необязательные поля различными способами. BER, DER и CER используют наличие или отсутствие тегов ASN.1 в кодировке для определения наличия или отсутствия компонента. Это означает, что если кодировка имеет тег, длину и значение для поля версии, за которым следуют длина тега и значение для поля подписи, все промежуточные необязательные поля отсутствуют.

PER использует битовую маску заранее в каждой последовательности с битом для каждого необязательного поля, чтобы указать его наличие или отсутствие.

Вы можете попробовать свой пример ASN.1 в бесплатном онлайн-компиляторе ASN.1 с кодировщиком / декодером по адресу http://asn1-playground.oss.com чтобы увидеть подробно, как обрабатываются необязательные поля.

2

Другие решения

Других решений пока нет …