asn1_par.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/* crypto/asn1/asn1_par.c */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
#include <stdio.h>
#include "cryptlib.h"
int indent);
int indent)
{
static const char fmt[]="%-18s";
static const char fmt2[]="%2d %-15s";
char str[128];
if (constructed & V_ASN1_CONSTRUCTED)
p="cons: ";
else
p="prim: ";
p=str;
else p = ASN1_tag2str(tag);
{
}
else
{
}
return(1);
err:
return(0);
}
{
}
{
}
{
long len;
ASN1_OBJECT *o=NULL;
/* ASN1_BMPSTRING *bmp=NULL;*/
int dump_indent;
#if 0
#else
#endif
p= *pp;
op=p-1;
{
op=p;
#ifdef LINT
j=j;
#endif
if (j & 0x80)
{
goto end;
ret=0;
goto end;
}
/* if j == 0x21 it is a constructed indefinite length object */
<= 0) goto end;
if (j != (V_ASN1_CONSTRUCTED | 1))
{
goto end;
}
else
{
goto end;
}
goto end;
if (j & V_ASN1_CONSTRUCTED)
{
{
"length is greater than %ld\n",length);
ret=0;
goto end;
}
if ((j == 0x21) && (len == 0))
{
for (;;)
{
if ((r == 2) || (p >= tot)) break;
}
}
else
while (p < ep)
{
}
}
else if (xclass != 0)
{
p+=len;
}
else
{
nl=0;
if ( (tag == V_ASN1_PRINTABLESTRING) ||
(tag == V_ASN1_T61STRING) ||
(tag == V_ASN1_IA5STRING) ||
(tag == V_ASN1_VISIBLESTRING) ||
(tag == V_ASN1_UTCTIME) ||
(tag == V_ASN1_GENERALIZEDTIME))
{
if ((len > 0) &&
!= (int)len)
goto end;
}
else if (tag == V_ASN1_OBJECT)
{
{
i2a_ASN1_OBJECT(bp,o);
}
else
{
goto end;
}
}
else if (tag == V_ASN1_BOOLEAN)
{
int ii;
if (ii < 0)
{
goto end;
}
}
else if (tag == V_ASN1_BMPSTRING)
{
/* do the BMP thang */
}
else if (tag == V_ASN1_OCTET_STRING)
{
int i,printable=1;
{
{
if (( (opp[i] < ' ') &&
(opp[i] != '\n') &&
(opp[i] != '\r') &&
(opp[i] != '\t')) ||
(opp[i] > '~'))
{
printable=0;
break;
}
}
{
goto end;
goto end;
}
&& dump)
{
if (!nl)
{
goto end;
}
dump_indent) <= 0)
goto end;
nl=1;
}
}
}
else if (tag == V_ASN1_INTEGER)
{
int i;
{
goto end;
{
goto end;
}
{
goto end;
}
}
else
{
goto end;
}
}
else if (tag == V_ASN1_ENUMERATED)
{
int i;
{
goto end;
{
goto end;
}
{
goto end;
}
}
else
{
goto end;
}
}
{
if (!nl)
{
goto end;
}
if (BIO_dump_indent(bp,(char *)p,
dump_indent) <= 0)
goto end;
nl=1;
}
if (!nl)
{
}
p+=len;
{
goto end;
}
}
}
ret=1;
end:
if (o != NULL) ASN1_OBJECT_free(o);
*pp=p;
return(ret);
}
const char *ASN1_tag2str(int tag)
{
const static char *tag2str[] = {
"EOC", "BOOLEAN", "INTEGER", "BIT STRING", "OCTET STRING", /* 0-4 */
"NULL", "OBJECT", "OBJECT DESCRIPTOR", "EXTERNAL", "REAL", /* 5-9 */
"ENUMERATED", "<ASN1 11>", "UTF8STRING", "<ASN1 13>", /* 10-13 */
"<ASN1 14>", "<ASN1 15>", "SEQUENCE", "SET", /* 15-17 */
"NUMERICSTRING", "PRINTABLESTRING", "T61STRING", /* 18-20 */
"VIDEOTEXSTRING", "IA5STRING", "UTCTIME","GENERALIZEDTIME", /* 21-24 */
"GRAPHICSTRING", "VISIBLESTRING", "GENERALSTRING", /* 25-27 */
"UNIVERSALSTRING", "<ASN1 29>", "BMPSTRING" /* 28-30 */
};
tag &= ~0x100;
}