add ENUMERATED and OBJECT IDENTIFIER
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10741 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -159,6 +159,36 @@ der_put_octet_string (unsigned char *p, size_t len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
der_put_oid (unsigned char *p, size_t len,
|
||||
const oid *data, size_t *size)
|
||||
{
|
||||
unsigned char *base = p;
|
||||
int n;
|
||||
|
||||
for (n = data->length - 1; n >= 2; --n) {
|
||||
unsigned u = data->components[n];
|
||||
|
||||
if (len < 1)
|
||||
return ASN1_OVERFLOW;
|
||||
*p-- = u % 128;
|
||||
u /= 128;
|
||||
--len;
|
||||
while (u > 0) {
|
||||
if (len < 1)
|
||||
return ASN1_OVERFLOW;
|
||||
*p-- = 128 + u % 128;
|
||||
u /= 128;
|
||||
--len;
|
||||
}
|
||||
}
|
||||
if (len < 1)
|
||||
return ASN1_OVERFLOW;
|
||||
*p-- = 40 * data->components[0] + data->components[1];
|
||||
*size = base - p;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
der_put_tag (unsigned char *p, size_t len, Der_class class, Der_type type,
|
||||
int tag, size_t *size)
|
||||
@@ -243,6 +273,31 @@ encode_unsigned (unsigned char *p, size_t len, const unsigned *data,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
encode_enumerated (unsigned char *p, size_t len, const unsigned *data,
|
||||
size_t *size)
|
||||
{
|
||||
unsigned num = *data;
|
||||
size_t ret = 0;
|
||||
size_t l;
|
||||
int e;
|
||||
|
||||
e = der_put_int (p, len, num, &l);
|
||||
if(e)
|
||||
return e;
|
||||
p -= l;
|
||||
len -= l;
|
||||
ret += l;
|
||||
e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_Enumerated, &l);
|
||||
if (e)
|
||||
return e;
|
||||
p -= l;
|
||||
len -= l;
|
||||
ret += l;
|
||||
*size = ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
encode_general_string (unsigned char *p, size_t len,
|
||||
const general_string *data, size_t *size)
|
||||
@@ -291,6 +346,30 @@ encode_octet_string (unsigned char *p, size_t len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
encode_oid(unsigned char *p, size_t len,
|
||||
const oid *k, size_t *size)
|
||||
{
|
||||
size_t ret = 0;
|
||||
size_t l;
|
||||
int e;
|
||||
|
||||
e = der_put_oid (p, len, k, &l);
|
||||
if (e)
|
||||
return e;
|
||||
p -= l;
|
||||
len -= l;
|
||||
ret += l;
|
||||
e = der_put_length_and_tag (p, len, l, UNIV, PRIM, UT_OID, &l);
|
||||
if (e)
|
||||
return e;
|
||||
p -= l;
|
||||
len -= l;
|
||||
ret += l;
|
||||
*size = ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
time2generalizedtime (time_t t, octet_string *s)
|
||||
{
|
||||
|
Reference in New Issue
Block a user