Darstellungssprache
| TLS verwendet besondere Darstellungssprache,
| orientiert sich an
| C bzw. |
| XDR (External
Data Representation Format, eine Datenaustauschsprache von Sun Microsystems) . |
|
|
Basistypen
| Optionale Komponenten bei Spezifikation in doppelten eckigen
Klammern ([[...]]) |
| Kommentare
wie in C (/*...*/) |
| einzelnes
uninterpretiertes Byte ist vom Typ opaque. |
| Mehrfache
Bytes werden "big-endian"
dargestellt. |
value = (byte[0] << 8*(n-1)) | (byte[1]
<< 8*(n-2)) | ... | byte[n-1];
| Felder mit Namen T'
| festen Anzahl von Elementen vom
Typ T |
| wie in C notiert |
| Anzahl n gibt die Anzahl der Oktette an (nicht Anzahl der Elemente vom Typ T) |
|
T T'[n];
Beispiel
opaque Datum[3]; /* three uninterpreted bytes */
Datum Data[9]; /* 3 consecutive 3 byte
vectors */
| Felder mit Namen T' mit variabler Anzahl von Elementen
vom Typ T
| Angabe eines zulässigen Bereichs |
|
T T'<floor..ceiling>;
Beispiel
opaque mandatory<300..400>/*length
field is 2 bytes, cannot be empty*/
uint16 longer<0..800>;
/* zero to 400 16-bit unsigned integers */
| übertragen von Feldern
| mit fester Anzahl von Elementen ohne Angabe der Länge |
| mit variabler Anzahl von Elementen mit Angabe dieser Länge kodiert |
|
| numerische Datentypen |
uint8 uint16[2];
uint8 uint24[3];
uint8 uint32[4];
uint8 uint64[8];
| Aufzählungstypen
| ähnlich wie in C |
| Ausnahme,
| maximaler Wert für Anzahl von Bytes der internen Darstellung |
| durch explizite Angabe (ohne Tag) erzwungen |
| interne Darstellung kann implizit sein. |
|
|
enum { e1(v1), e2(v2), ... , en(vn) [[, (n)]] } Te;
Beispiel
enum { red(3), blue(5), white(7) } Color;
enum { sweet(1), sour(2), bitter(4), (32000) } Taste;
enum { low, medium, high } Amount;
Color color = Color.blue; /* overspecified, legal */
Color color = blue; /* correct, type implicit */
| Konstruierte Typen werden wie in C definiert und können verschachtelt
werden. |
struct { T1 f1; T2 f2; ... Tn fn; } [[T]];
Beispiel
T.f2 /* referiert das zweite Feld */
| Varianten
| innerhalb von Strukturen definierbar |
| müssen durch eines Aufzählungstyps dynamisch festgelegt werden |
|
struct { T1 f1;
T2 f2;
select (E) {
case e1: Te1;
case e2: Te2;
....
case en: Ten;
} [[fv]];
} [[Tv]];
Beispiel
enum { apple, orange } VariantTag;
struct { uint16 number; opaque
string<0..10>; /* variable length */
} V1;
struct { uint32 number; opaque
string[10]; /* fixed length */
} V2;
struct { select
(VariantTag) { /* value of selector is implicit */
case apple: V1; /* VariantBody, tag = apple
*/
case orange: V2; /* VariantBody, tag = orange */
} variant_body; /*
optional label on
variant */
} VariantRecord;
orange VariantRecord InstanzName;
| Bei der Initialisierung können einem Objekt Anfangswerte zugewiesen werden. |
Beispiel
struct { uint8 f1; uint8 f2;
} Example1;
Example1 ex1 = {1, 4}; /* assigns f1 = 1, f2 = 4 */
Kryptographische Attribute
| Es gibt vier kryptographische Attribute, |
- digitally-signed,
- stream-ciphered,
- block-ciphered,
- public-key-encrypted.
| kryptographischer Prozess durch
Schlüsselwort spezifiziert
| der jeweiligen Typspezifikation des Feldes
vorangestellt |
| kryptographische Schlüssel implizit dem
jeweiligen Sitzungsstatus entnommen. |
|
| Für digitale Signatur einer Zeichenfolge von bis zu 216
Bytes wird Einweg-Hashfunktion verwendet. |
| RSA-Signatur
| nach einem RSA-Laboratories-Standard |
|
SHA-Hash und MD5-Hash konkateniert (286 Bits) |
| mit privatem
Schlüssel des Unterzeichners signiert. |
|
| Digital Signature Standard (DSS)
| 20 Bytes des SHA-Hashes
digital signiert. |
|
| Stromverschlüsselung
| Klartext mit Ausgabe eines
kryptografisch sicheren Pseudozufallszahlengenerator verknüpft. |
|
| Blockchiffre-Verschlüsselung
| ausschließlich im CBC-Modus |
|
| Public-Key-Verschlüsselung
| verschlüsselt Blöcke bis zu 216
Bytes. |
|
| RSA-verschlüsselte Werte
| mit Verfahrern PKCS #1, Blocktyp 2
erzeugt. |
|
|