krb5_data -> octet_string, char * -> general_string

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1873 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1997-06-09 22:43:04 +00:00
parent ab87211dd9
commit f13518ca8f
7 changed files with 84 additions and 77 deletions

View File

@@ -1,8 +1,7 @@
/* $Id$ */
#ifndef DER_H
#define DER_H
#ifndef __DER_H__
#define __DER_H__
#include <time.h>
@@ -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__ */

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -24,6 +24,23 @@ init_generate (char *filename)
fprintf (headerfile,
"#ifndef __" STEM "_h__\n"
"#define __" STEM "_h__\n\n");
fprintf (headerfile,
"#include <stddef.h>\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 <stdio.h>\n"
"#include <stdlib.h>\n"
"#include <time.h>\n"
"#include <der.h>\n"
"#include <" STEM ".h>\n\n",
"#include <" STEM ".h>\n\n"
"#include <der.h>\n",
orig_filename);
generate_type_header (s);
generate_type_encode (s);