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.