6.2.2. Сжатие и восстановление записи
Все записи сжаты с использованием алгоритма сжатия, определенным состоянием текущей сессии. Всегда имеется активный алгоритм сжатия; однако в исходный момент он определен как CompressionMethod.null. Алгоритм сжатия преобразует структуру TLSPlaintext в структуру TLSCompressed. Функции сжатия инициализируются информацией по умолчанию при переходе соединения в активное состояние.
Должно использоваться сжатие без потерь, а длина содержимого не может стать больше чем 1024 байт. Если функция восстановления встречает фрагмент TLSCompressed.fragment, длина которого окажется больше 2^14 байт, она должна выдать уведомление о фатальной ошибке преобразования.
struct { ContentType type; /* same as TLSPlaintext.type */ ProtocolVersion version;/* same as TLSPlaintext.version */ uint16 length; opaque fragment[TLSCompressed.length]; } TLSCompressed;
- length
- Длина (в байтах) следующего TLSCompressed.fragment. Длина не должна превосходить 2^14 + 1024.
- Fragment
- Сжатая форма TLSPlaintext.fragment.
Операция CompressionMethod.null является идентификационной; ни одно из полей не изменено.
Функции декомпрессии (восстановления) отвечают за то, что внутренний буфер не будет переполнен при обработке сообщения.
6.2.3. Защита поля данных записи
Функции шифрования и MAC преобразуют структуру TLSCompressed в TLSCiphertext. Функции дешифрования выполняют обратную процедуру. MAC записи включает также номер по порядку, чтобы было можно детектировать лишние или повторные сообщения.
struct { ContentType type; ProtocolVersion version; uint16 length; select (CipherSpec.cipher_type) { case stream: GenericStreamCipher; case block: GenericBlockCipher; } fragment; } TLSCiphertext;
- type
- Поле тип идентично TLSCompressed.type.
- Version
- Поле версия идентично TLSCompressed.version.
- length
- Длина (в байтах) последующего TLSCiphertext.fragment. Длина не может превосходить 2^14 + 2048.
- Fragment
- Зашифрованная форма TLSCompressed.fragment, с MAC.