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:
@@ -1,8 +1,7 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
#ifndef DER_H
|
#ifndef __DER_H__
|
||||||
|
#define __DER_H__
|
||||||
#define DER_H
|
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
@@ -27,27 +26,14 @@ enum {
|
|||||||
UT_GeneralString = 27
|
UT_GeneralString = 27
|
||||||
};
|
};
|
||||||
|
|
||||||
/**/
|
|
||||||
|
|
||||||
struct krb5_data {
|
|
||||||
size_t len;
|
|
||||||
unsigned char *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct krb5_data krb5_data;
|
|
||||||
|
|
||||||
time_t timegm (struct tm *);
|
time_t timegm (struct tm *);
|
||||||
|
|
||||||
void time2generalizedtime (time_t t, krb5_data *s);
|
void time2generalizedtime (time_t t, octet_string *s);
|
||||||
|
|
||||||
krb5_data string_make (char *);
|
|
||||||
krb5_data string_make_n (int len, char *);
|
|
||||||
void string_free (krb5_data);
|
|
||||||
|
|
||||||
int der_get_int (unsigned char *p, int len, unsigned *ret);
|
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_length (unsigned char *p, int len, int *ret);
|
||||||
int der_get_general_string (unsigned char *p, int len, char **str);
|
int der_get_general_string (unsigned char *p, int len, general_string *str);
|
||||||
int der_get_octet_string (unsigned char *p, int len, krb5_data *data);
|
int der_get_octet_string (unsigned char *p, int len, octet_string *data);
|
||||||
int der_get_tag (unsigned char *p, int len,
|
int der_get_tag (unsigned char *p, int len,
|
||||||
Der_class *class, Der_type *type, int *tag);
|
Der_class *class, Der_type *type, int *tag);
|
||||||
int der_match_tag (unsigned char *p, int len,
|
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,
|
Der_class class, Der_type type, int tag,
|
||||||
int *length_ret);
|
int *length_ret);
|
||||||
int decode_integer (unsigned char *p, int len, unsigned *num);
|
int decode_integer (unsigned char *p, int len, unsigned *num);
|
||||||
int decode_general_string (unsigned char *p, int len, char **str);
|
int decode_general_string (unsigned char *p, int len, general_string *str);
|
||||||
int decode_octet_string (unsigned char *p, int len, krb5_data *k);
|
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 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_int (unsigned char *p, int len, unsigned val);
|
||||||
int der_put_length (unsigned char *p, int len, int 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_general_string (unsigned char *p, int len, general_string *str);
|
||||||
int der_put_octet_string (unsigned char *p, int len, krb5_data *data);
|
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 der_put_tag (unsigned char *p, int len, Der_class class, Der_type type,
|
||||||
int tag);
|
int tag);
|
||||||
int der_put_length_and_tag (unsigned char *p, int len, int len_val,
|
int der_put_length_and_tag (unsigned char *p, int len, int len_val,
|
||||||
Der_class class, Der_type type, int tag);
|
Der_class class, Der_type type, int tag);
|
||||||
int encode_integer (unsigned char *p, int len, unsigned *data);
|
int encode_integer (unsigned char *p, int len, unsigned *data);
|
||||||
int encode_general_string (unsigned char *p, int len, char **data);
|
int encode_general_string (unsigned char *p, int len, general_string *data);
|
||||||
int encode_octet_string (unsigned char *p, int len, krb5_data *k);
|
int encode_octet_string (unsigned char *p, int len, octet_string *k);
|
||||||
int encode_generalized_time (unsigned char *p, int len, time_t *t);
|
int encode_generalized_time (unsigned char *p, int len, time_t *t);
|
||||||
|
|
||||||
void free_integer (unsigned *num);
|
void free_integer (unsigned *num);
|
||||||
void free_general_string (char **str);
|
void free_general_string (general_string *str);
|
||||||
void free_octet_string (krb5_data *k);
|
void free_octet_string (octet_string *k);
|
||||||
void free_generalized_time (time_t *t);
|
void free_generalized_time (time_t *t);
|
||||||
|
|
||||||
size_t length_len (int len);
|
size_t length_len (int len);
|
||||||
size_t length_integer (unsigned *data);
|
size_t length_integer (unsigned *data);
|
||||||
size_t length_general_string (char **data);
|
size_t length_general_string (general_string *data);
|
||||||
size_t length_octet_string (krb5_data *k);
|
size_t length_octet_string (octet_string *k);
|
||||||
size_t length_generalized_time (time_t *t);
|
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__ */
|
||||||
|
@@ -1,18 +1,18 @@
|
|||||||
#include "asn1_locl.h"
|
#include "libasn1.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
void
|
void
|
||||||
copy_general_string (char **from, char **to)
|
copy_general_string (general_string *from, general_string *to)
|
||||||
{
|
{
|
||||||
*to = malloc(strlen(*from) + 1);
|
*to = malloc(strlen(*from) + 1);
|
||||||
strcpy(*to, *from);
|
strcpy(*to, *from);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
copy_octet_string (krb5_data *from, krb5_data *to)
|
copy_octet_string (octet_string *from, octet_string *to)
|
||||||
{
|
{
|
||||||
to->len = from->len;
|
to->length = from->length;
|
||||||
to->data = malloc(to->len);
|
to->data = malloc(to->length);
|
||||||
memcpy(to->data, from->data, to->len);
|
memcpy(to->data, from->data, to->length);
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
#include "asn1_locl.h"
|
#include "libasn1.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
void
|
void
|
||||||
free_general_string (char **str)
|
free_general_string (general_string *str)
|
||||||
{
|
{
|
||||||
free(*str);
|
free(*str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
free_octet_string (krb5_data *k)
|
free_octet_string (octet_string *k)
|
||||||
{
|
{
|
||||||
free(k->data);
|
free(k->data);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "asn1_locl.h"
|
#include "libasn1.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ der_get_length (unsigned char *p, int len, int *ret)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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;
|
int l, slen;
|
||||||
char *s;
|
char *s;
|
||||||
@@ -71,7 +71,7 @@ der_get_general_string (unsigned char *p, int len, char **str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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;
|
int l, slen;
|
||||||
|
|
||||||
@@ -82,9 +82,9 @@ der_get_octet_string (unsigned char *p, int len, krb5_data *data)
|
|||||||
len -= l;
|
len -= l;
|
||||||
if (len < slen)
|
if (len < slen)
|
||||||
return -1;
|
return -1;
|
||||||
data->len = slen;
|
data->length = slen;
|
||||||
data->data = malloc(slen);
|
data->data = malloc(slen);
|
||||||
if (data->data == NULL && data->len != 0)
|
if (data->data == NULL && data->length != 0)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy (data->data, p, slen);
|
memcpy (data->data, p, slen);
|
||||||
return slen + l;
|
return slen + l;
|
||||||
@@ -171,7 +171,7 @@ decode_integer (unsigned char *p, int len, unsigned *num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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 ret = 0;
|
||||||
int l;
|
int l;
|
||||||
@@ -192,7 +192,7 @@ decode_general_string (unsigned char *p, int len, char **str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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 ret = 0;
|
||||||
int l;
|
int l;
|
||||||
@@ -228,7 +228,7 @@ generalizedtime2time (char *s, time_t *t)
|
|||||||
int
|
int
|
||||||
decode_generalized_time (unsigned char *p, int len, time_t *t)
|
decode_generalized_time (unsigned char *p, int len, time_t *t)
|
||||||
{
|
{
|
||||||
krb5_data k;
|
octet_string k;
|
||||||
char times[32]; /* XXX */
|
char times[32]; /* XXX */
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int l;
|
int l;
|
||||||
@@ -245,8 +245,8 @@ decode_generalized_time (unsigned char *p, int len, time_t *t)
|
|||||||
p += l;
|
p += l;
|
||||||
len -= l;
|
len -= l;
|
||||||
ret += l;
|
ret += l;
|
||||||
strncpy(times, (char*)k.data, k.len);
|
strncpy(times, (char*)k.data, k.length);
|
||||||
times[k.len] = 0;
|
times[k.length] = 0;
|
||||||
generalizedtime2time (times, t);
|
generalizedtime2time (times, t);
|
||||||
free (k.data);
|
free (k.data);
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#include "asn1_locl.h"
|
#include "libasn1.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ length_integer (unsigned *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
length_general_string (char **data)
|
length_general_string (general_string *data)
|
||||||
{
|
{
|
||||||
char *str = *data;
|
char *str = *data;
|
||||||
size_t len = strlen(str);
|
size_t len = strlen(str);
|
||||||
@@ -40,19 +40,19 @@ length_general_string (char **data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
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
|
size_t
|
||||||
length_generalized_time (time_t *t)
|
length_generalized_time (time_t *t)
|
||||||
{
|
{
|
||||||
krb5_data k;
|
octet_string k;
|
||||||
size_t ret;
|
size_t ret;
|
||||||
|
|
||||||
time2generalizedtime (*t, &k);
|
time2generalizedtime (*t, &k);
|
||||||
ret = 1 + length_len(k.len) + k.len;
|
ret = 1 + length_len(k.length) + k.length;
|
||||||
free (k.data);
|
free (k.data);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
#include "asn1_locl.h"
|
#include "libasn1.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
@@ -57,16 +57,16 @@ der_put_length (unsigned char *p, int len, int val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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;
|
int l;
|
||||||
|
|
||||||
if (len < slen)
|
if (len < slen)
|
||||||
return -1;
|
return -1;
|
||||||
p -= slen;
|
p -= slen;
|
||||||
len -= slen;
|
len -= slen;
|
||||||
memcpy (p+1, str, slen);
|
memcpy (p+1, *str, slen);
|
||||||
l = der_put_length (p, len, slen);
|
l = der_put_length (p, len, slen);
|
||||||
if(l < 0)
|
if(l < 0)
|
||||||
return l;
|
return l;
|
||||||
@@ -74,19 +74,19 @@ der_put_general_string (unsigned char *p, int len, char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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;
|
int l;
|
||||||
|
|
||||||
if (len < data->len)
|
if (len < data->length)
|
||||||
return -1;
|
return -1;
|
||||||
p -= data->len;
|
p -= data->length;
|
||||||
len -= data->len;
|
len -= data->length;
|
||||||
memcpy (p+1, data->data, data->len);
|
memcpy (p+1, data->data, data->length);
|
||||||
l = der_put_length (p, len, data->len);
|
l = der_put_length (p, len, data->length);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return l;
|
return l;
|
||||||
return l + data->len;
|
return l + data->length;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -150,13 +150,12 @@ encode_integer (unsigned char *p, int len, unsigned *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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 ret = 0;
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
l = der_put_general_string (p, len, str);
|
l = der_put_general_string (p, len, data);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return l;
|
return l;
|
||||||
p -= l;
|
p -= l;
|
||||||
@@ -172,7 +171,7 @@ encode_general_string (unsigned char *p, int len, char **data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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 ret = 0;
|
||||||
int l;
|
int l;
|
||||||
@@ -193,12 +192,12 @@ encode_octet_string (unsigned char *p, int len, krb5_data *k)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
time2generalizedtime (time_t t, krb5_data *s)
|
time2generalizedtime (time_t t, octet_string *s)
|
||||||
{
|
{
|
||||||
struct tm *tm;
|
struct tm *tm;
|
||||||
|
|
||||||
s->data = malloc(16);
|
s->data = malloc(16);
|
||||||
s->len = 15;
|
s->length = 15;
|
||||||
tm = gmtime (&t);
|
tm = gmtime (&t);
|
||||||
sprintf (s->data, "%04d%02d%02d%02d%02d%02dZ", tm->tm_year + 1900,
|
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,
|
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
|
int
|
||||||
encode_generalized_time (unsigned char *p, int len, time_t *t)
|
encode_generalized_time (unsigned char *p, int len, time_t *t)
|
||||||
{
|
{
|
||||||
krb5_data k;
|
octet_string k;
|
||||||
int l;
|
int l;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
@@ -24,6 +24,23 @@ init_generate (char *filename)
|
|||||||
fprintf (headerfile,
|
fprintf (headerfile,
|
||||||
"#ifndef __" STEM "_h__\n"
|
"#ifndef __" STEM "_h__\n"
|
||||||
"#define __" STEM "_h__\n\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");
|
logfile = fopen(STEM "_files", "w");
|
||||||
if (logfile == NULL) {
|
if (logfile == NULL) {
|
||||||
fprintf (stderr, "Could not open " STEM "_files" "\n");
|
fprintf (stderr, "Could not open " STEM "_files" "\n");
|
||||||
@@ -152,7 +169,7 @@ define_type (int level, char *name, Type *t)
|
|||||||
break;
|
break;
|
||||||
case TOctetString:
|
case TOctetString:
|
||||||
space(level);
|
space(level);
|
||||||
fprintf (headerfile, "krb5_data %s;\n", name);
|
fprintf (headerfile, "octet_string %s;\n", name);
|
||||||
break;
|
break;
|
||||||
case TBitString: {
|
case TBitString: {
|
||||||
Member *m;
|
Member *m;
|
||||||
@@ -218,7 +235,7 @@ define_type (int level, char *name, Type *t)
|
|||||||
break;
|
break;
|
||||||
case TGeneralString:
|
case TGeneralString:
|
||||||
space(level);
|
space(level);
|
||||||
fprintf (headerfile, "char *%s;\n", name);
|
fprintf (headerfile, "general_string %s;\n", name);
|
||||||
break;
|
break;
|
||||||
case TApplication:
|
case TApplication:
|
||||||
define_type (level, name, t->subtype);
|
define_type (level, name, t->subtype);
|
||||||
@@ -261,8 +278,8 @@ generate_type (Symbol *s)
|
|||||||
"#include <stdio.h>\n"
|
"#include <stdio.h>\n"
|
||||||
"#include <stdlib.h>\n"
|
"#include <stdlib.h>\n"
|
||||||
"#include <time.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);
|
orig_filename);
|
||||||
generate_type_header (s);
|
generate_type_header (s);
|
||||||
generate_type_encode (s);
|
generate_type_encode (s);
|
||||||
|
Reference in New Issue
Block a user