add boolan support
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12944 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -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);
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -53,6 +53,7 @@ free_type (const char *name, const Type *t)
|
||||
break;
|
||||
case TInteger:
|
||||
case TUInteger:
|
||||
case TBoolean:
|
||||
case TEnumerated :
|
||||
break;
|
||||
case TOctetString:
|
||||
|
@@ -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 ();
|
||||
}
|
||||
|
@@ -39,6 +39,7 @@
|
||||
enum typetype {
|
||||
TApplication,
|
||||
TBitString,
|
||||
TBoolean,
|
||||
TChoice,
|
||||
TEnumerated,
|
||||
TGeneralString,
|
||||
|
Reference in New Issue
Block a user