#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);
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;
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);
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;
}
}
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)
{
{
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);
[B<-strparse offset>]
[B<-genstr string>]
[B<-genconf file>]
+[B<-strictpem>]
=head1 DESCRIPTION
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
.....
- 229:d=3 hl=3 l= 141 prim: BIT STRING
+ 229:d=3 hl=3 l= 141 prim: BIT STRING
373:d=2 hl=3 l= 162 cons: cont [ 3 ]
376:d=3 hl=3 l= 159 cons: SEQUENCE
379:d=4 hl=2 l= 29 cons: SEQUENCE