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