ContentType type; ProtocolVersion version; uint16
| 
 enum { change_cipher_spec(20), alert(21), handshake(22), application_data(23), (255) } ContentType; struct { ContentType type; ProtocolVersion version; uint16 length; opaque fragment [TLSPlaintext.length]; } TLSPlaintext;  | 
| Листинг 10.1. Начальная структура блока протокола передачи записей. | 
| Закрыть окно | 
| 
struct { ContentType type; /* Тот же, что и TLSPlaintext.type */ ProtocolVersion version; /* Та же, что и TLSPlaintext.version */ uint16 length; opaque fragment [TLSCompressed.length]; } TLSCompressed;  | 
| Листинг 10.2. Структура блока протокола передачи записей после сжатия. | 
| Закрыть окно | 
| 
key_block = PRF (SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random + SecurityParameters.client_random); /* PRF - псевдослучайная функция */ /* "+" обозначает операцию конкатенации */  | 
| Листинг 10.3. Вычисление ключевого блока в протоколе передачи записей. | 
| Закрыть окно | 
| 
client_write_MAC_secret [SecurityParameters.hash_size] server_write_MAC_secret [SecurityParameters.hash_size] client_write_key [SecurityParameters.key_material_length] server_write_key [SecurityParameters.key_material_length] client_write_IV [SecurityParameters.IV_size] server_write_IV [SecurityParameters.IV_size] /* MAC - Message Authentication Code, */ /* аутентификационный код сообщения */ /* IV - Initialization Vector, */ /* начальный вектор */  | 
| Листинг 10.4. Параметры криптографических операций протокола передачи записей. | 
| Закрыть окно | 
| HMAC_hash (MAC_write_secret, seq_num + TLSCompressed.type + TLSCompressed.version + TLSCompressed.length + TLSCompressed.fragment)); | 
| Листинг 10.5. Вычисление имитовставки в протоколе передачи записей. | 
| Закрыть окно | 
| 
stream-ciphered struct { opaque content [TLSCompressed.length]; opaque MAC [CipherSpec.hash_size]; } GenericStreamCipher; block-ciphered struct { opaque content [TLSCompressed.length]; opaque MAC [CipherSpec.hash_size]; uint8 padding [GenericBlockCipher.padding_length]; uint8 padding_length; } GenericBlockCipher; struct { ContentType type; ProtocolVersion version; uint16 length; select (CipherSpec.cipher_type) { case stream: GenericStreamCipher; case block: GenericBlockCipher; } fragment; } TLSCiphertext;  | 
| Листинг 10.6. Шифрование блока вместе с имитовставкой в протоколе передачи записей. | 
| Закрыть окно | 
| 
struct { uint32 gmt_unix_time; opaque random_bytes [28]; } Random; struct { ProtocolVersion client_version; Random random; SessionID session_id; CipherSuite cipher_suites<2..2^16-1>; CompressionMethod compression_methods<1..2^8-1>; } ClientHello;  | 
| Листинг 10.7. Структура приветственного сообщения клиента в протоколе установления соединений. | 
| Закрыть окно | 
| struct { ProtocolVersion server_version; Random random; SessionID session_id; CipherSuite cipher_suite; CompressionMethod compression_method; } ServerHello; | 
| Листинг 10.8. Структура приветственного сообщения сервера в протоколе установления соединенийСтруктура приветственного сообщения клиента в протоколе установления соединений. | 
| Закрыть окно | 
| 
struct { opaque verify_data[12]; } Finished; Finished.verify_data = PRF (master_secret, finished_label, MD5(handshake_messages) + SHA-1(handshake_messages)) [0..11]; /* Хэшируются все сообщения, участвовавшие в */ /* установлении соединения */ /* Значениями параметра "finished_label" /* служат, соответственно, цепочка символов */ /*" client finished" на стороне клиента */ /* и "server finished" на стороне сервера. */  | 
| Листинг 10.9. Структура сообщения о завершении формирования сеанса в протоколе установления соединений. | 
| Закрыть окно | 
| master_secret = PRF (pre_master_secret, "master secret", ClientHello.random + ServerHello.random) [0..47]; | 
| Листинг 10. 10. Вычисление мастер-секрета. | 
| Закрыть окно |