Я изучаю синтаксис ASN.1, и я читал много соответствующего материала в Интернете:ASN.1 Последовательность Путаница
http://www.itu.int/rec/T-REC-X.690-200811-I/en
http://luca.ntop.org/Teaching/Appunti/asn1.html
http://www.obj-sys.com/asn1tutorial/node11.html
Я очень запутанные по кодированию типов ASN.1 SEQUENCE
. В общем, я понимаю, что SEQUENCE
в основном представляет собой совокупность - то, что мы будем называть OBJECT или INSTANCE на большинстве языков программирования. Это в основном список пар имя/значение, аналогичный объекту JSON. Но в отличие от объекта JSON ASN.1 SEQUENCE
имеет неявную SCHEMA, потому что это экземпляр «класса».
Таким образом, класс/схема для SEQUENCE
может быть что-то вроде:
{
name UTF8String
age INTEGER
}
И INSTANCE из этой схемы может быть SEQUENCE
{
"John Smith"
42
}
Но я совершенно запутался о том, как вы можете определить разницу между CLASS и INSTANCE в фактической кодировке BER. На самом деле, я так запутался, я даже не уверен, что ASN.1 SEQUENCE
должен быть определением класса или экземпляром класса.
документация, кажется, подразумевает, что это экземпляр:
8,9 Кодирование значения последовательности
8.9.1 Кодирование значения последовательности должны быть построены.
8.9.2 Октеты содержимого должны состоять из полного кодирования одного значения данных от каждого из типов, перечисленных в определении ASN.1 типа последовательности, в порядке их появления в определении , если для типа не было указано ключевое слово OPTIONAL или ключевое слово DEFAULT.
8.9.3 Кодирование значения данных может, но не обязательно, присутствовать для типа, который был ссылочного с ключевым словом ФАКУЛЬТАТИВНЫМ или ключевое слово DEFAULT. Если он присутствует, он должен появиться в кодировке в точке , соответствующей появлению типа в определении ASN.1.
Таким образом, SEQUENCE представляет собой список значений данных, которые должны соответствовать некоторой схеме (классу). Но ASN.1 не имеет типа CLASS
, так как вы получаете фактический класс, так что вы знаете, какой класс представляет собой данный SEQUENCE?