add boolan support

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12944 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2003-10-03 00:28:29 +00:00
parent 67522cdee3
commit 8b8bcb8c9b
11 changed files with 112 additions and 0 deletions

View File

@@ -74,6 +74,8 @@ int time2generalizedtime (time_t t, heim_octet_string *s);
int der_get_int (const unsigned char *p, size_t len, int *ret, size_t *size);
int der_get_length (const unsigned char *p, size_t len,
size_t *val, size_t *size);
int der_get_boolean (const unsigned char *p, size_t len,
int *data, size_t *size);
int der_get_general_string (const unsigned char *p, size_t len,
heim_general_string *str, size_t *size);
int der_get_octet_string (const unsigned char *p, size_t len,
@@ -91,6 +93,7 @@ int der_match_tag_and_length (const unsigned char *p, size_t len,
Der_class class, Der_type type, int tag,
size_t *length_ret, size_t *size);
int decode_boolean (const unsigned char*, size_t, int*, size_t*);
int decode_integer (const unsigned char*, size_t, int*, size_t*);
int decode_unsigned (const unsigned char*, size_t, unsigned*, size_t*);
int decode_enumerated (const unsigned char*, size_t, unsigned*, size_t*);
@@ -107,6 +110,7 @@ int decode_utf8string (const unsigned char*, size_t,
int der_put_int (unsigned char *p, size_t len, int val, size_t*);
int der_put_length (unsigned char *p, size_t len, size_t val, size_t*);
int der_put_boolean (unsigned char *p, size_t len, const int *data, size_t*);
int der_put_general_string (unsigned char *p, size_t len,
const heim_general_string *str, size_t*);
int der_put_octet_string (unsigned char *p, size_t len,
@@ -118,6 +122,8 @@ int der_put_tag (unsigned char *p, size_t len, Der_class class, Der_type type,
int der_put_length_and_tag (unsigned char*, size_t, size_t,
Der_class, Der_type, int, size_t*);
int encode_boolean (unsigned char *p, size_t len,
const int *data, size_t*);
int encode_integer (unsigned char *p, size_t len,
const int *data, size_t*);
int encode_unsigned (unsigned char *p, size_t len,
@@ -143,6 +149,7 @@ void free_generalized_time (time_t *t);
void free_utf8string (heim_utf8_string*);
size_t length_len (size_t len);
size_t length_boolean (const int *data);
size_t length_integer (const int *data);
size_t length_unsigned (const unsigned *data);
size_t length_enumerated (const unsigned *data);

View File

@@ -76,6 +76,19 @@ der_get_int (const unsigned char *p, size_t len,
return 0;
}
int
der_get_boolean(const unsigned char *p, size_t len, int *data, size_t *size)
{
if(len < 1)
return ASN1_OVERRUN;
if(*p != 0)
*data = 1;
else
*data = 0;
*size = 1;
return 0;
}
int
der_get_length (const unsigned char *p, size_t len,
size_t *val, size_t *size)
@@ -234,6 +247,33 @@ der_match_tag_and_length (const unsigned char *p, size_t len,
return 0;
}
int
decode_boolean (const unsigned char *p, size_t len,
int *num, size_t *size)
{
size_t ret = 0;
size_t l, reallen;
int e;
e = der_match_tag (p, len, UNIV, PRIM, UT_Boolean, &l);
if (e) return e;
p += l;
len -= l;
ret += l;
e = der_get_length (p, len, &reallen, &l);
if (e) return e;
p += l;
len -= l;
ret += l;
e = der_get_boolean (p, reallen, num, &l);
if (e) return e;
p += l;
len -= l;
ret += l;
if(size) *size = ret;
return 0;
}
int
decode_integer (const unsigned char *p, size_t len,
int *num, size_t *size)

View File

@@ -95,6 +95,12 @@ length_len (size_t len)
return len_unsigned (len) + 1;
}
size_t
length_boolean (const int *data)
{
return 1 + length_len(1) + 1;
}
size_t
length_integer (const int *data)
{

View File

@@ -132,6 +132,19 @@ der_put_length (unsigned char *p, size_t len, size_t val, size_t *size)
}
}
int
der_put_boolean(unsigned char *p, size_t len, const int *data, size_t *size)
{
if(len < 1)
return ASN1_OVERFLOW;
if(*data != 0)
*p = 0xff;
else
*p = 0;
*size = 1;
return 0;
}
int
der_put_general_string (unsigned char *p, size_t len,
const heim_general_string *str, size_t *size)
@@ -225,6 +238,30 @@ der_put_length_and_tag (unsigned char *p, size_t len, size_t len_val,
return 0;
}
int
encode_boolean (unsigned char *p, size_t len, const int *data,
size_t *size)
{
size_t ret = 0;
size_t l;
int e;
e = der_put_boolean (p, len, data, &l);
if(e)
return e;
p -= l;
len -= l;
ret += l;
e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_Boolean, &l);
if (e)
return e;
p -= l;
len -= l;
ret += l;
*size = ret;
return 0;
}
int
encode_integer (unsigned char *p, size_t len, const int *data, size_t *size)
{

View File

@@ -270,6 +270,10 @@ define_asn1 (int level, Type *t)
fprintf (headerfile, "[APPLICATION %d] ", t->application);
define_asn1 (level, t->subtype);
break;
case TBoolean:
space(level);
fprintf (headerfile, "BOOLEAN");
break;
case TUTF8String:
space(level);
fprintf (headerfile, "UTF8String");
@@ -407,6 +411,10 @@ define_type (int level, char *name, Type *t, int typedefp)
space(level);
fprintf (headerfile, "heim_utf8_string %s;\n", name);
break;
case TBoolean:
space(level);
fprintf (headerfile, "int %s;\n", name);
break;
case TNull:
space(level);
fprintf (headerfile, "NULL %s;\n", name);

View File

@@ -55,6 +55,7 @@ copy_type (const char *from, const char *to, const Type *t)
break;
case TInteger:
case TUInteger:
case TBoolean:
case TEnumerated :
fprintf(codefile, "*(%s) = *(%s);\n", to, from);
break;

View File

@@ -280,6 +280,9 @@ decode_type (const char *name, const Type *t)
"}\n"
"}\n");
break;
case TBoolean:
decode_primitive ("boolean", name);
break;
default :
abort ();
@@ -310,6 +313,7 @@ generate_type_decode (const Symbol *s)
switch (s->type->type) {
case TInteger:
case TUInteger:
case TBoolean:
case TOctetString:
case TOID:
case TGeneralizedTime:

View File

@@ -220,6 +220,9 @@ encode_type (const char *name, const Type *t)
"BACK;\n",
t->application);
break;
case TBoolean:
encode_primitive ("boolean", name);
break;
default:
abort ();
}
@@ -245,6 +248,7 @@ generate_type_encode (const Symbol *s)
switch (s->type->type) {
case TInteger:
case TUInteger:
case TBoolean:
case TOctetString:
case TGeneralizedTime:
case TGeneralString:

View File

@@ -53,6 +53,7 @@ free_type (const char *name, const Type *t)
break;
case TInteger:
case TUInteger:
case TBoolean:
case TEnumerated :
break;
case TOctetString:

View File

@@ -152,6 +152,9 @@ length_type (const char *name, const Type *t, const char *variable)
length_type (name, t->subtype, variable);
fprintf (codefile, "ret += 1 + length_len (ret);\n");
break;
case TBoolean:
length_primitive ("boolean", name, variable);
break;
default :
abort ();
}

View File

@@ -39,6 +39,7 @@
enum typetype {
TApplication,
TBitString,
TBoolean,
TChoice,
TEnumerated,
TGeneralString,