diff --git a/lib/asn1/der.h b/lib/asn1/der.h index 08fa363e9..f861449a6 100644 --- a/lib/asn1/der.h +++ b/lib/asn1/der.h @@ -1,8 +1,7 @@ /* $Id$ */ -#ifndef DER_H - -#define DER_H +#ifndef __DER_H__ +#define __DER_H__ #include @@ -27,27 +26,14 @@ enum { UT_GeneralString = 27 }; -/**/ - -struct krb5_data { - size_t len; - unsigned char *data; -}; - -typedef struct krb5_data krb5_data; - time_t timegm (struct tm *); -void time2generalizedtime (time_t t, krb5_data *s); - -krb5_data string_make (char *); -krb5_data string_make_n (int len, char *); -void string_free (krb5_data); +void time2generalizedtime (time_t t, octet_string *s); int der_get_int (unsigned char *p, int len, unsigned *ret); int der_get_length (unsigned char *p, int len, int *ret); -int der_get_general_string (unsigned char *p, int len, char **str); -int der_get_octet_string (unsigned char *p, int len, krb5_data *data); +int der_get_general_string (unsigned char *p, int len, general_string *str); +int der_get_octet_string (unsigned char *p, int len, octet_string *data); int der_get_tag (unsigned char *p, int len, Der_class *class, Der_type *type, int *tag); int der_match_tag (unsigned char *p, int len, @@ -56,33 +42,38 @@ int der_match_tag_and_length (unsigned char *p, int len, Der_class class, Der_type type, int tag, int *length_ret); int decode_integer (unsigned char *p, int len, unsigned *num); -int decode_general_string (unsigned char *p, int len, char **str); -int decode_octet_string (unsigned char *p, int len, krb5_data *k); +int decode_general_string (unsigned char *p, int len, general_string *str); +int decode_octet_string (unsigned char *p, int len, octet_string *k); int decode_generalized_time (unsigned char *p, int len, time_t *t); int der_put_int (unsigned char *p, int len, unsigned val); int der_put_length (unsigned char *p, int len, int val); -int der_put_general_string (unsigned char *p, int len, char *str); -int der_put_octet_string (unsigned char *p, int len, krb5_data *data); +int der_put_general_string (unsigned char *p, int len, general_string *str); +int der_put_octet_string (unsigned char *p, int len, octet_string *data); int der_put_tag (unsigned char *p, int len, Der_class class, Der_type type, int tag); int der_put_length_and_tag (unsigned char *p, int len, int len_val, Der_class class, Der_type type, int tag); int encode_integer (unsigned char *p, int len, unsigned *data); -int encode_general_string (unsigned char *p, int len, char **data); -int encode_octet_string (unsigned char *p, int len, krb5_data *k); +int encode_general_string (unsigned char *p, int len, general_string *data); +int encode_octet_string (unsigned char *p, int len, octet_string *k); int encode_generalized_time (unsigned char *p, int len, time_t *t); void free_integer (unsigned *num); -void free_general_string (char **str); -void free_octet_string (krb5_data *k); +void free_general_string (general_string *str); +void free_octet_string (octet_string *k); void free_generalized_time (time_t *t); size_t length_len (int len); size_t length_integer (unsigned *data); -size_t length_general_string (char **data); -size_t length_octet_string (krb5_data *k); +size_t length_general_string (general_string *data); +size_t length_octet_string (octet_string *k); size_t length_generalized_time (time_t *t); -#endif /* DER_H */ +void copy_general_string (general_string *from, general_string *to); +void copy_octet_string (octet_string *from, octet_string *to); + +int fix_dce(int reallen, int *len); + +#endif /* __DER_H__ */ diff --git a/lib/asn1/der_copy.c b/lib/asn1/der_copy.c index 0c202aa07..a4265a225 100644 --- a/lib/asn1/der_copy.c +++ b/lib/asn1/der_copy.c @@ -1,18 +1,18 @@ -#include "asn1_locl.h" +#include "libasn1.h" RCSID("$Id$"); void -copy_general_string (char **from, char **to) +copy_general_string (general_string *from, general_string *to) { *to = malloc(strlen(*from) + 1); strcpy(*to, *from); } void -copy_octet_string (krb5_data *from, krb5_data *to) +copy_octet_string (octet_string *from, octet_string *to) { - to->len = from->len; - to->data = malloc(to->len); - memcpy(to->data, from->data, to->len); + to->length = from->length; + to->data = malloc(to->length); + memcpy(to->data, from->data, to->length); } diff --git a/lib/asn1/der_free.c b/lib/asn1/der_free.c index 910127e74..7f4d87729 100644 --- a/lib/asn1/der_free.c +++ b/lib/asn1/der_free.c @@ -1,15 +1,15 @@ -#include "asn1_locl.h" +#include "libasn1.h" RCSID("$Id$"); void -free_general_string (char **str) +free_general_string (general_string *str) { free(*str); } void -free_octet_string (krb5_data *k) +free_octet_string (octet_string *k) { free(k->data); } diff --git a/lib/asn1/der_get.c b/lib/asn1/der_get.c index c6c89e207..3da2fc2ea 100644 --- a/lib/asn1/der_get.c +++ b/lib/asn1/der_get.c @@ -1,4 +1,4 @@ -#include "asn1_locl.h" +#include "libasn1.h" RCSID("$Id$"); @@ -49,7 +49,7 @@ der_get_length (unsigned char *p, int len, int *ret) } int -der_get_general_string (unsigned char *p, int len, char **str) +der_get_general_string (unsigned char *p, int len, general_string *str) { int l, slen; char *s; @@ -71,7 +71,7 @@ der_get_general_string (unsigned char *p, int len, char **str) } int -der_get_octet_string (unsigned char *p, int len, krb5_data *data) +der_get_octet_string (unsigned char *p, int len, octet_string *data) { int l, slen; @@ -82,9 +82,9 @@ der_get_octet_string (unsigned char *p, int len, krb5_data *data) len -= l; if (len < slen) return -1; - data->len = slen; + data->length = slen; data->data = malloc(slen); - if (data->data == NULL && data->len != 0) + if (data->data == NULL && data->length != 0) return -1; memcpy (data->data, p, slen); return slen + l; @@ -171,7 +171,7 @@ decode_integer (unsigned char *p, int len, unsigned *num) } int -decode_general_string (unsigned char *p, int len, char **str) +decode_general_string (unsigned char *p, int len, general_string *str) { int ret = 0; int l; @@ -192,7 +192,7 @@ decode_general_string (unsigned char *p, int len, char **str) } int -decode_octet_string (unsigned char *p, int len, krb5_data *k) +decode_octet_string (unsigned char *p, int len, octet_string *k) { int ret = 0; int l; @@ -228,7 +228,7 @@ generalizedtime2time (char *s, time_t *t) int decode_generalized_time (unsigned char *p, int len, time_t *t) { - krb5_data k; + octet_string k; char times[32]; /* XXX */ int ret = 0; int l; @@ -245,8 +245,8 @@ decode_generalized_time (unsigned char *p, int len, time_t *t) p += l; len -= l; ret += l; - strncpy(times, (char*)k.data, k.len); - times[k.len] = 0; + strncpy(times, (char*)k.data, k.length); + times[k.length] = 0; generalizedtime2time (times, t); free (k.data); return ret; diff --git a/lib/asn1/der_length.c b/lib/asn1/der_length.c index 0d0b085c5..e55a77135 100644 --- a/lib/asn1/der_length.c +++ b/lib/asn1/der_length.c @@ -1,4 +1,4 @@ -#include "asn1_locl.h" +#include "libasn1.h" RCSID("$Id$"); @@ -32,7 +32,7 @@ length_integer (unsigned *data) } size_t -length_general_string (char **data) +length_general_string (general_string *data) { char *str = *data; size_t len = strlen(str); @@ -40,19 +40,19 @@ length_general_string (char **data) } size_t -length_octet_string (krb5_data *k) +length_octet_string (octet_string *k) { - return 1 + length_len(k->len) + k->len; + return 1 + length_len(k->length) + k->length; } size_t length_generalized_time (time_t *t) { - krb5_data k; + octet_string k; size_t ret; time2generalizedtime (*t, &k); - ret = 1 + length_len(k.len) + k.len; + ret = 1 + length_len(k.length) + k.length; free (k.data); return ret; } diff --git a/lib/asn1/der_put.c b/lib/asn1/der_put.c index 9946c9f80..d4103fb9e 100644 --- a/lib/asn1/der_put.c +++ b/lib/asn1/der_put.c @@ -1,6 +1,6 @@ /* $Id$ */ -#include "asn1_locl.h" +#include "libasn1.h" RCSID("$Id$"); @@ -57,16 +57,16 @@ der_put_length (unsigned char *p, int len, int val) } int -der_put_general_string (unsigned char *p, int len, char *str) +der_put_general_string (unsigned char *p, int len, general_string *str) { - int slen = strlen(str); + int slen = strlen(*str); int l; if (len < slen) return -1; p -= slen; len -= slen; - memcpy (p+1, str, slen); + memcpy (p+1, *str, slen); l = der_put_length (p, len, slen); if(l < 0) return l; @@ -74,19 +74,19 @@ der_put_general_string (unsigned char *p, int len, char *str) } int -der_put_octet_string (unsigned char *p, int len, krb5_data *data) +der_put_octet_string (unsigned char *p, int len, octet_string *data) { int l; - if (len < data->len) + if (len < data->length) return -1; - p -= data->len; - len -= data->len; - memcpy (p+1, data->data, data->len); - l = der_put_length (p, len, data->len); + p -= data->length; + len -= data->length; + memcpy (p+1, data->data, data->length); + l = der_put_length (p, len, data->length); if (l < 0) return l; - return l + data->len; + return l + data->length; } int @@ -150,13 +150,12 @@ encode_integer (unsigned char *p, int len, unsigned *data) } int -encode_general_string (unsigned char *p, int len, char **data) +encode_general_string (unsigned char *p, int len, general_string *data) { - char *str = *data; int ret = 0; int l; - l = der_put_general_string (p, len, str); + l = der_put_general_string (p, len, data); if (l < 0) return l; p -= l; @@ -172,7 +171,7 @@ encode_general_string (unsigned char *p, int len, char **data) } int -encode_octet_string (unsigned char *p, int len, krb5_data *k) +encode_octet_string (unsigned char *p, int len, octet_string *k) { int ret = 0; int l; @@ -193,12 +192,12 @@ encode_octet_string (unsigned char *p, int len, krb5_data *k) } void -time2generalizedtime (time_t t, krb5_data *s) +time2generalizedtime (time_t t, octet_string *s) { struct tm *tm; s->data = malloc(16); - s->len = 15; + s->length = 15; tm = gmtime (&t); sprintf (s->data, "%04d%02d%02d%02d%02d%02dZ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, @@ -208,7 +207,7 @@ time2generalizedtime (time_t t, krb5_data *s) int encode_generalized_time (unsigned char *p, int len, time_t *t) { - krb5_data k; + octet_string k; int l; int ret = 0; diff --git a/lib/asn1/gen.c b/lib/asn1/gen.c index 280a47454..1c3cc8d3c 100644 --- a/lib/asn1/gen.c +++ b/lib/asn1/gen.c @@ -24,6 +24,23 @@ init_generate (char *filename) fprintf (headerfile, "#ifndef __" STEM "_h__\n" "#define __" STEM "_h__\n\n"); + fprintf (headerfile, + "#include \n\n"); + fprintf (headerfile, + "typedef struct {\n" + " size_t length;\n" + " void *data;\n" + "} octet_string;\n\n"); + fprintf (headerfile, +#if 0 + "typedef struct {\n" + " size_t length;\n" + " char *data;\n" + "} general_string;\n\n" +#else + "typedef char *general_string;\n\n" +#endif + ); logfile = fopen(STEM "_files", "w"); if (logfile == NULL) { fprintf (stderr, "Could not open " STEM "_files" "\n"); @@ -152,7 +169,7 @@ define_type (int level, char *name, Type *t) break; case TOctetString: space(level); - fprintf (headerfile, "krb5_data %s;\n", name); + fprintf (headerfile, "octet_string %s;\n", name); break; case TBitString: { Member *m; @@ -218,7 +235,7 @@ define_type (int level, char *name, Type *t) break; case TGeneralString: space(level); - fprintf (headerfile, "char *%s;\n", name); + fprintf (headerfile, "general_string %s;\n", name); break; case TApplication: define_type (level, name, t->subtype); @@ -261,8 +278,8 @@ generate_type (Symbol *s) "#include \n" "#include \n" "#include \n" - "#include \n" - "#include <" STEM ".h>\n\n", + "#include <" STEM ".h>\n\n" + "#include \n", orig_filename); generate_type_header (s); generate_type_encode (s);