aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/asn.1/asn1_k_encode.c
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2012-02-12 17:13:24 +0000
committerGreg Hudson <ghudson@mit.edu>2012-02-12 17:13:24 +0000
commit278b6a29d425ddca787d6d87dea14be48e45c13a (patch)
tree6e59d51222adc68be0ea81110705874aac9b0b62 /src/lib/krb5/asn.1/asn1_k_encode.c
parent718e993720682d6e2b7cc54ab699d2fd3f58446d (diff)
downloadkrb5-278b6a29d425ddca787d6d87dea14be48e45c13a.zip
krb5-278b6a29d425ddca787d6d87dea14be48e45c13a.tar.gz
krb5-278b6a29d425ddca787d6d87dea14be48e45c13a.tar.bz2
Separate tag info and length in ASN.1 encoder
Remove the length field of taginfo, and change the internal ASN.1 encoder interfaces to return length separately from tag info. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25698 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/asn.1/asn1_k_encode.c')
-rw-r--r--src/lib/krb5/asn.1/asn1_k_encode.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/lib/krb5/asn.1/asn1_k_encode.c b/src/lib/krb5/asn.1/asn1_k_encode.c
index a48db98..5ed1752 100644
--- a/src/lib/krb5/asn.1/asn1_k_encode.c
+++ b/src/lib/krb5/asn.1/asn1_k_encode.c
@@ -94,13 +94,13 @@ DEFOPTIONALZEROTYPE(opt_principal, principal);
* with old implementations.
*/
static asn1_error_code
-encode_seqno(asn1buf *buf, const void *p, taginfo *rettag)
+encode_seqno(asn1buf *buf, const void *p, taginfo *rettag, size_t *len_out)
{
krb5_ui_4 val = *(krb5_ui_4 *)p;
rettag->asn1class = UNIVERSAL;
rettag->construction = PRIMITIVE;
rettag->tagnum = ASN1_INTEGER;
- return k5_asn1_encode_uint(buf, val, &rettag->length);
+ return k5_asn1_encode_uint(buf, val, len_out);
}
static asn1_error_code
decode_seqno(const taginfo *t, const unsigned char *asn1, size_t len, void *p)
@@ -128,14 +128,15 @@ DEFOPTIONALZEROTYPE(opt_seqno, seqno);
/* Define the kerberos_time type, which is an ASN.1 generaltime represented in
* a krb5_timestamp. */
static asn1_error_code
-encode_kerberos_time(asn1buf *buf, const void *p, taginfo *rettag)
+encode_kerberos_time(asn1buf *buf, const void *p, taginfo *rettag,
+ size_t *len_out)
{
/* Range checking for time_t vs krb5_timestamp? */
time_t val = *(krb5_timestamp *)p;
rettag->asn1class = UNIVERSAL;
rettag->construction = PRIMITIVE;
rettag->tagnum = ASN1_GENERALTIME;
- return k5_asn1_encode_generaltime(buf, val, &rettag->length);
+ return k5_asn1_encode_generaltime(buf, val, len_out);
}
static asn1_error_code
decode_kerberos_time(const taginfo *t, const unsigned char *asn1, size_t len,
@@ -190,14 +191,15 @@ DEFOPTIONALTYPE(opt_encrypted_data, nonempty_enc_data, NULL, encrypted_data);
/* Define the krb5_flags type, which is an ASN.1 bit string represented in a
* 32-bit integer. */
static asn1_error_code
-encode_krb5_flags(asn1buf *buf, const void *p, taginfo *rettag)
+encode_krb5_flags(asn1buf *buf, const void *p, taginfo *rettag,
+ size_t *len_out)
{
unsigned char cbuf[4], *cptr = cbuf;
store_32_be((krb5_ui_4)*(const krb5_flags *)p, cbuf);
rettag->asn1class = UNIVERSAL;
rettag->construction = PRIMITIVE;
rettag->tagnum = ASN1_BITSTRING;
- return k5_asn1_encode_bitstring(buf, &cptr, 4, &rettag->length);
+ return k5_asn1_encode_bitstring(buf, &cptr, 4, len_out);
}
static asn1_error_code
decode_krb5_flags(const taginfo *t, const unsigned char *asn1, size_t len,
@@ -277,13 +279,13 @@ DEFOPTIONALZEROTYPE(opt_checksum_ptr, checksum_ptr);
/* Define the last_req_type type, which is a krb5_int32 with some massaging
* on decode for backward compatibility. */
static asn1_error_code
-encode_lr_type(asn1buf *buf, const void *p, taginfo *rettag)
+encode_lr_type(asn1buf *buf, const void *p, taginfo *rettag, size_t *len_out)
{
krb5_int32 val = *(krb5_int32 *)p;
rettag->asn1class = UNIVERSAL;
rettag->construction = PRIMITIVE;
rettag->tagnum = ASN1_INTEGER;
- return k5_asn1_encode_int(buf, val, &rettag->length);
+ return k5_asn1_encode_int(buf, val, len_out);
}
static asn1_error_code
decode_lr_type(const taginfo *t, const unsigned char *asn1, size_t len,
@@ -434,7 +436,8 @@ static const struct atype_info *kdc_req_hack_fields[] = {
};
DEFSEQTYPE(kdc_req_body_hack, kdc_req_hack, kdc_req_hack_fields);
static asn1_error_code
-encode_kdc_req_body(asn1buf *buf, const void *p, taginfo *tag_out)
+encode_kdc_req_body(asn1buf *buf, const void *p, taginfo *tag_out,
+ size_t *len_out)
{
const krb5_kdc_req *val = p;
kdc_req_hack h;
@@ -448,7 +451,8 @@ encode_kdc_req_body(asn1buf *buf, const void *p, taginfo *tag_out)
h.server_realm = val->server->realm;
else
return ASN1_MISSING_FIELD;
- return k5_asn1_encode_atype(buf, &h, &k5_atype_kdc_req_body_hack, tag_out);
+ return k5_asn1_encode_atype(buf, &h, &k5_atype_kdc_req_body_hack, tag_out,
+ len_out);
}
static void
free_kdc_req_body(void *val)