Cryptography Reference
In-Depth Information
signed_x509_certificate *parsed_certificate )
{
…
switch ( parsed_certificate->algorithm )
{
case md5WithRSAEncryption:
case shaWithRSAEncryption:
if ( parse_rsa_signature_value( parsed_certificate, signatureValue ) )
{
return 42;
}
break;
case shaWithDSA:
if ( parse_dsa_signature_value( parsed_certificate, signatureValue ) )
{
return 42;
}
…
switch ( parsed_certificate->algorithm )
{
case md5WithRSAEncryption:
new_md5_digest( &digest );
break;
case shaWithRSAEncryption:
case shaWithDSA:
new_sha1_digest( &digest );
break;
default:
break;
}
...
Note that the
parse_signature_value
routine is now named
parse_rsa_sig-
nature_value
. The new
parse_dsa_signature_value
shown in Listing 5-32 is
pretty much like the
parse_rsa_signature_value
routine except that it expects
two values.
Listing 5-32:
“x509.c” parse_dsa_signature_value
static int parse_dsa_signature_value( signed_x509_certificate *target,
struct asn1struct *source )
{
struct asn1struct dsa_signature;
if ( asn1parse( source->data + 1, source->length - 1, &dsa_signature ) )
{
fprintf( stderr, “Unable to parse ASN.1 DER-encoded signature.\n” );
return 1;
}
parse_huge( &target->dsa_signature_value.r, dsa_signature.children );
Search WWH ::
Custom Search