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,
general_string *str, size_t *size)
{
size_t l, slen;
char *s;
int e;
e = der_get_length (p, len, &slen, &l);
if (e) return e;
p += l;
len -= l;
if (len < slen)
return ASN1_OVERRUN;
s = malloc (slen + 1);
s = malloc (len + 1);
if (s == NULL)
return ENOMEM;
memcpy (s, p, slen);
s[slen] = '\0';
memcpy (s, p, len);
s[len] = '\0';
*str = s;
if(size) *size = slen + l;
if(size) *size = len;
return 0;
}
@@ -139,21 +131,12 @@ int
der_get_octet_string (unsigned char *p, size_t len,
octet_string *data, size_t *size)
{
size_t l, slen;
int e;
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);
data->length = len;
data->data = malloc(len);
if (data->data == NULL && data->length != 0)
return ENOMEM;
memcpy (data->data, p, slen);
if(size) *size = slen + l;
memcpy (data->data, p, len);
if(size) *size = len;
return 0;
}
@@ -247,13 +230,23 @@ decode_general_string (unsigned char *p, size_t len,
size_t ret = 0;
size_t l;
int e;
size_t slen;
e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralString, &l);
if (e) return e;
p += l;
len -= 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;
p += l;
len -= l;
@@ -269,13 +262,23 @@ decode_octet_string (unsigned char *p, size_t len,
size_t ret = 0;
size_t l;
int e;
size_t slen;
e = der_match_tag (p, len, UNIV, PRIM, UT_OctetString, &l);
if (e) return e;
p += l;
len -= 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;
p += 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 l;
int e;
size_t slen;
e = der_match_tag (p, len, UNIV, PRIM, UT_GeneralizedTime, &l);
if (e) return e;
p += l;
len -= 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;
p += 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)
{
size_t slen = strlen(*str);
size_t l;
int e;
if (len < slen)
return ASN1_OVERFLOW;
p -= slen;
len -= slen;
memcpy (p+1, *str, slen);
e = der_put_length (p, len, slen, &l);
if(e)
return e;
*size = slen + l;
*size = slen;
return 0;
}
@@ -162,18 +157,12 @@ int
der_put_octet_string (unsigned char *p, size_t len,
octet_string *data, size_t *size)
{
size_t l;
int e;
if (len < data->length)
return ASN1_OVERFLOW;
p -= data->length;
len -= data->length;
memcpy (p+1, data->data, data->length);
e = der_put_length (p, len, data->length, &l);
if(e)
return e;
*size = l + data->length;
*size = data->length;
return 0;
}
@@ -256,6 +245,12 @@ encode_general_string (unsigned char *p, size_t len,
p -= l;
len -= 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);
if (e)
return e;
@@ -280,6 +275,12 @@ encode_octet_string (unsigned char *p, size_t len,
p -= l;
len -= 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);
if (e)
return e;