Type-length-value
TLV (Type-length-value) je obecný název pro formát dat, která jsou složena z řady bloků:
- Značka (anglicky type nebo tag) – číslo popisující typ dat v daném bloku; například „textový řetězec“
- Délka (anglicky length) – číslo udávající délku dat v daném bloku; například „4 byte“
- Data daného bloku; například „Ahoj“
Struktury TLV obvykle používají binární formát dat, často jsou zaměřené na optimalizaci objemu a rychlosti zpracování dat. Používají se také pro přenos nekonečného proudu dat, například v telekomunikacích.
Známým příkladem použití struktury typu TLV je standard ASN.1.
BER-TLV
Formátu BER-TLV se používá v kryptografii, například pro ukládání datových objektů na čipových kartičkách. Je popsán v ISO/IEC 7816, část 4, kapitola 5.2 (datové objekty). Některé značky popisuje také ISO/IEC 7816.
Struktura:
- libovolněkrát trojice: značka - délka dat - data
- v datovém objektu na začátku/na konci/mezi jednotlivými TLV bloky mohou být bajty s hodnotou 0x00 (padding, vata)
- značka: přímo binární hodnota značky
- jednobajtová značka: A, kde A & 0x1F != 0x1F (pět nejméně významných bitů nesmí být pět jedniček)
- dvoubajtová značka: A C, kde A & 0x1F == 0x1F a C < 0x80
- tříbajtová značka: A B C, kde A & 0x1F == 0x1F, B >= 0x80 a C < 0x80
- délka
- jednobajtová délka: A, kde A < 0x80; A je délka dat (binární číslo)
- dvoubajtová délka: 0x81 A; A je délka dat (binární číslo)
- tříbajtová délka: 0x82 A B; AB je délka dat (binární číslo)
- čtyřbajtová délka: 0x83 A B C; ABC je délka dat (binární číslo)
- pětibajtová délka: 0x84 A B C D; ABCD je délka dat (binární číslo)
- data, například:
- textový řetězec v kódování v utf-8
- číslo - číslo binárně (4 byte)
- datum: YYYYMMDD, kde YYYY je rok, MM je měsíc a DD je den v měsíci (textově)
- vložená BER-TLV hodnota
- a další (teoreticky cokoli)
Formát značky:
- délka značky může být 1 až 3 bajty, vyšší hodnoty jsou rezervovány pro budoucí použití
- hodnota značky nesmí být 0x00
- 8. a 7. bit je nastaven na hodnotu 00 - univerzální třída značky; hodnota značky není definována v ISO/IEC 7816, význam značky nezávisí na kontextu (na pozici v datovém objektu)
- 8. a 7. bit je nastaven na hodnotu 01 - aplikační třída značky; hodnota značky musí být definována v ISO/IEC 7816, část 6
- 8. a 7. bit je nastaven na hodnotu 10 - třída značky závislá na kontextu; hodnota značky je definována v ISO/IEC 7816
- 8. a 7. bit je nastaven na hodnotu 11 - soukromá třída značky; hodnota značky není definována v ISO/IEC 7816
- 6. bit je nastaven na 1 - data v daném TLV bloku jsou strukturovaná (tj. jsou ve formátu BER-TLV)
- 6. bit je nastaven na 0 - data v daném TLV bloku nejsou strukturovaná (tj. nejsou ve formátu BER-TLV)
- 5. až 1. bit jsou nastaveny na 11111 (0x1F) - délka značky je delší než 1 byte
- druhý byte nesmí nabývat hodnot 0x80 a 0x00 až 0x1E
- u další bytů značky s výjimkou posledního je nastaven 8. bit na hodnotu 1
- u posledního bytů značky je nastaven 8. bit na hodnotu 0
- 5. až 1. bit jsou nastaveny na jinou hodnotu než 11111 - délka značky je 1 byte
Odkazy
Související články
Externí odkazy
- tlve Obecný TLV parser