Add VisibleString parsing

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19539 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-12-28 17:15:05 +00:00
parent 837f65e1e9
commit 983b89b811
15 changed files with 80 additions and 2 deletions

View File

@@ -32,6 +32,7 @@ typedef struct heim_universal_string {
uint32_t *data; uint32_t *data;
} heim_universal_string; } heim_universal_string;
typedef char *heim_visible_string;
typedef struct heim_oid { typedef struct heim_oid {
size_t length; size_t length;

View File

@@ -180,7 +180,9 @@ loop (unsigned char *buf, size_t len, int indent)
break; break;
} }
case UT_GeneralizedTime : case UT_GeneralizedTime :
case UT_GeneralString : { case UT_GeneralString :
case UT_PrintableString :
case UT_VisibleString : {
heim_general_string str; heim_general_string str;
ret = der_get_general_string (buf, length, &str, NULL); ret = der_get_general_string (buf, length, &str, NULL);

View File

@@ -88,6 +88,13 @@ der_copy_universal_string (const heim_universal_string *from,
return 0; return 0;
} }
int
der_copy_visible_string (const heim_visible_string *from,
heim_visible_string *to)
{
return der_copy_general_string(from, to);
}
int int
der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to) der_copy_octet_string (const heim_octet_string *from, heim_octet_string *to)
{ {

View File

@@ -79,6 +79,13 @@ der_free_universal_string (heim_universal_string *k)
k->length = 0; k->length = 0;
} }
void
der_free_visible_string (heim_visible_string *str)
{
free(*str);
*str = NULL;
}
void void
der_free_octet_string (heim_octet_string *k) der_free_octet_string (heim_octet_string *k)
{ {

View File

@@ -214,6 +214,13 @@ der_get_universal_string (const unsigned char *p, size_t len,
return 0; return 0;
} }
int
der_get_visible_string (const unsigned char *p, size_t len,
heim_visible_string *str, size_t *size)
{
return der_get_general_string(p, len, str, size);
}
int int
der_get_octet_string (const unsigned char *p, size_t len, der_get_octet_string (const unsigned char *p, size_t len,
heim_octet_string *data, size_t *size) heim_octet_string *data, size_t *size)

View File

@@ -166,6 +166,12 @@ der_length_universal_string (const heim_universal_string *data)
return data->length * 4; return data->length * 4;
} }
size_t
der_length_visible_string (const heim_visible_string *data)
{
return strlen(*data);
}
size_t size_t
der_length_octet_string (const heim_octet_string *k) der_length_octet_string (const heim_octet_string *k)
{ {

View File

@@ -230,6 +230,13 @@ der_put_universal_string (unsigned char *p, size_t len,
return 0; return 0;
} }
int
der_put_visible_string (unsigned char *p, size_t len,
const heim_visible_string *str, size_t *size)
{
return der_put_general_string(p, len, str, size);
}
int int
der_put_octet_string (unsigned char *p, size_t len, der_put_octet_string (unsigned char *p, size_t len,
const heim_octet_string *data, size_t *size) const heim_octet_string *data, size_t *size)

View File

@@ -135,6 +135,9 @@ init_generate (const char *filename, const char *base)
" size_t length;\n" " size_t length;\n"
" uint32_t *data;\n" " uint32_t *data;\n"
"} heim_universal_string;\n\n"); "} heim_universal_string;\n\n");
fprintf (headerfile,
"typedef char *heim_visible_string;\n\n"
);
fprintf (headerfile, fprintf (headerfile,
"typedef struct heim_oid {\n" "typedef struct heim_oid {\n"
" size_t length;\n" " size_t length;\n"
@@ -504,6 +507,10 @@ define_asn1 (int level, Type *t)
space(level); space(level);
fprintf (headerfile, "UniversalString"); fprintf (headerfile, "UniversalString");
break; break;
case TVisibleString:
space(level);
fprintf (headerfile, "VisibleString");
break;
case TOID : case TOID :
space(level); space(level);
fprintf(headerfile, "OBJECT IDENTIFIER"); fprintf(headerfile, "OBJECT IDENTIFIER");
@@ -736,6 +743,10 @@ define_type (int level, const char *name, Type *t, int typedefp, int preservep)
space(level); space(level);
fprintf (headerfile, "heim_universal_string %s;\n", name); fprintf (headerfile, "heim_universal_string %s;\n", name);
break; break;
case TVisibleString:
space(level);
fprintf (headerfile, "heim_visible_string %s;\n", name);
break;
case TOID : case TOID :
space(level); space(level);
fprintf (headerfile, "heim_oid %s;\n", name); fprintf (headerfile, "heim_oid %s;\n", name);

View File

@@ -202,6 +202,9 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)
case TUniversalString: case TUniversalString:
copy_primitive ("universal_string", from, to); copy_primitive ("universal_string", from, to);
break; break;
case TVisibleString:
copy_primitive ("visible_string", from, to);
break;
case TTag: case TTag:
copy_type (from, to, t->subtype, preserve); copy_type (from, to, t->subtype, preserve);
break; break;

View File

@@ -74,6 +74,7 @@ is_primitive_type(int type)
case TIA5String: case TIA5String:
case TBMPString: case TBMPString:
case TUniversalString: case TUniversalString:
case TVisibleString:
case TNull: case TNull:
return 1; return 1;
default: default:
@@ -191,6 +192,11 @@ find_tag (const Type *t,
*ty = PRIM; *ty = PRIM;
*tag = UT_UniversalString; *tag = UT_UniversalString;
break; break;
case TVisibleString:
*cl = ASN1_C_UNIV;
*ty = PRIM;
*tag = UT_VisibleString;
break;
default: default:
abort(); abort();
} }
@@ -580,6 +586,9 @@ decode_type (const char *name, const Type *t, int optional,
case TUniversalString: case TUniversalString:
decode_primitive ("universal_string", name, forwstr); decode_primitive ("universal_string", name, forwstr);
break; break;
case TVisibleString:
decode_primitive ("visible_string", name, forwstr);
break;
case TNull: case TNull:
fprintf (codefile, "/* NULL */\n"); fprintf (codefile, "/* NULL */\n");
break; break;
@@ -620,6 +629,7 @@ generate_type_decode (const Symbol *s)
case TIA5String: case TIA5String:
case TBMPString: case TBMPString:
case TUniversalString: case TUniversalString:
case TVisibleString:
case TUTCTime: case TUTCTime:
case TNull: case TNull:
case TEnumerated: case TEnumerated:

View File

@@ -467,6 +467,10 @@ encode_type (const char *name, const Type *t, const char *tmpstr)
encode_primitive ("universal_string", name); encode_primitive ("universal_string", name);
constructed = 0; constructed = 0;
break; break;
case TVisibleString:
encode_primitive ("visible_string", name);
constructed = 0;
break;
case TNull: case TNull:
fprintf (codefile, "/* NULL */\n"); fprintf (codefile, "/* NULL */\n");
constructed = 0; constructed = 0;
@@ -503,6 +507,7 @@ generate_type_encode (const Symbol *s)
case TIA5String: case TIA5String:
case TBMPString: case TBMPString:
case TUniversalString: case TUniversalString:
case TVisibleString:
case TNull: case TNull:
case TBitString: case TBitString:
case TEnumerated: case TEnumerated:

View File

@@ -160,6 +160,9 @@ free_type (const char *name, const Type *t, int preserve)
case TUniversalString: case TUniversalString:
free_primitive ("universal_string", name); free_primitive ("universal_string", name);
break; break;
case TVisibleString:
free_primitive ("visible_string", name);
break;
case TTag: case TTag:
free_type (name, t->subtype, preserve); free_type (name, t->subtype, preserve);
break; break;

View File

@@ -238,6 +238,9 @@ length_type (const char *name, const Type *t,
case TUniversalString: case TUniversalString:
length_primitive ("universal_string", name, variable); length_primitive ("universal_string", name, variable);
break; break;
case TVisibleString:
length_primitive ("visible_string", name, variable);
break;
case TNull: case TNull:
fprintf (codefile, "/* NULL */\n"); fprintf (codefile, "/* NULL */\n");
break; break;

View File

@@ -659,6 +659,11 @@ RestrictedCharactedStringType: kw_GeneralString
$$ = new_tag(ASN1_C_UNIV, UT_PrintableString, $$ = new_tag(ASN1_C_UNIV, UT_PrintableString,
TE_EXPLICIT, new_type(TPrintableString)); TE_EXPLICIT, new_type(TPrintableString));
} }
| kw_VisibleString
{
$$ = new_tag(ASN1_C_UNIV, UT_VisibleString,
TE_EXPLICIT, new_type(TVisibleString));
}
| kw_IA5String | kw_IA5String
{ {
$$ = new_tag(ASN1_C_UNIV, UT_IA5String, $$ = new_tag(ASN1_C_UNIV, UT_IA5String,

View File

@@ -60,7 +60,8 @@ enum typetype {
TUTCTime, TUTCTime,
TUTF8String, TUTF8String,
TBMPString, TBMPString,
TUniversalString TUniversalString,
TVisibleString
}; };
typedef enum typetype Typetype; typedef enum typetype Typetype;