Loading apps/asn1pars.c +44 −2 Original line number Diff line number Diff line Loading @@ -80,6 +80,9 @@ #undef PROG #define PROG asn1parse_main /* Minimum buffer size to be used */ #define MIN_BUFFER 256 int MAIN(int, char **); static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf); Loading @@ -90,7 +93,7 @@ int MAIN(int argc, char **argv) unsigned int length=0; long num,tmplen; BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL; int informat,indent=0, noout = 0, dump = 0; int informat,indent=0, noout = 0, dump = 0, strictpem = 0; char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL; char *genstr=NULL, *genconf=NULL; unsigned char *tmpbuf; Loading Loading @@ -181,6 +184,11 @@ int MAIN(int argc, char **argv) if (--argc < 1) goto bad; genconf= *(++argv); } else if (strcmp(*argv,"-strictpem") == 0) { strictpem = 1; informat = FORMAT_PEM; } else { BIO_printf(bio_err,"unknown option %s\n",*argv); Loading Loading @@ -211,6 +219,8 @@ bad: BIO_printf(bio_err," ASN1 blob wrappings\n"); BIO_printf(bio_err," -genstr str string to generate ASN1 structure from\n"); BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n"); BIO_printf(bio_err," -strictpem do not attempt base64 decode outside PEM markers (-inform \n"); BIO_printf(bio_err," will be ignored)\n"); goto end; } Loading Loading @@ -262,7 +272,7 @@ bad: } if ((buf=BUF_MEM_new()) == NULL) goto end; if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */ if (!BUF_MEM_grow(buf,(BUFSIZ*8)<MIN_BUFFER?MIN_BUFFER:(BUFSIZ*8))) goto end; /* Pre-allocate :-) */ if (genstr || genconf) { Loading @@ -281,6 +291,38 @@ bad: { BIO *tmp; if(strictpem) { for (;;) { /* Read a line */ i=BIO_gets(in,buf->data,MIN_BUFFER-1); if (i <= 0) { BIO_printf(bio_err, "Error: Cannot find start line\n"); goto end; } /* Strip trailing spaces etc */ do i--; while ((i >= 0) && (buf->data[i] <= ' ')); buf->data[++i]='\0'; /* Check if we have a PEM BEGIN marker */ if (strncmp(buf->data,"-----BEGIN ",11) == 0) { if (strncmp(&(buf->data[i-5]),"-----",5) != 0) continue; break; } } } if ((b64=BIO_new(BIO_f_base64())) == NULL) goto end; BIO_push(b64,in); Loading doc/apps/asn1parse.pod +9 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ B<openssl> B<asn1parse> [B<-strparse offset>] [B<-genstr string>] [B<-genconf file>] [B<-strictpem>] =head1 DESCRIPTION Loading Loading @@ -78,6 +79,13 @@ B<asn1>. The encoded data is passed through the ASN1 parser and printed out as though it came from a file, the contents can thus be examined and written to a file using the B<out> option. =item B<-strictpem> If this option is used then B<-inform> will be ignored. Without this option any data in a PEM format input file will be treated as base64 encoded and 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 in a PEM file. =back =head2 OUTPUT Loading Loading
apps/asn1pars.c +44 −2 Original line number Diff line number Diff line Loading @@ -80,6 +80,9 @@ #undef PROG #define PROG asn1parse_main /* Minimum buffer size to be used */ #define MIN_BUFFER 256 int MAIN(int, char **); static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf); Loading @@ -90,7 +93,7 @@ int MAIN(int argc, char **argv) unsigned int length=0; long num,tmplen; BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL; int informat,indent=0, noout = 0, dump = 0; int informat,indent=0, noout = 0, dump = 0, strictpem = 0; char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL; char *genstr=NULL, *genconf=NULL; unsigned char *tmpbuf; Loading Loading @@ -181,6 +184,11 @@ int MAIN(int argc, char **argv) if (--argc < 1) goto bad; genconf= *(++argv); } else if (strcmp(*argv,"-strictpem") == 0) { strictpem = 1; informat = FORMAT_PEM; } else { BIO_printf(bio_err,"unknown option %s\n",*argv); Loading Loading @@ -211,6 +219,8 @@ bad: BIO_printf(bio_err," ASN1 blob wrappings\n"); BIO_printf(bio_err," -genstr str string to generate ASN1 structure from\n"); BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n"); BIO_printf(bio_err," -strictpem do not attempt base64 decode outside PEM markers (-inform \n"); BIO_printf(bio_err," will be ignored)\n"); goto end; } Loading Loading @@ -262,7 +272,7 @@ bad: } if ((buf=BUF_MEM_new()) == NULL) goto end; if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */ if (!BUF_MEM_grow(buf,(BUFSIZ*8)<MIN_BUFFER?MIN_BUFFER:(BUFSIZ*8))) goto end; /* Pre-allocate :-) */ if (genstr || genconf) { Loading @@ -281,6 +291,38 @@ bad: { BIO *tmp; if(strictpem) { for (;;) { /* Read a line */ i=BIO_gets(in,buf->data,MIN_BUFFER-1); if (i <= 0) { BIO_printf(bio_err, "Error: Cannot find start line\n"); goto end; } /* Strip trailing spaces etc */ do i--; while ((i >= 0) && (buf->data[i] <= ' ')); buf->data[++i]='\0'; /* Check if we have a PEM BEGIN marker */ if (strncmp(buf->data,"-----BEGIN ",11) == 0) { if (strncmp(&(buf->data[i-5]),"-----",5) != 0) continue; break; } } } if ((b64=BIO_new(BIO_f_base64())) == NULL) goto end; BIO_push(b64,in); Loading
doc/apps/asn1parse.pod +9 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ B<openssl> B<asn1parse> [B<-strparse offset>] [B<-genstr string>] [B<-genconf file>] [B<-strictpem>] =head1 DESCRIPTION Loading Loading @@ -78,6 +79,13 @@ B<asn1>. The encoded data is passed through the ASN1 parser and printed out as though it came from a file, the contents can thus be examined and written to a file using the B<out> option. =item B<-strictpem> If this option is used then B<-inform> will be ignored. Without this option any data in a PEM format input file will be treated as base64 encoded and 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 in a PEM file. =back =head2 OUTPUT Loading