5. Data Type Representations Used in the SSH Protocols (Représentations de types de données utilisées dans les protocoles SSH)
5. Data Type Representations Used in the SSH Protocols (Représentations de types de données utilisées dans les protocoles SSH)
byte
Un octet représente une valeur 8 bits arbitraire (octet). Les données de longueur fixe sont parfois représentées sous forme de tableau d'octets, écrit byte[n], où n est le nombre d'octets dans le tableau.
boolean
Une valeur booléenne est stockée sous forme d'un seul octet. La valeur 0 représente FALSE, et la valeur 1 représente TRUE. Toutes les valeurs non nulles DOIVENT être interprétées comme TRUE; cependant, les applications NE DOIVENT PAS stocker de valeurs autres que 0 et 1.
uint32
Représente un entier non signé de 32 bits. Stocké sous forme de quatre octets dans l'ordre de signification décroissante (ordre des octets réseau). Par exemple: la valeur 699921578 (0x29b7f4aa) est stockée comme 29 b7 f4 aa.
uint64
Représente un entier non signé de 64 bits. Stocké sous forme de huit octets dans l'ordre de signification décroissante (ordre des octets réseau).
string
Chaîne binaire de longueur arbitraire. Les chaînes sont autorisées à contenir des données binaires arbitraires, y compris des caractères nuls et des caractères 8 bits. Elles sont stockées sous forme d'un uint32 contenant sa longueur (nombre d'octets qui suivent) et zéro (= chaîne vide) ou plusieurs octets qui sont la valeur de la chaîne. Les caractères nuls de terminaison ne sont pas utilisés.
Les chaînes sont également utilisées pour stocker du texte. Dans ce cas, US-ASCII est utilisé pour les noms internes, et ISO-10646 UTF-8 pour le texte qui pourrait être affiché à l'utilisateur. Le caractère nul de terminaison NE DEVRAIT PAS normalement être stocké dans la chaîne. Par exemple: la chaîne US-ASCII "testing" est représentée comme 00 00 00 07 t e s t i n g. Le mappage UTF-8 ne modifie pas l'encodage des caractères US-ASCII.
mpint
Représente des entiers de précision multiple au format complément à deux, stockés sous forme de chaîne, 8 bits par octet, MSB en premier. Les nombres négatifs ont la valeur 1 comme bit le plus significatif du premier octet de la partition de données. Si le bit le plus significatif serait défini pour un nombre positif, le nombre DOIT être précédé d'un octet zéro. Les octets principaux inutiles avec la valeur 0 ou 255 NE DOIVENT PAS être inclus. La valeur zéro DOIT être stockée sous forme de chaîne avec zéro octet de données.
Par convention, un nombre qui est utilisé dans des calculs modulaires dans Z_n DEVRAIT être représenté dans la plage 0 <= x < n.
Exemples:
value (hex) representation (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
Une chaîne contenant une liste de noms séparés par des virgules. Une name-list est représentée comme un uint32 contenant sa longueur (nombre d'octets qui suivent) suivie d'une liste séparée par des virgules de zéro ou plusieurs noms. Un nom DOIT avoir une longueur non nulle, et il NE DOIT PAS contenir de virgule (","). Comme il s'agit d'une liste de noms, tous les éléments contenus sont des noms et DOIVENT être en US-ASCII. Le contexte peut imposer des restrictions supplémentaires sur les noms. Par exemple, les noms dans une name-list peuvent devoir être une liste d'identifiants d'algorithmes valides (voir Section 6 ci-dessous), ou une liste de balises de langue [RFC3066]. L'ordre des noms dans une name-list peut ou non être significatif. Encore une fois, cela dépend du contexte dans lequel la liste est utilisée. Les caractères nuls de terminaison NE DOIVENT PAS être utilisés, ni pour les noms individuels, ni pour la liste dans son ensemble.
Exemples:
value representation (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