X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=apps%2Fasn1pars.c;h=f104ebc1f08ae27078c4a98b501dcfefd6b7e239;hp=a5e4bfcf5e8a54e26f664bd921304853f792223d;hb=8a208cba97b0d08cfc6f07bb2f0e0d1f305a0b13;hpb=ec577822f95a8bca0023c5c77cef1a4916822d4a diff --git a/apps/asn1pars.c b/apps/asn1pars.c index a5e4bfcf5e..f104ebc1f0 100644 --- a/apps/asn1pars.c +++ b/apps/asn1pars.c @@ -74,20 +74,22 @@ * -i - indent the details by depth * -offset - where in the file to start * -length - how many bytes to use - * -oid file - extra oid decription file + * -oid file - extra oid description file */ #undef PROG #define PROG asn1parse_main +int MAIN(int, char **); + int MAIN(int argc, char **argv) { int i,badops=0,offset=0,ret=1,j; unsigned int length=0; long num,tmplen; - BIO *in=NULL,*out=NULL,*b64=NULL; - int informat,indent=0; - char *infile=NULL,*str=NULL,*prog,*oidfile=NULL; + BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL; + int informat,indent=0, noout = 0; + char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL; unsigned char *tmpbuf; BUF_MEM *buf=NULL; STACK *osk=NULL; @@ -121,10 +123,16 @@ int MAIN(int argc, char **argv) if (--argc < 1) goto bad; infile= *(++argv); } + else if (strcmp(*argv,"-out") == 0) + { + if (--argc < 1) goto bad; + derfile= *(++argv); + } else if (strcmp(*argv,"-i") == 0) { indent=1; } + else if (strcmp(*argv,"-noout") == 0) noout = 1; else if (strcmp(*argv,"-oid") == 0) { if (--argc < 1) goto bad; @@ -163,13 +171,16 @@ bad: BIO_printf(bio_err,"where options are\n"); BIO_printf(bio_err," -inform arg input format - one of DER TXT PEM\n"); BIO_printf(bio_err," -in arg input file\n"); + BIO_printf(bio_err," -out arg output file\n"); + BIO_printf(bio_err," -noout arg don't produce any output\n"); BIO_printf(bio_err," -offset arg offset into file\n"); - BIO_printf(bio_err," -length arg lenth of section in file\n"); + BIO_printf(bio_err," -length arg length of section in file\n"); BIO_printf(bio_err," -i indent entries\n"); BIO_printf(bio_err," -oid file file of extra oid definitions\n"); BIO_printf(bio_err," -strparse offset\n"); BIO_printf(bio_err," a series of these can be used to 'dig' into multiple\n"); BIO_printf(bio_err," ASN1 blob wrappings\n"); + BIO_printf(bio_err," -out filename output DER encoding to file\n"); goto end; } @@ -206,6 +217,14 @@ bad: } } + if (derfile) { + if(!(derout = BIO_new_file(derfile, "wb"))) { + BIO_printf(bio_err,"problems opening %s\n",derfile); + ERR_print_errors(bio_err); + goto end; + } + } + if ((buf=BUF_MEM_new()) == NULL) goto end; if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */ @@ -239,6 +258,7 @@ bad: tmplen=num; for (i=0; i