Cryptography Reference
In-Depth Information
…
ProtectionParameters active_recv_parameters;
public_key_info server_public_key;
dh_key server_dh_key;
…
}
TLSParameters;
Pass this into
parse_x509_chain
when parsing the certifi cate message as
shown in Listing 8-23.
Listing 8-23:
“tls.c” receive_tls_message with DSA key support
static int receive_tls_msg( int connection,
char *buffer,
int bufsz,
TLSParameters *parameters )
{
...
case certificate:
read_pos = parse_x509_chain( read_pos, handshake.length,
¶meters->
server_public_key
);
Modify
send_client_key_exchange
to recognize this new level of indirec-
tion as in Listing 8-24.
Listing 8-24:
“tls.c” send_client_key_exchange
static int send_client_key_exchange( int connection, TLSParameters *parameters )
{
…
key_exchange_message_len = rsa_key_exchange(
¶meters->
server_public_key.rsa_public_key,
premaster_secret, &key_exchange_message );
Because
parse_x509_chain
has to update the
server_public_key
structure
rather than just an RSA key structure, make the appropriate modifi cations as
shown in Listing 8-25.
Listing 8-25:
“x509.c” parse_x509_chain with DSA support
char *parse_x509_chain( unsigned char *buffer,
int pdu_length,
public_key_info *server_public_key )
{
…
if ( !pos++ )
{
// Copy public key information into target on first cert only
server_public_key->algorithm =
certificate.tbsCertificate.subjectPublicKeyInfo.algorithm;
(Continued)
Search WWH ::
Custom Search