Loading apps/asn1pars.c +39 −6 Original line number Diff line number Diff line Loading @@ -20,12 +20,14 @@ #include <openssl/evp.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/asn1t.h> typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_IN, OPT_OUT, OPT_INDENT, OPT_NOOUT, OPT_OID, OPT_OFFSET, OPT_LENGTH, OPT_DUMP, OPT_DLIMIT, OPT_STRPARSE, OPT_GENSTR, OPT_GENCONF, OPT_STRICTPEM OPT_STRPARSE, OPT_GENSTR, OPT_GENCONF, OPT_STRICTPEM, OPT_ITEM } OPTION_CHOICE; OPTIONS asn1parse_options[] = { Loading @@ -49,6 +51,7 @@ OPTIONS asn1parse_options[] = { {OPT_MORE_STR, 0, 0, "(-inform will be ignored)"}, {"strictpem", OPT_STRICTPEM, 0, "do not attempt base64 decode outside PEM markers"}, {"item", OPT_ITEM, 's', "item to parse and print"}, {NULL} }; Loading @@ -71,6 +74,7 @@ int asn1parse_main(int argc, char **argv) unsigned char *tmpbuf; unsigned int length = 0; OPTION_CHOICE o; const ASN1_ITEM *it = NULL; prog = opt_init(argc, argv, asn1parse_options); Loading Loading @@ -134,6 +138,22 @@ int asn1parse_main(int argc, char **argv) strictpem = 1; informat = FORMAT_PEM; break; case OPT_ITEM: it = ASN1_ITEM_lookup(opt_arg()); if (it == NULL) { size_t tmp; BIO_printf(bio_err, "Unknown item name %s\n", opt_arg()); BIO_puts(bio_err, "Supported types:\n"); for (tmp = 0;; tmp++) { it = ASN1_ITEM_get(tmp); if (it == NULL) break; BIO_printf(bio_err, " %s\n", it->sname); } goto end; } break; } } argc = opt_num_rest(); Loading Loading @@ -260,12 +280,25 @@ int asn1parse_main(int argc, char **argv) goto end; } } if (!noout && !ASN1_parse_dump(bio_out, &(str[offset]), length, indent, dump)) { if (!noout) { const unsigned char *p = str + offset; if (it != NULL) { ASN1_VALUE *value = ASN1_item_d2i(NULL, &p, length, it); if (value == NULL) { BIO_printf(bio_err, "Error parsing item %s\n", it->sname); ERR_print_errors(bio_err); goto end; } ASN1_item_print(bio_out, value, 0, it, NULL); ASN1_item_free(value, it); } else { if (!ASN1_parse_dump(bio_out, p, length, indent, dump)) { ERR_print_errors(bio_err); goto end; } } } ret = 0; end: BIO_free(derout); Loading doc/apps/asn1parse.pod +6 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ B<openssl> B<asn1parse> [B<-genstr string>] [B<-genconf file>] [B<-strictpem>] [B<-item name>] =head1 DESCRIPTION Loading Loading @@ -102,6 +103,11 @@ processed whether it has the normal PEM BEGIN and END markers or not. This option will ignore any data prior to the start of the BEGIN marker, or after an END marker in a PEM file. =item B<-item name> attempt to decode and print the data as B<ASN1_ITEM name>. This can be used to print out the fields of any supported ASN.1 structure if the type is known. =back =head2 Output Loading Loading
apps/asn1pars.c +39 −6 Original line number Diff line number Diff line Loading @@ -20,12 +20,14 @@ #include <openssl/evp.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/asn1t.h> typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_IN, OPT_OUT, OPT_INDENT, OPT_NOOUT, OPT_OID, OPT_OFFSET, OPT_LENGTH, OPT_DUMP, OPT_DLIMIT, OPT_STRPARSE, OPT_GENSTR, OPT_GENCONF, OPT_STRICTPEM OPT_STRPARSE, OPT_GENSTR, OPT_GENCONF, OPT_STRICTPEM, OPT_ITEM } OPTION_CHOICE; OPTIONS asn1parse_options[] = { Loading @@ -49,6 +51,7 @@ OPTIONS asn1parse_options[] = { {OPT_MORE_STR, 0, 0, "(-inform will be ignored)"}, {"strictpem", OPT_STRICTPEM, 0, "do not attempt base64 decode outside PEM markers"}, {"item", OPT_ITEM, 's', "item to parse and print"}, {NULL} }; Loading @@ -71,6 +74,7 @@ int asn1parse_main(int argc, char **argv) unsigned char *tmpbuf; unsigned int length = 0; OPTION_CHOICE o; const ASN1_ITEM *it = NULL; prog = opt_init(argc, argv, asn1parse_options); Loading Loading @@ -134,6 +138,22 @@ int asn1parse_main(int argc, char **argv) strictpem = 1; informat = FORMAT_PEM; break; case OPT_ITEM: it = ASN1_ITEM_lookup(opt_arg()); if (it == NULL) { size_t tmp; BIO_printf(bio_err, "Unknown item name %s\n", opt_arg()); BIO_puts(bio_err, "Supported types:\n"); for (tmp = 0;; tmp++) { it = ASN1_ITEM_get(tmp); if (it == NULL) break; BIO_printf(bio_err, " %s\n", it->sname); } goto end; } break; } } argc = opt_num_rest(); Loading Loading @@ -260,12 +280,25 @@ int asn1parse_main(int argc, char **argv) goto end; } } if (!noout && !ASN1_parse_dump(bio_out, &(str[offset]), length, indent, dump)) { if (!noout) { const unsigned char *p = str + offset; if (it != NULL) { ASN1_VALUE *value = ASN1_item_d2i(NULL, &p, length, it); if (value == NULL) { BIO_printf(bio_err, "Error parsing item %s\n", it->sname); ERR_print_errors(bio_err); goto end; } ASN1_item_print(bio_out, value, 0, it, NULL); ASN1_item_free(value, it); } else { if (!ASN1_parse_dump(bio_out, p, length, indent, dump)) { ERR_print_errors(bio_err); goto end; } } } ret = 0; end: BIO_free(derout); Loading
doc/apps/asn1parse.pod +6 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ B<openssl> B<asn1parse> [B<-genstr string>] [B<-genconf file>] [B<-strictpem>] [B<-item name>] =head1 DESCRIPTION Loading Loading @@ -102,6 +103,11 @@ processed whether it has the normal PEM BEGIN and END markers or not. This option will ignore any data prior to the start of the BEGIN marker, or after an END marker in a PEM file. =item B<-item name> attempt to decode and print the data as B<ASN1_ITEM name>. This can be used to print out the fields of any supported ASN.1 structure if the type is known. =back =head2 Output Loading