RFC: 4251
Оригинал: SSH Protocol Architecture
Категория: Предложенный стандарт
Дата публикации:
Авторы: ,
Перевод: Николай Малых

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
2007 - 2017 © Русские переводы RFC, IETF, ISOC.