ГОСТ Р ИСО/МЭК 8825-1-2003
8.7 Кодирование значения «строка октетов»
8.7.1 Кодирование значения «строка октетов» должно быть простым или составным, по усмотрению отправителя.
Примечание — Если необходимо передать часть строки октетов до того, как станет доступна вся строка, то используется составное кодирование.
8.7.2 Простое кодирование содержит нуль, один или несколько октетов содержимого, равных по значению октетам в значении данных, в порядке их появления в значении данных, и со старшим значащим битом октета значения данных, выровненным по старшему значащему биту октета содержимого.
8.7.3 Октеты содержимого для составного кодирования должны состоять из нуля, одного или нескольких кодирований.
Примечание — Каждое такое кодирование включает в себя октеты идентификатора, длины, содержимого и может включать октеты конец-содержимого, если оно является составным.
8.7.3.1 Для кодирования значения «строка октетов» таким способом это значение должно быть сегментировано. Каждый сегмент должен состоять из ряда последовательных октетов значения. Расположение границ сегментов значения не имеет.
Примечание — Сегмент может иметь нулевой размер, то есть не содержать октеты.
8.7.3.2 Каждое кодирование в октетах содержимого должно представлять сегмент общей строки октетов, кодовое представление которой является результатом рекурсивного применения настоящего раздела. При этом применении каждый сегмент рассматривается как значение строки октетов. Кодовые представления сегментов должны появляться в октетах содержимого в том порядке, в каком их октеты появляются в общем значении.
Примечания
1 Как следствие этой рекурсии, каждое кодирование в октетах содержимого само может быть простым или составным. Однако обычно такие кодирования являются простыми.
2 В частности, теги в октетах содержимого всегда универсального класса номер 4.
8.8 Кодирование вырожденного значения
8.8.1 Кодирование вырожденного значения должно быть простым.
8.8.2 Октеты содержимого не должны содержать октетов.
Примечание — Октет длины равен нулю.
Пример. Если тип NULL, то NULL может быть закодирован как:
NULL Длина
0516 0016
8.9 Кодирование значения «последовательность»
8.9.1 Кодирование значения «последовательность» должно быть составным.
8.9.2 Октеты содержимого должны состоять из полного кодирования одного значения данных для каждого из типов, перечисленных в определении АСН.1 типа «последовательность», в порядке их появления в определении, если только тип не был указан с ключевым словом «OPTIONAL» или «DEFAULT».
8.9.3 Кодирование значения данных может, но не обязательно, присутствовать для типа, указанного с ключевым словом «OPTIONAL» или «DEFAULT». Если оно присутствует, то должно появляться в кодировании в точке, соответствующей появлению типа в определении АСН.1.
П ример. Если тип
SEQUENCE {name IA5String, ok BOOLEAN},
то значение
|
{name «Smith», ok TRUE} может быть закодировано как:
Последовательность Длина
3016 0А16 |
|
Содержимое |
|
IA5String |
Длина |
Содержимое |
|
1N16 |
0516 |
«Smith» |
|
BOOLEAN |
Длина |
Содержимое |
|
0116 |
0116 |
FF16 |
|
|
10