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_int (const unsigned char *p, size_t len, int *ret, size_t *size);
|
||||||
int der_get_length (const unsigned char *p, size_t len,
|
int der_get_length (const unsigned char *p, size_t len,
|
||||||
size_t *val, size_t *size);
|
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,
|
int der_get_general_string (const unsigned char *p, size_t len,
|
||||||
heim_general_string *str, size_t *size);
|
heim_general_string *str, size_t *size);
|
||||||
int der_get_octet_string (const unsigned char *p, size_t len,
|
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,
|
Der_class class, Der_type type, int tag,
|
||||||
size_t *length_ret, size_t *size);
|
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_integer (const unsigned char*, size_t, int*, size_t*);
|
||||||
int decode_unsigned (const unsigned char*, size_t, unsigned*, size_t*);
|
int decode_unsigned (const unsigned char*, size_t, unsigned*, size_t*);
|
||||||
int decode_enumerated (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_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_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,
|
int der_put_general_string (unsigned char *p, size_t len,
|
||||||
const heim_general_string *str, size_t*);
|
const heim_general_string *str, size_t*);
|
||||||
int der_put_octet_string (unsigned char *p, size_t len,
|
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,
|
int der_put_length_and_tag (unsigned char*, size_t, size_t,
|
||||||
Der_class, Der_type, int, 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,
|
int encode_integer (unsigned char *p, size_t len,
|
||||||
const int *data, size_t*);
|
const int *data, size_t*);
|
||||||
int encode_unsigned (unsigned char *p, size_t len,
|
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*);
|
void free_utf8string (heim_utf8_string*);
|
||||||
|
|
||||||
size_t length_len (size_t len);
|
size_t length_len (size_t len);
|
||||||
|
size_t length_boolean (const int *data);
|
||||||
size_t length_integer (const int *data);
|
size_t length_integer (const int *data);
|
||||||
size_t length_unsigned (const unsigned *data);
|
size_t length_unsigned (const unsigned *data);
|
||||||
size_t length_enumerated (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;
|
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
|
int
|
||||||
der_get_length (const unsigned char *p, size_t len,
|
der_get_length (const unsigned char *p, size_t len,
|
||||||
size_t *val, size_t *size)
|
size_t *val, size_t *size)
|
||||||
@@ -234,6 +247,33 @@ der_match_tag_and_length (const unsigned char *p, size_t len,
|
|||||||
return 0;
|
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
|
int
|
||||||
decode_integer (const unsigned char *p, size_t len,
|
decode_integer (const unsigned char *p, size_t len,
|
||||||
int *num, size_t *size)
|
int *num, size_t *size)
|
||||||
|
@@ -95,6 +95,12 @@ length_len (size_t len)
|
|||||||
return len_unsigned (len) + 1;
|
return len_unsigned (len) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
length_boolean (const int *data)
|
||||||
|
{
|
||||||
|
return 1 + length_len(1) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
length_integer (const int *data)
|
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
|
int
|
||||||
der_put_general_string (unsigned char *p, size_t len,
|
der_put_general_string (unsigned char *p, size_t len,
|
||||||
const heim_general_string *str, size_t *size)
|
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;
|
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
|
int
|
||||||
encode_integer (unsigned char *p, size_t len, const int *data, size_t *size)
|
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);
|
fprintf (headerfile, "[APPLICATION %d] ", t->application);
|
||||||
define_asn1 (level, t->subtype);
|
define_asn1 (level, t->subtype);
|
||||||
break;
|
break;
|
||||||
|
case TBoolean:
|
||||||
|
space(level);
|
||||||
|
fprintf (headerfile, "BOOLEAN");
|
||||||
|
break;
|
||||||
case TUTF8String:
|
case TUTF8String:
|
||||||
space(level);
|
space(level);
|
||||||
fprintf (headerfile, "UTF8String");
|
fprintf (headerfile, "UTF8String");
|
||||||
@@ -407,6 +411,10 @@ define_type (int level, char *name, Type *t, int typedefp)
|
|||||||
space(level);
|
space(level);
|
||||||
fprintf (headerfile, "heim_utf8_string %s;\n", name);
|
fprintf (headerfile, "heim_utf8_string %s;\n", name);
|
||||||
break;
|
break;
|
||||||
|
case TBoolean:
|
||||||
|
space(level);
|
||||||
|
fprintf (headerfile, "int %s;\n", name);
|
||||||
|
break;
|
||||||
case TNull:
|
case TNull:
|
||||||
space(level);
|
space(level);
|
||||||
fprintf (headerfile, "NULL %s;\n", name);
|
fprintf (headerfile, "NULL %s;\n", name);
|
||||||
|
@@ -55,6 +55,7 @@ copy_type (const char *from, const char *to, const Type *t)
|
|||||||
break;
|
break;
|
||||||
case TInteger:
|
case TInteger:
|
||||||
case TUInteger:
|
case TUInteger:
|
||||||
|
case TBoolean:
|
||||||
case TEnumerated :
|
case TEnumerated :
|
||||||
fprintf(codefile, "*(%s) = *(%s);\n", to, from);
|
fprintf(codefile, "*(%s) = *(%s);\n", to, from);
|
||||||
break;
|
break;
|
||||||
|
@@ -280,6 +280,9 @@ decode_type (const char *name, const Type *t)
|
|||||||
"}\n"
|
"}\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TBoolean:
|
||||||
|
decode_primitive ("boolean", name);
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
abort ();
|
abort ();
|
||||||
@@ -310,6 +313,7 @@ generate_type_decode (const Symbol *s)
|
|||||||
switch (s->type->type) {
|
switch (s->type->type) {
|
||||||
case TInteger:
|
case TInteger:
|
||||||
case TUInteger:
|
case TUInteger:
|
||||||
|
case TBoolean:
|
||||||
case TOctetString:
|
case TOctetString:
|
||||||
case TOID:
|
case TOID:
|
||||||
case TGeneralizedTime:
|
case TGeneralizedTime:
|
||||||
|
@@ -220,6 +220,9 @@ encode_type (const char *name, const Type *t)
|
|||||||
"BACK;\n",
|
"BACK;\n",
|
||||||
t->application);
|
t->application);
|
||||||
break;
|
break;
|
||||||
|
case TBoolean:
|
||||||
|
encode_primitive ("boolean", name);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
@@ -245,6 +248,7 @@ generate_type_encode (const Symbol *s)
|
|||||||
switch (s->type->type) {
|
switch (s->type->type) {
|
||||||
case TInteger:
|
case TInteger:
|
||||||
case TUInteger:
|
case TUInteger:
|
||||||
|
case TBoolean:
|
||||||
case TOctetString:
|
case TOctetString:
|
||||||
case TGeneralizedTime:
|
case TGeneralizedTime:
|
||||||
case TGeneralString:
|
case TGeneralString:
|
||||||
|
@@ -53,6 +53,7 @@ free_type (const char *name, const Type *t)
|
|||||||
break;
|
break;
|
||||||
case TInteger:
|
case TInteger:
|
||||||
case TUInteger:
|
case TUInteger:
|
||||||
|
case TBoolean:
|
||||||
case TEnumerated :
|
case TEnumerated :
|
||||||
break;
|
break;
|
||||||
case TOctetString:
|
case TOctetString:
|
||||||
|
@@ -152,6 +152,9 @@ length_type (const char *name, const Type *t, const char *variable)
|
|||||||
length_type (name, t->subtype, variable);
|
length_type (name, t->subtype, variable);
|
||||||
fprintf (codefile, "ret += 1 + length_len (ret);\n");
|
fprintf (codefile, "ret += 1 + length_len (ret);\n");
|
||||||
break;
|
break;
|
||||||
|
case TBoolean:
|
||||||
|
length_primitive ("boolean", name, variable);
|
||||||
|
break;
|
||||||
default :
|
default :
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,7 @@
|
|||||||
enum typetype {
|
enum typetype {
|
||||||
TApplication,
|
TApplication,
|
||||||
TBitString,
|
TBitString,
|
||||||
|
TBoolean,
|
||||||
TChoice,
|
TChoice,
|
||||||
TEnumerated,
|
TEnumerated,
|
||||||
TGeneralString,
|
TGeneralString,
|
||||||
|
Reference in New Issue
Block a user