Cryptography Reference
In-Depth Information
Listing C-16: “ssl.c” parse_server_error
static int parse_server_error( SSLParameters *parameters,
unsigned char *buffer )
{
unsigned short error_code;
memcpy( &error_code, buffer, sizeof( unsigned short ) );
error_code = ntohs( error_code );
switch ( error_code )
{
case SSL_PE_NO_CIPHER:
fprintf( stderr, “No common cipher.\n” );
break;
default:
fprintf( stderr, “Unknown or unexpected error %d.\n”,
error_code );
break;
}
return error_code;
}
Also notice that this routine only processes one type of error code, but there
are three others spelled out in the specifi cation: no certifi cate, bad certifi cate, and
unsupported certifi cate. The server won't send any of these to the client — at
least not in this implementation — so don't bother recognizing them.
The server hello message is accepted and parsed by the parse_server_hello
function in Listing C-17.
Listing C-17: “ssl.c” parse_server_hello
static int parse_server_hello( SSLParameters *parameters,
unsigned char *buffer )
{
int i, j;
int status = 0;
ServerHello package;
buffer = read_buffer( &package.session_id_hit, buffer, 1 );
buffer = read_buffer( &package.certificate_type, buffer, 1 );
buffer = read_buffer( &package.server_version_major, buffer, 1 );
buffer = read_buffer( &package.server_version_minor, buffer, 1 );
buffer = read_buffer( ( void * ) &package.certificate_length,
buffer, 2 );
package.certificate_length = ntohs( package.certificate_length );
buffer = read_buffer( ( void * ) &package.cipher_specs_length,
buffer, 2 );
(Continued)
Search WWH ::




Custom Search