Каждое сообщение протокола Handshake содержит специальный заголовок, состоящий из 4 байтов. Первый байт содержит код типа сообщения, три следующих байта - длину сообщения:
enum {
hello_request (0), client_hello (1), server_hello (2),
certificate (11), certificate_request (13),
server_hello_done (14), certificate_verify (15),
client_key_exchange (16), fnished (20), (255)
} HandshakeType;
struct {
HandshakeType msg_type; /* handshake type */
uint24 length; /* bytes in message */
select (HandshakeType) {
case hello_request: HelloRequest;
case client_hello: ClientHello;
case server_hello: ServerHello;
case certificate: Certificate;
case certificate_request: CertificateRequest;
case server_hello_done: ServerHelloDone;
case certificate_verify: CertificateVerify;
case client_key_exchange: ClientKeyExchange;
case finished: Finished;
} body;
} Handshake;
Далее по тексту установлено, что под терминами "сообщение HelloRequest", "сообщение Client-Hello", …, "сообщение Finished" подразумевается набор данных, определяемых структурой Handshake (в частности, имеющий поля Handshake.msg_type и Handshake.length), описанной выше, для которых поле Handshake.msg_type содержит значения hello_request (0), client_hello (1), …, finished (20) соответственно.
В настоящих рекомендациях определено, что строки HelloRequest, ClientHello, …, Finished являются байтовыми представлениями сообщений HelloRequest, ClientHello, …, Finished соответственно (см. 3.2).