make functions more consistent

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6994 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1999-09-20 22:37:43 +00:00
parent d2f800defd
commit 01959cb376
2 changed files with 53 additions and 41 deletions

View File

@@ -115,23 +115,15 @@ int
der_get_general_string (unsigned char *p, size_t len, der_get_general_string (unsigned char *p, size_t len,
general_string *str, size_t *size) general_string *str, size_t *size)
{ {
size_t l, slen;
char *s; char *s;
int e;
e = der_get_length (p, len, &slen, &l); s = malloc (len + 1);
if (e) return e;
p += l;
len -= l;
if (len < slen)
return ASN1_OVERRUN;
s = malloc (slen + 1);
if (s == NULL) if (s == NULL)
return ENOMEM; return ENOMEM;
memcpy (s, p, slen); memcpy (s, p, len);
s[slen] = '\0'; s[len] = '\0';
*str = s; *str = s;
if(size) *size = slen + l; if(size) *size = len;
return 0; return 0;
} }
@@ -139,21 +131,12 @@ int
der_get_octet_string (unsigned char *p, size_t len, der_get_octet_string (unsigned char *p, size_t len,
octet_string *data, size_t *size) octet_string *data, size_t *size)
{ {
size_t l, slen; data->length = len;
int e; data->data = malloc(len);
e = der_get_length (p, len, &slen, &l);
if (e) return e;
p += l;
len -= l;
if (len < slen)
return ASN1_OVERRUN;
data->length = slen;
data->data = malloc(slen);
if (data->data == NULL && data->length != 0) if (data->data == NULL && data->length != 0)
return ENOMEM; return ENOMEM;
memcpy (data->data, p, slen); memcpy (data->data, p, len);
if(size) *size = slen + l; if(size) *size = len;
return 0; return 0;
} }
@@ -247,13 +230,23 @@ decode_general_string (unsigned char *p, size_t len,
size_t ret = 0; size_t ret = 0;
size_t l; size_t l;
int e; int e;
size_t slen;
e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralString, &l); e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralString, &l);
if (e) return e; if (e) return e;
p += l; p += l;
len -= l; len -= l;
ret += l; ret += l;
e = der_get_general_string (p, len, str, &l);
e = der_get_length (p, len, &slen, &l);
if (e) return e;
p += l;
len -= l;
ret += l;
if (len < slen)
return ASN1_OVERRUN;
e = der_get_general_string (p, slen, str, &l);
if (e) return e; if (e) return e;
p += l; p += l;
len -= l; len -= l;
@@ -269,13 +262,23 @@ decode_octet_string (unsigned char *p, size_t len,
size_t ret = 0; size_t ret = 0;
size_t l; size_t l;
int e; int e;
size_t slen;
e = der_match_tag (p, len, UNIV, PRIM, UT_OctetString, &l); e = der_match_tag (p, len, UNIV, PRIM, UT_OctetString, &l);
if (e) return e; if (e) return e;
p += l; p += l;
len -= l; len -= l;
ret += l; ret += l;
e = der_get_octet_string (p, len, k, &l);
e = der_get_length (p, len, &slen, &l);
if (e) return e;
p += l;
len -= l;
ret += l;
if (len < slen)
return ASN1_OVERRUN;
e = der_get_octet_string (p, slen, k, &l);
if (e) return e; if (e) return e;
p += l; p += l;
len -= l; len -= l;
@@ -306,13 +309,21 @@ decode_generalized_time (unsigned char *p, size_t len, time_t *t, size_t *size)
size_t ret = 0; size_t ret = 0;
size_t l; size_t l;
int e; int e;
size_t slen;
e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralizedTime, &l); e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralizedTime, &l);
if (e) return e; if (e) return e;
p += l; p += l;
len -= l; len -= l;
ret += l; ret += l;
e = der_get_octet_string (p, len, &k, &l);
e = der_get_length (p, len, &slen, &l);
if (e) return e;
p += l;
len -= l;
if (len < slen)
return ASN1_OVERRUN;
e = der_get_octet_string (p, slen, &k, &l);
if (e) return e; if (e) return e;
p += l; p += l;
len -= l; len -= l;

View File

@@ -143,18 +143,13 @@ der_put_general_string (unsigned char *p, size_t len,
general_string *str, size_t *size) general_string *str, size_t *size)
{ {
size_t slen = strlen(*str); size_t slen = strlen(*str);
size_t l;
int e;
if (len < slen) if (len < slen)
return ASN1_OVERFLOW; return ASN1_OVERFLOW;
p -= slen; p -= slen;
len -= slen; len -= slen;
memcpy (p+1, *str, slen); memcpy (p+1, *str, slen);
e = der_put_length (p, len, slen, &l); *size = slen;
if(e)
return e;
*size = slen + l;
return 0; return 0;
} }
@@ -162,18 +157,12 @@ int
der_put_octet_string (unsigned char *p, size_t len, der_put_octet_string (unsigned char *p, size_t len,
octet_string *data, size_t *size) octet_string *data, size_t *size)
{ {
size_t l;
int e;
if (len < data->length) if (len < data->length)
return ASN1_OVERFLOW; return ASN1_OVERFLOW;
p -= data->length; p -= data->length;
len -= data->length; len -= data->length;
memcpy (p+1, data->data, data->length); memcpy (p+1, data->data, data->length);
e = der_put_length (p, len, data->length, &l); *size = data->length;
if(e)
return e;
*size = l + data->length;
return 0; return 0;
} }
@@ -256,6 +245,12 @@ encode_general_string (unsigned char *p, size_t len,
p -= l; p -= l;
len -= l; len -= l;
ret += l; ret += l;
e = der_put_length (p, len, l, &l);
if (e)
return e;
p -= l;
len -= l;
ret += l;
e = der_put_tag (p, len, UNIV, PRIM, UT_GeneralString, &l); e = der_put_tag (p, len, UNIV, PRIM, UT_GeneralString, &l);
if (e) if (e)
return e; return e;
@@ -280,6 +275,12 @@ encode_octet_string (unsigned char *p, size_t len,
p -= l; p -= l;
len -= l; len -= l;
ret += l; ret += l;
e = der_put_length (p, len, l, &l);
if (e)
return e;
p -= l;
len -= l;
ret += l;
e = der_put_tag (p, len, UNIV, PRIM, UT_OctetString, &l); e = der_put_tag (p, len, UNIV, PRIM, UT_OctetString, &l);
if (e) if (e)
return e; return e;