Zum Hauptinhalt springen

5. Data Type Representations Used in the SSH Protocols (Datentypdarstellungen in den SSH-Protokollen)

5. Data Type Representations Used in the SSH Protocols (Datentypdarstellungen in den SSH-Protokollen)

byte

Ein Byte repräsentiert einen beliebigen 8-Bit-Wert (Oktett). Daten mit fester Länge werden manchmal als Array von Bytes dargestellt, geschrieben als byte[n], wobei n die Anzahl der Bytes im Array ist.

boolean

Ein boolescher Wert wird als einzelnes Byte gespeichert. Der Wert 0 repräsentiert FALSE, und der Wert 1 repräsentiert TRUE. Alle Werte ungleich Null MÜSSEN als TRUE interpretiert werden; Anwendungen DÜRFEN jedoch NICHT andere Werte als 0 und 1 speichern.

uint32

Repräsentiert eine 32-Bit-Ganzzahl ohne Vorzeichen. Gespeichert als vier Bytes in der Reihenfolge abnehmender Signifikanz (Netzwerk-Byte-Reihenfolge). Zum Beispiel: der Wert 699921578 (0x29b7f4aa) wird als 29 b7 f4 aa gespeichert.

uint64

Repräsentiert eine 64-Bit-Ganzzahl ohne Vorzeichen. Gespeichert als acht Bytes in der Reihenfolge abnehmender Signifikanz (Netzwerk-Byte-Reihenfolge).

string

Binäre Zeichenkette beliebiger Länge. Zeichenketten dürfen beliebige Binärdaten enthalten, einschließlich Null-Zeichen und 8-Bit-Zeichen. Sie werden als uint32 gespeichert, das ihre Länge (Anzahl der folgenden Bytes) und null (= leere Zeichenkette) oder mehr Bytes enthält, die den Wert der Zeichenkette darstellen. Abschließende Null-Zeichen werden nicht verwendet.

Zeichenketten werden auch zum Speichern von Text verwendet. In diesem Fall wird US-ASCII für interne Namen verwendet, und ISO-10646 UTF-8 für Text, der dem Benutzer angezeigt werden könnte. Das abschließende Null-Zeichen SOLLTE normalerweise NICHT in der Zeichenkette gespeichert werden. Zum Beispiel: die US-ASCII-Zeichenkette "testing" wird als 00 00 00 07 t e s t i n g dargestellt. Das UTF-8-Mapping ändert die Kodierung von US-ASCII-Zeichen nicht.

mpint

Repräsentiert Ganzzahlen mit mehrfacher Genauigkeit im Zweierkomplement-Format, gespeichert als Zeichenkette, 8 Bits pro Byte, MSB zuerst. Negative Zahlen haben den Wert 1 als das signifikanteste Bit des ersten Bytes der Datenpartition. Wenn das signifikanteste Bit für eine positive Zahl gesetzt wäre, MUSS der Zahl ein Null-Byte vorangestellt werden. Unnötige führende Bytes mit dem Wert 0 oder 255 DÜRFEN NICHT enthalten sein. Der Wert Null MUSS als Zeichenkette mit null Bytes an Daten gespeichert werden.

Durch Konvention SOLLTE eine Zahl, die in modularen Berechnungen in Z_n verwendet wird, im Bereich 0 <= x < n dargestellt werden.

Beispiele:

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

Eine Zeichenkette, die eine durch Kommas getrennte Liste von Namen enthält. Eine name-list wird als uint32 dargestellt, das ihre Länge (Anzahl der folgenden Bytes) enthält, gefolgt von einer durch Kommas getrennten Liste von null oder mehr Namen. Ein Name MUSS eine von Null verschiedene Länge haben, und er DARF KEIN Komma (",") enthalten. Da dies eine Liste von Namen ist, sind alle enthaltenen Elemente Namen und MÜSSEN in US-ASCII sein. Der Kontext kann zusätzliche Einschränkungen für die Namen auferlegen. Zum Beispiel müssen die Namen in einer name-list eine Liste gültiger Algorithmusidentifikatoren sein (siehe Abschnitt 6 unten) oder eine Liste von [RFC3066] Sprach-Tags. Die Reihenfolge der Namen in einer name-list kann signifikant sein oder nicht. Auch dies hängt vom Kontext ab, in dem die Liste verwendet wird. Abschließende Null-Zeichen DÜRFEN NICHT verwendet werden, weder für die einzelnen Namen noch für die Liste als Ganzes.

Beispiele:

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