5. Data Type Representations Used in the SSH Protocols (Rappresentazioni di tipi di dati utilizzati nei protocolli SSH)
5. Data Type Representations Used in the SSH Protocols (Rappresentazioni di tipi di dati utilizzati nei protocolli SSH)
byte
Un byte rappresenta un valore 8-bit arbitrario (ottetto). I dati a lunghezza fissa sono talvolta rappresentati come un array di byte, scritto byte[n], dove n è il numero di byte nell'array.
boolean
Un valore booleano è memorizzato come un singolo byte. Il valore 0 rappresenta FALSE, e il valore 1 rappresenta TRUE. Tutti i valori diversi da zero DEVONO essere interpretati come TRUE; tuttavia, le applicazioni NON DEVONO memorizzare valori diversi da 0 e 1.
uint32
Rappresenta un intero senza segno a 32 bit. Memorizzato come quattro byte nell'ordine di significatività decrescente (ordine dei byte di rete). Ad esempio: il valore 699921578 (0x29b7f4aa) è memorizzato come 29 b7 f4 aa.
uint64
Rappresenta un intero senza segno a 64 bit. Memorizzato come otto byte nell'ordine di significatività decrescente (ordine dei byte di rete).
string
Stringa binaria di lunghezza arbitraria. Le stringhe possono contenere dati binari arbitrari, inclusi caratteri null e caratteri a 8 bit. Sono memorizzate come un uint32 contenente la loro lunghezza (numero di byte che seguono) e zero (= stringa vuota) o più byte che sono il valore della stringa. I caratteri null terminali non vengono utilizzati.
Le stringhe vengono utilizzate anche per memorizzare testo. In tal caso, US-ASCII è utilizzato per i nomi interni, e ISO-10646 UTF-8 per il testo che potrebbe essere visualizzato all'utente. Il carattere null terminale NON DOVREBBE normalmente essere memorizzato nella stringa. Ad esempio: la stringa US-ASCII "testing" è rappresentata come 00 00 00 07 t e s t i n g. La mappatura UTF-8 non altera la codifica dei caratteri US-ASCII.
mpint
Rappresenta interi a precisione multipla in formato complemento a due, memorizzati come una stringa, 8 bit per byte, MSB per primo. I numeri negativi hanno il valore 1 come bit più significativo del primo byte della partizione dati. Se il bit più significativo sarebbe impostato per un numero positivo, il numero DEVE essere preceduto da un byte zero. I byte iniziali non necessari con valore 0 o 255 NON DEVONO essere inclusi. Il valore zero DEVE essere memorizzato come una stringa con zero byte di dati.
Per convenzione, un numero che viene utilizzato in calcoli modulari in Z_n DOVREBBE essere rappresentato nell'intervallo 0 <= x < n.
Esempi:
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
Una stringa contenente un elenco di nomi separati da virgole. Una name-list è rappresentata come un uint32 contenente la sua lunghezza (numero di byte che seguono) seguito da un elenco separato da virgole di zero o più nomi. Un nome DEVE avere una lunghezza diversa da zero, e NON DEVE contenere una virgola (","). Poiché questa è una lista di nomi, tutti gli elementi contenuti sono nomi e DEVONO essere in US-ASCII. Il contesto può imporre restrizioni aggiuntive sui nomi. Ad esempio, i nomi in una name-list possono dover essere un elenco di identificatori di algoritmi validi (vedere Sezione 6 sotto), o un elenco di tag di lingua [RFC3066]. L'ordine dei nomi in una name-list può essere o meno significativo. Ancora una volta, questo dipende dal contesto in cui viene utilizzata la lista. I caratteri null terminali NON DEVONO essere utilizzati, né per i singoli nomi, né per la lista nel suo insieme.
Esempi:
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