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,
&parameters-> 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(
&parameters-> 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