Cryptography Reference
In-Depth Information
form instead. To use this parsing routine to see the contents of a PEM-encoded
fi le, you can call the base64decode routine from Chapter 1 to convert PEM to
DER as in Listing 5-9.
Listing 5-9: “asn1.c” pem_decode
int pem_decode( unsigned char *pem_buffer, unsigned char *der_buffer )
{
unsigned char *pem_buffer_end, *pem_buffer_begin;
unsigned char *bufptr = der_buffer;
int buffer_size;
// Skip first line, which is always “-----BEGIN CERTIFICATE-----”.
if ( strncmp( pem_buffer, “-----BEGIN”, 10 ) )
{
fprintf( stderr,
“This does not appear to be a PEM-encoded certificate file\n” );
exit( 0 );
}
pem_buffer_begin = pem_buffer;
pem_buffer= pem_buffer_end = strchr( pem_buffer, '\n' ) + 1;
while ( strncmp( pem_buffer, “-----END”, 8 ) )
{
// Find end of line
pem_buffer_end = strchr( pem_buffer, '\n' );
// Decode one line out of pem_buffer into buffer
bufptr += base64_decode( pem_buffer,
( pem_buffer_end - pem_buffer ) -
( ( *( pem_buffer_end - 1 ) == '\r' ) ? 1 : 0 ),
bufptr );
pem_buffer = pem_buffer_end + 1;
}
buffer_size = bufptr - der_buffer;
return buffer_size;
}
Change the test main routine to accept either PEM or DER form:
if ( argc < 3 )
{
fprintf( stderr, “Usage: %s [-der|-pem] <certificate file>\n”, argv[ 0 ] );
exit( 0 );
}
if ( ( certificate_file = open( argv[ 2 ], O_RDONLY ) ) == -1 )
{
}
(Continued)
 
Search WWH ::




Custom Search