void disp_cert(char* cert_file, int pem) { int certificate_file; struct stat certificate_file_stat; char *buffer, *bufptr; int buffer_size; int bytes_read; int error_code; signed_x509_certificate certificate; if ((certificate_file = open(cert_file, "rb")) == -1) { perror("Unable to open certificate file"); exit(3); } // Slurp the whole thing into memory if (fstat(certificate_file, &certificate_file_stat)) { perror( "Unable to stat certificate file" ); exit(4); } buffer_size = certificate_file_stat.st_size; buffer = (char*) malloc(buffer_size); if (!buffer) { perror("Not enough memory"); exit(5); } bufptr = buffer; while ((bytes_read = read(certificate_file, (void*) buffer, buffer_size))) { bufptr += bytes_read; } if (pem) { // XXX this overallocates a bit, since it sets aside space for markers, etc. unsigned char *pem_buffer = buffer; buffer = (unsigned char *) malloc(buffer_size); buffer_size = pem_decode(pem_buffer, buffer); free(pem_buffer); } if (pem) { // XXX this overallocates a bit, since it sets aside space for markers, etc. unsigned char *pem_buffer = buffer; buffer = (unsigned char *) malloc(buffer_size); buffer_size = pem_decode(pem_buffer, buffer); free(pem_buffer); } // now parse it init_x509_certificate(&certificate); if (!(error_code = parse_x509_certificate(buffer, buffer_size, &certificate))) { printf("X509 Certificate:\n"); display_x509_certificate(&certificate); } }
int main( int argc, char *argv[ ] ) { rsa_key privkey; unsigned char *buffer; int buffer_length; if ( argc < 3 ) { fprintf( stderr, "Usage: %s [-pem|-der] <rsa private key file> [password]\n", argv[ 0 ] ); exit( 0 ); } if ( !( buffer = load_file_into_memory( argv[ 2 ], &buffer_length ) ) ) { perror( "Unable to load file" ); exit( 1 ); } if ( !strcmp( argv[ 1 ], "-pem" ) ) { // XXX this overallocates a bit, since it sets aside space for markers, etc. unsigned char *pem_buffer = buffer; buffer = (unsigned char * ) malloc( buffer_length ); buffer_length = pem_decode( pem_buffer, buffer ); free( pem_buffer ); } if ( argc == 3 ) { parse_private_key( &privkey, buffer, buffer_length ); } else { parse_pkcs8_private_key( &privkey, buffer, buffer_length, argv[ 3] ); } printf( "Modulus:" ); show_hex( privkey.modulus->rep, privkey.modulus->size ); printf( "Private Exponent:" ); show_hex( privkey.exponent->rep, privkey.exponent->size ); free( buffer ); return 0; }
int main( int argc, char *argv[ ] ) { int certificate_file; struct stat certificate_file_stat; unsigned char *buffer, *bufptr; int buffer_size; int bytes_read; struct asn1struct certificate; 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 ) { perror( "Unable to open certificate file" ); return 1; } // Slurp the whole thing into memory if ( fstat( certificate_file, &certificate_file_stat ) ) { perror( "Unable to stat certificate file" ); return 2; } buffer_size = certificate_file_stat.st_size; buffer = ( char * ) malloc( buffer_size ); if ( !buffer ) { perror( "Not enough memory" ); return 3; } bufptr = buffer; while ( bytes_read = read( certificate_file, ( void * ) buffer, certificate_file_stat.st_size ) ) { bufptr += bytes_read; } if ( !( strcmp( argv[ 1 ], "-pem" ) ) ) { // XXX this overallocates a bit, since it sets aside space for markers, etc. unsigned char *pem_buffer = buffer; buffer = (unsigned char * ) malloc( buffer_size ); buffer_size = pem_decode( pem_buffer, buffer ); free( pem_buffer ); } asn1parse( buffer, buffer_size, &certificate ); asn1show( 0, &certificate ); asn1free( &certificate ); return 0; }