Cryptography Reference
In-Depth Information
{
printf( “X509 Certificate:\n” );
display_x509_certificate( &certificate );
// Assume it's a self-signed certificate and try to validate it that
switch ( certificate.algorithm )
{
case md5WithRSAEncryption:
case shaWithRSAEncryption:
if ( validate_certificate_rsa( &certificate,
&certificate.tbsCertificate.subjectPublicKeyInfo.rsa_public_key ) )
{
printf( “Certificate is a valid self-signed certificate.\n” );
}
else
{
printf( “Certificate is corrupt or not self-signed.\n” );
}
break;
}
}
else
{
printf( “error parsing certificate: %d\n”, error_code );
}
free_x509_certificate( &certificate );
free( buffer );
return 0;
}
#endif
This invokes the companion display_x509_certificate function in
Listing 5-28.
Listing 5-28: “x509.c” display_x509_certifi cate
static void output_x500_name( name *x500_name )
{
printf( “C=%s/ST=%s/L=%s/O=%s/OU=%s/CN=%s\n”,
( x500_name->idAtCountryName ? x500_name->idAtCountryName : “?” ),
( x500_name->idAtStateOrProvinceName ? x500_name->idAtStateOrProvinceName :
“?” ),
( x500_name->idAtLocalityName ? x500_name->idAtLocalityName : “?” ),
( x500_name->idAtOrganizationName ? x500_name->idAtOrganizationName : “?” ),
( x500_name->idAtOrganizationalUnitName ? x500_name-
>idAtOrganizationalUnitName : “?” ),
( x500_name->idAtCommonName ? x500_name->idAtCommonName : “?” ) );
}
static void print_huge( huge *h )
{
 
Search WWH ::




Custom Search