Cryptography Reference
In-Depth Information
write_buffer = append_buffer( write_buffer,
&package.version_minor, 1 );
network_number = htons( package.cipher_specs_length * 3 );
write_buffer = append_buffer( write_buffer,
( void * ) &network_number, 2 );
network_number = htons( package.session_id_length );
write_buffer = append_buffer( write_buffer,
( void * ) &network_number, 2 );
network_number = htons( package.challenge_length );
write_buffer = append_buffer( write_buffer,
( void * ) &network_number, 2 );
write_buffer = append_buffer( write_buffer, package.cipher_specs,
package.cipher_specs_length * 3 );
write_buffer = append_buffer( write_buffer, package.session_id,
package.session_id_length );
write_buffer = append_buffer( write_buffer, package.challenge,
package.challenge_length );
status = send_handshake_message( connection, SSL_MT_CLIENT_HELLO,
send_buffer, buf_len, parameters );
free( package.cipher_specs );
free( package.session_id );
free( package.challenge );
free( send_buffer );
return status;
}
This code should be straightforward to understand. First, fi ll out a ClientHello
structure and then “fl atten” it into a linear memory array with the byte order-
ing corrected. Then invoke send_handshake_message with a pointer to the
fl attened buffer.
Listing C-12 shows the send_handshake_message call. You pass in fi ve
parameters — the socket id ( connection ), the message type (client hello in
this case), the buffer and its length, and fi nally the SSL parameters array
you're building. This function is actually a small one.
Listing C-12: “ssl.c” send_handshake_message
static int send_handshake_message( int connection,
unsigned char message_type,
unsigned char *data,
int data_len,
SSLParameters *parameters )
{
unsigned char *buffer;
int buf_len;
buf_len = data_len + 1;
 
Search WWH ::




Custom Search