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;
} heim_universal_string;
typedef char *heim_visible_string;
typedef struct heim_oid {
size_t length;

View File

@@ -180,7 +180,9 @@ loop (unsigned char *buf, size_t len, int indent)
break;
}
case UT_GeneralizedTime :
case UT_GeneralString : {
case UT_GeneralString :
case UT_PrintableString :
case UT_VisibleString : {
heim_general_string str;
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;
}
int
der_copy_visible_string (const heim_visible_string *from,
heim_visible_string *to)
{
return der_copy_general_string(from, to);
}
int
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;
}
void
der_free_visible_string (heim_visible_string *str)
{
free(*str);
*str = NULL;
}
void
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;
}
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
der_get_octet_string (const unsigned char *p, size_t len,
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;
}
size_t
der_length_visible_string (const heim_visible_string *data)
{
return strlen(*data);
}
size_t
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;
}
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
der_put_octet_string (unsigned char *p, size_t len,
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"
" uint32_t *data;\n"
"} heim_universal_string;\n\n");
fprintf (headerfile,
"typedef char *heim_visible_string;\n\n"
);
fprintf (headerfile,
"typedef struct heim_oid {\n"
" size_t length;\n"
@@ -504,6 +507,10 @@ define_asn1 (int level, Type *t)
space(level);
fprintf (headerfile, "UniversalString");
break;
case TVisibleString:
space(level);
fprintf (headerfile, "VisibleString");
break;
case TOID :
space(level);
fprintf(headerfile, "OBJECT IDENTIFIER");
@@ -736,6 +743,10 @@ define_type (int level, const char *name, Type *t, int typedefp, int preservep)
space(level);
fprintf (headerfile, "heim_universal_string %s;\n", name);
break;
case TVisibleString:
space(level);
fprintf (headerfile, "heim_visible_string %s;\n", name);
break;
case TOID :
space(level);
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:
copy_primitive ("universal_string", from, to);
break;
case TVisibleString:
copy_primitive ("visible_string", from, to);
break;
case TTag:
copy_type (from, to, t->subtype, preserve);
break;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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