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:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user