5. Представление типов данных, используемых в протоколах SSH
- byte
- Байт представляет собой произвольное 8-битовое значение (октет). Данные фиксированного размера в некоторых случаях представляются как массивы байтов byte[n], где n показывает число байтов в массиве.
- boolean
- Логические значения сохраняются в одном бите. Значение 0 представляет логическое значение FALSE (ложь), а 1 — логическое значение TRUE (истина). Любые отличные от 0 значения должны интерпретироваться как TRUE, однако для приложений недопустимо использование для логических переменных каких-либо значений, кроме 0 и 1.
- uint32
- Представляет 32-битовое целое число без знака. Переменные этого типа сохраняются в четырех байтах с уменьшением значимости (сетевой порядок). Например, значение 699921578 (0x29b7f4aa) будет иметь байтовое представление 29 b7 f4 aa.
- uint64
- Представляет 64-битовое целое число без знака. Переменные этого типа сохраняются в восьми байтах с уменьшением значимости (сетевой порядок).
- string
- Двоичная строка произвольной длины. Строки могут содержать любые бинарные данные, включая 0-символ и 8-битовые символы. Строки хранятся в виде переменной типа uint32, указывающей размер (число байтов) и последовательности (возможно нулевой длины) байтов, содержащих отдельные символы строки. Завершающих 0-символов для строк не используется.
Строки также служат для хранения текста. В этом случае для внутренних имен используется набор символов US-ASCII, а для текста, отображаемого пользователю, служит набор символов ISO-10646 UTF-8. Завершающий 0-символ в общем случае не следует включать в строку. Например, строка US-ASCII "testing" будет представлена, как 00 00 00 07 t e s t i n g. Отображение UTF-8 не изменяет представление символов набора US-ASCII. - mpint
- Представляет целые числа в формате дополнения до 2, сохраняемые как строки байтов (старший байт сначала). Отрицательные значения задаются 1 в старшем бите первого байта строки данных. Если старший бит имеет значение 0 (положительное число), все остальные биты также должны иметь значение 0 (собственно число начинается со второго байта). Недопустимо использование значений с незначимыми старшими байтами, установленным в 0 или 255. Нулевое значение должно сохраняться как строка нулевой длины.
По соглашению число, используемое в расчетах по модулю n (Z_n), следует представлять значением из диапазона 0 <= x < n.
Пример:
значение (hex) представление (hex) --------------- ------------------- 0 00 00 00 00 9a378f9b2e332a7 00 00 00 08 09 a3 78 f9 b2 e3 32 a7 80 00 00 00 02 00 80 -1234 00 00 00 02 ed cc -deadbeef 00 00 00 05 ff 21 52 41 11
- name-list
- Строка, содержащая список разделенных запятыми имен. Такие списки представляются значением типа uint32, показывающим длину списка (число байтов), за которым следует список (возможно пустой) разделенных запятыми (,) имен. Имена в списке должны иметь отличную от 0 длину, недопустимо включать в имена символ запятой (","). Поскольку этот тип является списком имен, все элементы списка должны быть представлены набором символов US-ASCII. В зависимости от контекста к именам в списке могут предъявляться дополнительные требования. Например, имена в списке могут быть корректными идентификаторами алгоритмов (см. раздел 6) или тегами языков [RFC3066]. Порядок имен в списке может иметь значение, но это не обязательно и зависит от контекста использования списка. Недопустимо использование завершающих null-символов ни в отдельных именах, ни в списке в целом.
Пример:
значение представление (hex) -------- ------------------- (), the empty name-list 00 00 00 00 ("zlib") 00 00 00 04 7a 6c 69 62 ("zlib,none") 00 00 00 09 7a 6c 69 62 2c 6e 6f 6e 65