diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/krb5/asn.1/asn1_encode.c | 34 | ||||
| -rw-r--r-- | src/lib/krb5/asn.1/asn1_encode.h | 82 | ||||
| -rw-r--r-- | src/lib/krb5/asn.1/asn1_k_encode.c | 634 | ||||
| -rw-r--r-- | src/lib/krb5/asn.1/ldap_key_seq.c | 24 |
4 files changed, 418 insertions, 356 deletions
diff --git a/src/lib/krb5/asn.1/asn1_encode.c b/src/lib/krb5/asn.1/asn1_encode.c index 3d82ac84f..41edc6e6d 100644 --- a/src/lib/krb5/asn.1/asn1_encode.c +++ b/src/lib/krb5/asn.1/asn1_encode.c @@ -304,11 +304,14 @@ encode_type(asn1buf *buf, const void *val, const struct atype_info *a, case atype_tagged_thing: { const struct tagged_info *tag = a->tinfo; - retval = encode_type(buf, val, tag->basetype, &length, NULL); - if (retval) - return retval; + if (tag->implicit) { + retval = encode_type(buf, val, tag->basetype, &length, + &construction); + } else { + retval = encode_type(buf, val, tag->basetype, &length, NULL); + construction = tag->construction; + } tagclass = tag->tagtype; - construction = tag->construction; tagnum = tag->tagval; break; } @@ -380,6 +383,7 @@ encode_a_field(asn1buf *buf, const void *val, const struct field_info *field, if (val == NULL) return ASN1_MISSING_FIELD; assert(omit_tag == NULL || field->tag < 0); + assert(!(field->tag_implicit && field->tag < 0)); /* * In the switch statement, either (1) encode the contents of the field and @@ -454,7 +458,11 @@ encode_a_field(asn1buf *buf, const void *val, const struct field_info *field, const void *dataptr = (const char *)val + field->dataoff; if (omit_tag != NULL) return encode_type(buf, dataptr, field->atype, retlen, omit_tag); - retval = encode_type(buf, dataptr, field->atype, &length, NULL); + if (field->tag_implicit) { + retval = encode_type(buf, dataptr, field->atype, &length, + &construction); + } else + retval = encode_type(buf, dataptr, field->atype, &length, NULL); if (retval) return retval; break; @@ -471,6 +479,7 @@ encode_a_field(asn1buf *buf, const void *val, const struct field_info *field, a = field->atype; assert(a->type == atype_string || a->type == atype_opaque); + assert(!(a->type == atype_opaque && field->tag_implicit)); assert(field->lentype != 0); assert(field->lentype->type == atype_int || field->lentype->type == atype_uint); assert(sizeof(int) <= sizeof(asn1_intmax)); @@ -508,7 +517,7 @@ encode_a_field(asn1buf *buf, const void *val, const struct field_info *field, if (a->type == atype_string) tagnum = string->tagval; else - assert(omit_tag == NULL); + assert(omit_tag == NULL && !field->tag_implicit); break; } default: @@ -519,7 +528,7 @@ encode_a_field(asn1buf *buf, const void *val, const struct field_info *field, } sum += length; - if (omit_tag == NULL && tagnum >= 0) { + if (tagnum >= 0 && omit_tag == NULL && !field->tag_implicit) { /* We have not yet encoded the field's outer tag and should do so. */ retval = asn1_make_tag(buf, tagclass, construction, tagnum, sum, &length); @@ -531,12 +540,15 @@ encode_a_field(asn1buf *buf, const void *val, const struct field_info *field, *omit_tag = construction; } + /* Maybe add a context tag. Explicit tags are always constructed; implicit + * tags are primitive if the replaced outer tag would have been. */ if (field->tag >= 0) { - retval = asn1_make_etag(buf, CONTEXT_SPECIFIC, field->tag, sum, - &length); - if (retval) { + if (!field->tag_implicit) + construction = CONSTRUCTED; + retval = asn1_make_tag(buf, CONTEXT_SPECIFIC, construction, field->tag, + sum, &length); + if (retval) return retval; - } sum += length; } *retlen = sum; diff --git a/src/lib/krb5/asn.1/asn1_encode.h b/src/lib/krb5/asn.1/asn1_encode.h index ed2eb18e9..85e4861a5 100644 --- a/src/lib/krb5/asn.1/asn1_encode.h +++ b/src/lib/krb5/asn.1/asn1_encode.h @@ -164,7 +164,8 @@ enum atype_type { * primitive_info *. */ atype_primitive, /* Encoder function (with tag) to be called with address of <thing>. tinfo - * is a struct primitive_info * with tagval ignored. */ + * is a struct primitive_info * with tagval ignored. Cannot be used + * with an implicit tag. */ atype_fn, /* * Encoder function (contents only) to be called with address of <thing> @@ -175,7 +176,7 @@ enum atype_type { atype_string, /* * As above, but the encoder function produces the tag as well as the - * contents. + * contents. Cannot be used with an implicit context tag. */ atype_opaque, /* @@ -201,9 +202,9 @@ enum atype_type { atype_nullterm_sequence_of, atype_nonempty_nullterm_sequence_of, /* - * Encode this object using a single field descriptor. tinfo is a - * struct field_info *. This may mean the atype/field breakdown - * needs revision.... + * Encode this object using a single field descriptor. tinfo is a struct + * field_info *. Cannot be used with an implicit tag. The presence of + * this type may mean the atype/field breakdown needs revision.... * * Main expected uses: Encode realm component of principal as a * GENERALSTRING. Pluck data and length fields out of a structure @@ -244,7 +245,7 @@ struct ptr_info { }; struct tagged_info { - unsigned int tagval : 16, tagtype : 8, construction : 8; + unsigned int tagval : 16, tagtype : 8, construction : 6, implicit : 1; const struct atype_info *basetype; }; @@ -475,16 +476,20 @@ struct uint_info { const struct atype_info krb5int_asn1type_##DESCNAME = { \ atype_field, sizeof(CTYPENAME), &aux_fieldinfo_##DESCNAME \ } -/* Objects with an APPLICATION tag added. */ -#define DEFAPPTAGGEDTYPE(DESCNAME, TAG, BASEDESC) \ +/* Objects with an explicit or implicit tag. (Implicit tags will ignore the + * construction field.) */ +#define DEFTAGGEDTYPE(DESCNAME, CLASS, CONSTRUCTION, TAG, IMPLICIT, BASEDESC) \ typedef aux_typedefname_##BASEDESC aux_typedefname_##DESCNAME; \ static const struct tagged_info aux_info_##DESCNAME = { \ - TAG, APPLICATION, CONSTRUCTED, &krb5int_asn1type_##BASEDESC \ + TAG, CLASS, CONSTRUCTION, IMPLICIT, &krb5int_asn1type_##BASEDESC \ }; \ const struct atype_info krb5int_asn1type_##DESCNAME = { \ atype_tagged_thing, sizeof(aux_typedefname_##DESCNAME), \ &aux_info_##DESCNAME \ } +/* Objects with an explicit APPLICATION tag added. */ +#define DEFAPPTAGGEDTYPE(DESCNAME, TAG, BASEDESC) \ + DEFTAGGEDTYPE(DESCNAME, APPLICATION, CONSTRUCTED, TAG, 0, BASEDESC) /** * An encoding wrapped in an octet string @@ -492,7 +497,8 @@ struct uint_info { #define DEFOCTETWRAPTYPE(DESCNAME, BASEDESC) \ typedef aux_typedefname_##BASEDESC aux_typedefname_##DESCNAME; \ static const struct tagged_info aux_info_##DESCNAME = { \ - ASN1_OCTETSTRING, UNIVERSAL, PRIMITIVE, &krb5int_asn1type_##BASEDESC \ + ASN1_OCTETSTRING, UNIVERSAL, PRIMITIVE, 0, \ + &krb5int_asn1type_##BASEDESC \ }; \ const struct atype_info krb5int_asn1type_##DESCNAME = { \ atype_tagged_thing, sizeof(aux_typedefname_##DESCNAME), \ @@ -588,7 +594,8 @@ struct field_info { * to the encoding of the thing. (XXX This would encode more * compactly as an unsigned bitfield value tagnum+1, with 0=no * tag.) The tag is omitted for optional fields that are not - * present. + * present. If tag_implicit is set, then the context tag replaces + * the outer tag of the field. * * It's a bit illogical to combine the tag and other field info, * since really a sequence field could have zero or several @@ -599,6 +606,7 @@ struct field_info { * means skip tagging). */ signed int tag : 5; + unsigned int tag_implicit : 1; /* * If OPT is non-negative and the sequence header structure has a @@ -645,13 +653,13 @@ struct field_info { * Normal or optional sequence fields at a particular offset, encoded * as indicated by the listed DESCRiptor. */ -#define FIELDOF_OPT(TYPE,DESCR,FIELDNAME,TAG,OPT) \ +#define FIELDOF_OPT(TYPE,DESCR,FIELDNAME,TAG,IMPLICIT,OPT) \ { \ field_normal, OFFOF(TYPE, FIELDNAME, aux_typedefname_##DESCR), \ - 0, TAG, OPT, &krb5int_asn1type_##DESCR \ + 0, TAG, IMPLICIT, OPT, &krb5int_asn1type_##DESCR \ } -#define FIELDOF_NORM(TYPE,DESCR,FIELDNAME,TAG) \ - FIELDOF_OPT(TYPE,DESCR,FIELDNAME,TAG,-1) +#define FIELDOF_NORM(TYPE,DESCR,FIELDNAME,TAG,IMPLICIT) \ + FIELDOF_OPT(TYPE,DESCR,FIELDNAME,TAG,IMPLICIT,-1) /* * If encoding a subset of the fields of the current structure (for * example, a flat structure describing data that gets encoded as a @@ -659,47 +667,49 @@ struct field_info { * field name(s), and the indicated type descriptor must support the * current struct type. */ -#define FIELDOF_ENCODEAS(TYPE,DESCR,TAG) \ - FIELDOF_ENCODEAS_OPT(TYPE,DESCR,TAG,-1) -#define FIELDOF_ENCODEAS_OPT(TYPE,DESCR,TAG,OPT) \ +#define FIELDOF_ENCODEAS(TYPE,DESCR,TAG,IMPLICIT) \ + FIELDOF_ENCODEAS_OPT(TYPE,DESCR,TAG,IMPLICIT,-1) +#define FIELDOF_ENCODEAS_OPT(TYPE,DESCR,TAG,IMPLICIT,OPT) \ { \ field_normal, \ 0 * sizeof(0 ? (TYPE *)0 : (aux_typedefname_##DESCR *) 0), \ - 0, TAG, OPT, &krb5int_asn1type_##DESCR \ + 0, TAG, IMPLICIT, OPT, &krb5int_asn1type_##DESCR \ } /* * Reinterpret some subset of the structure itself as something * else. */ -#define FIELD_SELF(DESCR, TAG) \ - { field_normal, 0, 0, TAG, -1, &krb5int_asn1type_##DESCR } +#define FIELD_SELF(DESCR, TAG, IMPLICIT) \ + { field_normal, 0, 0, TAG, IMPLICIT, -1, &krb5int_asn1type_##DESCR } -#define FIELDOF_OPTSTRINGL(STYPE,DESC,PTRFIELD,LENDESC,LENFIELD,TAG,OPT) \ +#define FIELDOF_OPTSTRINGL(STYPE,DESC,PTRFIELD,LENDESC,LENFIELD,TAG,IMP,OPT) \ { \ field_string, \ OFFOF(STYPE, PTRFIELD, aux_typedefname_##DESC), \ OFFOF(STYPE, LENFIELD, aux_typedefname_##LENDESC), \ - TAG, OPT, &krb5int_asn1type_##DESC, &krb5int_asn1type_##LENDESC \ + TAG, IMP, OPT, \ + &krb5int_asn1type_##DESC, &krb5int_asn1type_##LENDESC \ } -#define FIELDOF_OPTSTRING(STYPE,DESC,PTRFIELD,LENFIELD,TAG,OPT) \ - FIELDOF_OPTSTRINGL(STYPE,DESC,PTRFIELD,uint,LENFIELD,TAG,OPT) -#define FIELDOF_STRINGL(STYPE,DESC,PTRFIELD,LENDESC,LENFIELD,TAG) \ - FIELDOF_OPTSTRINGL(STYPE,DESC,PTRFIELD,LENDESC,LENFIELD,TAG,-1) -#define FIELDOF_STRING(STYPE,DESC,PTRFIELD,LENFIELD,TAG) \ - FIELDOF_OPTSTRING(STYPE,DESC,PTRFIELD,LENFIELD,TAG,-1) -#define FIELD_INT_IMM(VALUE,TAG) \ - { field_immediate, VALUE, 0, TAG, -1, 0, } - -#define FIELDOF_SEQOF_LEN(STYPE,DESC,PTRFIELD,LENFIELD,LENTYPE,TAG) \ +#define FIELDOF_OPTSTRING(STYPE,DESC,PTRFIELD,LENFIELD,TAG,IMPLICIT,OPT) \ + FIELDOF_OPTSTRINGL(STYPE,DESC,PTRFIELD,uint,LENFIELD,TAG,IMPLICIT,OPT) +#define FIELDOF_STRINGL(STYPE,DESC,PTRFIELD,LENDESC,LENFIELD,TAG,IMPLICIT) \ + FIELDOF_OPTSTRINGL(STYPE,DESC,PTRFIELD,LENDESC,LENFIELD,TAG,IMPLICIT,-1) +#define FIELDOF_STRING(STYPE,DESC,PTRFIELD,LENFIELD,TAG,IMPLICIT) \ + FIELDOF_OPTSTRING(STYPE,DESC,PTRFIELD,LENFIELD,TAG,IMPLICIT,-1) +#define FIELD_INT_IMM(VALUE,TAG,IMPLICIT) \ + { field_immediate, VALUE, 0, TAG, IMPLICIT, -1, 0, } + +#define FIELDOF_SEQOF_LEN(STYPE,DESC,PTRFIELD,LENFIELD,LENTYPE,TAG,IMPLICIT) \ { \ field_sequenceof_len, \ OFFOF(STYPE, PTRFIELD, aux_typedefname_##DESC), \ OFFOF(STYPE, LENFIELD, aux_typedefname_##LENTYPE), \ - TAG, -1, &krb5int_asn1type_##DESC, &krb5int_asn1type_##LENTYPE \ + TAG, IMPLICIT, -1, \ + &krb5int_asn1type_##DESC, &krb5int_asn1type_##LENTYPE \ } -#define FIELDOF_SEQOF_INT32(STYPE,DESC,PTRFIELD,LENFIELD,TAG) \ - FIELDOF_SEQOF_LEN(STYPE,DESC,PTRFIELD,LENFIELD,int32,TAG) +#define FIELDOF_SEQOF_INT32(STYPE,DESC,PTRFIELD,LENFIELD,TAG,IMPLICIT) \ + FIELDOF_SEQOF_LEN(STYPE,DESC,PTRFIELD,LENFIELD,int32,TAG,IMPLICIT) struct seq_info { /* diff --git a/src/lib/krb5/asn.1/asn1_k_encode.c b/src/lib/krb5/asn.1/asn1_k_encode.c index 56b98022b..27b8de85e 100644 --- a/src/lib/krb5/asn.1/asn1_k_encode.c +++ b/src/lib/krb5/asn.1/asn1_k_encode.c @@ -88,23 +88,24 @@ DEFSTRINGTYPE(u_generalstring, unsigned char *, asn1_encode_bytestring, DEFOPAQUETYPE(opaque, char *, asn1_encode_bytestring); DEFFIELDTYPE(gstring_data, krb5_data, - FIELDOF_STRING(krb5_data, generalstring, data, length, -1)); + FIELDOF_STRING(krb5_data, generalstring, data, length, -1, 0)); DEFPTRTYPE(gstring_data_ptr,gstring_data); DEFFIELDTYPE(ostring_data, krb5_data, - FIELDOF_STRING(krb5_data, s_octetstring, data, length, -1)); + FIELDOF_STRING(krb5_data, s_octetstring, data, length, -1, 0)); DEFPTRTYPE(ostring_data_ptr,ostring_data); DEFFIELDTYPE(opaque_data, krb5_data, - FIELDOF_STRING(krb5_data, opaque, data, length, -1)); + FIELDOF_STRING(krb5_data, opaque, data, length, -1, 0)); DEFFIELDTYPE(realm_of_principal_data, krb5_principal_data, - FIELDOF_NORM(krb5_principal_data, gstring_data, realm, -1)); + FIELDOF_NORM(krb5_principal_data, gstring_data, realm, -1, 0)); DEFPTRTYPE(realm_of_principal, realm_of_principal_data); static const struct field_info princname_fields[] = { - FIELDOF_NORM(krb5_principal_data, int32, type, 0), - FIELDOF_SEQOF_INT32(krb5_principal_data, gstring_data_ptr, data, length, 1), + FIELDOF_NORM(krb5_principal_data, int32, type, 0, 0), + FIELDOF_SEQOF_INT32(krb5_principal_data, gstring_data_ptr, data, length, + 1, 0), }; /* * krb5_principal is a typedef for krb5_principal_data*, so this is @@ -125,8 +126,8 @@ DEFPRIMITIVETYPE(kerberos_time, krb5_timestamp, asn1_encode_kerberos_time_at, ASN1_GENERALTIME); const static struct field_info address_fields[] = { - FIELDOF_NORM(krb5_address, int32, addrtype, 0), - FIELDOF_STRING(krb5_address, octetstring, contents, length, 1), + FIELDOF_NORM(krb5_address, int32, addrtype, 0, 0), + FIELDOF_STRING(krb5_address, octetstring, contents, length, 1, 0), }; DEFSEQTYPE(address, krb5_address, address_fields, 0); DEFPTRTYPE(address_ptr, address); @@ -147,9 +148,9 @@ optional_encrypted_data (const void *vptr) } static const struct field_info encrypted_data_fields[] = { - FIELDOF_NORM(krb5_enc_data, int32, enctype, 0), - FIELDOF_OPT(krb5_enc_data, uint, kvno, 1, 1), - FIELDOF_NORM(krb5_enc_data, ostring_data, ciphertext, 2), + FIELDOF_NORM(krb5_enc_data, int32, enctype, 0, 0), + FIELDOF_OPT(krb5_enc_data, uint, kvno, 1, 0, 1), + FIELDOF_NORM(krb5_enc_data, ostring_data, ciphertext, 2, 0), }; DEFSEQTYPE(encrypted_data, krb5_enc_data, encrypted_data_fields, optional_encrypted_data); @@ -172,9 +173,9 @@ DEFPRIMITIVETYPE(krb5_flags, krb5_flags, asn1_encode_krb5_flags_at, const static struct field_info authdata_elt_fields[] = { /* ad-type[0] INTEGER */ - FIELDOF_NORM(krb5_authdata, int32, ad_type, 0), + FIELDOF_NORM(krb5_authdata, int32, ad_type, 0, 0), /* ad-data[1] OCTET STRING */ - FIELDOF_STRING(krb5_authdata, octetstring, contents, length, 1), + FIELDOF_STRING(krb5_authdata, octetstring, contents, length, 1, 0), }; DEFSEQTYPE(authdata_elt, krb5_authdata, authdata_elt_fields, 0); DEFPTRTYPE(authdata_elt_ptr, authdata_elt); @@ -182,15 +183,15 @@ DEFNONEMPTYNULLTERMSEQOFTYPE(auth_data, authdata_elt_ptr); DEFPTRTYPE(auth_data_ptr, auth_data); static const struct field_info encryption_key_fields[] = { - FIELDOF_NORM(krb5_keyblock, int32, enctype, 0), - FIELDOF_STRING(krb5_keyblock, octetstring, contents, length, 1), + FIELDOF_NORM(krb5_keyblock, int32, enctype, 0, 0), + FIELDOF_STRING(krb5_keyblock, octetstring, contents, length, 1, 0), }; DEFSEQTYPE(encryption_key, krb5_keyblock, encryption_key_fields, 0); DEFPTRTYPE(ptr_encryption_key, encryption_key); static const struct field_info checksum_fields[] = { - FIELDOF_NORM(krb5_checksum, int32, checksum_type, 0), - FIELDOF_STRING(krb5_checksum, octetstring, contents, length, 1), + FIELDOF_NORM(krb5_checksum, int32, checksum_type, 0, 0), + FIELDOF_STRING(krb5_checksum, octetstring, contents, length, 1, 0), }; DEFSEQTYPE(checksum, krb5_checksum, checksum_fields, 0); DEFPTRTYPE(checksum_ptr, checksum); @@ -198,8 +199,8 @@ DEFNULLTERMSEQOFTYPE(seq_of_checksum, checksum_ptr); DEFPTRTYPE(ptr_seqof_checksum, seq_of_checksum); static const struct field_info lr_fields[] = { - FIELDOF_NORM(krb5_last_req_entry, int32, lr_type, 0), - FIELDOF_NORM(krb5_last_req_entry, kerberos_time, value, 1), + FIELDOF_NORM(krb5_last_req_entry, int32, lr_type, 0, 0), + FIELDOF_NORM(krb5_last_req_entry, kerberos_time, value, 1, 0), }; DEFSEQTYPE(last_req_ent, krb5_last_req_entry, lr_fields, 0); @@ -208,17 +209,17 @@ DEFNONEMPTYNULLTERMSEQOFTYPE(last_req, last_req_ent_ptr); DEFPTRTYPE(last_req_ptr, last_req); static const struct field_info ticket_fields[] = { - FIELD_INT_IMM(KVNO, 0), - FIELDOF_NORM(krb5_ticket, realm_of_principal, server, 1), - FIELDOF_NORM(krb5_ticket, principal, server, 2), - FIELDOF_NORM(krb5_ticket, encrypted_data, enc_part, 3), + FIELD_INT_IMM(KVNO, 0, 0), + FIELDOF_NORM(krb5_ticket, realm_of_principal, server, 1, 0), + FIELDOF_NORM(krb5_ticket, principal, server, 2, 0), + FIELDOF_NORM(krb5_ticket, encrypted_data, enc_part, 3, 0), }; DEFSEQTYPE(untagged_ticket, krb5_ticket, ticket_fields, 0); DEFAPPTAGGEDTYPE(ticket, 1, untagged_ticket); static const struct field_info pa_data_fields[] = { - FIELDOF_NORM(krb5_pa_data, int32, pa_type, 1), - FIELDOF_STRING(krb5_pa_data, octetstring, contents, length, 2), + FIELDOF_NORM(krb5_pa_data, int32, pa_type, 1, 0), + FIELDOF_STRING(krb5_pa_data, octetstring, contents, length, 2, 0), }; DEFSEQTYPE(pa_data, krb5_pa_data, pa_data_fields, 0); DEFPTRTYPE(pa_data_ptr, pa_data); @@ -233,32 +234,35 @@ DEFPTRTYPE(ptr_seqof_ticket, seq_of_ticket); /* EncKDCRepPart ::= SEQUENCE */ static const struct field_info enc_kdc_rep_part_fields[] = { /* key[0] EncryptionKey */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, ptr_encryption_key, session, 0), + FIELDOF_NORM(krb5_enc_kdc_rep_part, ptr_encryption_key, session, 0, 0), /* last-req[1] LastReq */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, last_req_ptr, last_req, 1), + FIELDOF_NORM(krb5_enc_kdc_rep_part, last_req_ptr, last_req, 1, 0), /* nonce[2] INTEGER */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, int32, nonce, 2), + FIELDOF_NORM(krb5_enc_kdc_rep_part, int32, nonce, 2, 0), /* key-expiration[3] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_enc_kdc_rep_part, kerberos_time, key_exp, 3, 3), + FIELDOF_OPT(krb5_enc_kdc_rep_part, kerberos_time, key_exp, 3, 0, 3), /* flags[4] TicketFlags */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, krb5_flags, flags, 4), + FIELDOF_NORM(krb5_enc_kdc_rep_part, krb5_flags, flags, 4, 0), /* authtime[5] KerberosTime */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, kerberos_time, times.authtime, 5), + FIELDOF_NORM(krb5_enc_kdc_rep_part, kerberos_time, times.authtime, 5, 0), /* starttime[6] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_enc_kdc_rep_part, kerberos_time, times.starttime, 6, 6), + FIELDOF_OPT(krb5_enc_kdc_rep_part, kerberos_time, times.starttime, + 6, 0, 6), /* endtime[7] KerberosTime */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, kerberos_time, times.endtime, 7), + FIELDOF_NORM(krb5_enc_kdc_rep_part, kerberos_time, times.endtime, 7, 0), /* renew-till[8] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_enc_kdc_rep_part, kerberos_time, times.renew_till, 8, 8), + FIELDOF_OPT(krb5_enc_kdc_rep_part, kerberos_time, times.renew_till, + 8, 0, 8), /* srealm[9] Realm */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, realm_of_principal, server, 9), + FIELDOF_NORM(krb5_enc_kdc_rep_part, realm_of_principal, server, 9, 0), /* sname[10] PrincipalName */ - FIELDOF_NORM(krb5_enc_kdc_rep_part, principal, server, 10), + FIELDOF_NORM(krb5_enc_kdc_rep_part, principal, server, 10, 0), /* caddr[11] HostAddresses OPTIONAL */ FIELDOF_OPT(krb5_enc_kdc_rep_part, ptr_seqof_host_addresses, caddrs, - 11, 11), + 11, 0, 11), /* encrypted-pa-data[12] SEQUENCE OF PA-DATA OPTIONAL */ - FIELDOF_OPT(krb5_enc_kdc_rep_part, ptr_seqof_pa_data, enc_padata, 12, 12), + FIELDOF_OPT(krb5_enc_kdc_rep_part, ptr_seqof_pa_data, enc_padata, + 12, 0, 12), }; static unsigned int optional_enc_kdc_rep_part(const void *p) @@ -293,18 +297,22 @@ struct kdc_req_hack { krb5_data *server_realm; }; static const struct field_info kdc_req_hack_fields[] = { - FIELDOF_NORM(struct kdc_req_hack, krb5_flags, v.kdc_options, 0), - FIELDOF_OPT(struct kdc_req_hack, principal, v.client, 1, 1), - FIELDOF_NORM(struct kdc_req_hack, gstring_data_ptr, server_realm, 2), - FIELDOF_OPT(struct kdc_req_hack, principal, v.server, 3, 3), - FIELDOF_OPT(struct kdc_req_hack, kerberos_time, v.from, 4, 4), - FIELDOF_NORM(struct kdc_req_hack, kerberos_time, v.till, 5), - FIELDOF_OPT(struct kdc_req_hack, kerberos_time, v.rtime, 6, 6), - FIELDOF_NORM(struct kdc_req_hack, int32, v.nonce, 7), - FIELDOF_SEQOF_INT32(struct kdc_req_hack, int32_ptr, v.ktype, v.nktypes, 8), - FIELDOF_OPT(struct kdc_req_hack, ptr_seqof_host_addresses, v.addresses, 9, 9), - FIELDOF_OPT(struct kdc_req_hack, encrypted_data, v.authorization_data, 10, 10), - FIELDOF_OPT(struct kdc_req_hack, ptr_seqof_ticket, v.second_ticket, 11, 11), + FIELDOF_NORM(struct kdc_req_hack, krb5_flags, v.kdc_options, 0, 0), + FIELDOF_OPT(struct kdc_req_hack, principal, v.client, 1, 0, 1), + FIELDOF_NORM(struct kdc_req_hack, gstring_data_ptr, server_realm, 2, 0), + FIELDOF_OPT(struct kdc_req_hack, principal, v.server, 3, 0, 3), + FIELDOF_OPT(struct kdc_req_hack, kerberos_time, v.from, 4, 0, 4), + FIELDOF_NORM(struct kdc_req_hack, kerberos_time, v.till, 5, 0), + FIELDOF_OPT(struct kdc_req_hack, kerberos_time, v.rtime, 6, 0, 6), + FIELDOF_NORM(struct kdc_req_hack, int32, v.nonce, 7, 0), + FIELDOF_SEQOF_INT32(struct kdc_req_hack, int32_ptr, v.ktype, v.nktypes, + 8, 0), + FIELDOF_OPT(struct kdc_req_hack, ptr_seqof_host_addresses, v.addresses, + 9, 0, 9), + FIELDOF_OPT(struct kdc_req_hack, encrypted_data, v.authorization_data, + 10, 0, 10), + FIELDOF_OPT(struct kdc_req_hack, ptr_seqof_ticket, v.second_ticket, + 11, 0, 11), }; static unsigned int optional_kdc_req_hack(const void *p) @@ -357,18 +365,18 @@ DEFFNTYPE(kdc_req_body, krb5_kdc_req, asn1_encode_kdc_req_body); DEFPTRTYPE(ptr_kdc_req_body,kdc_req_body); static const struct field_info transited_fields[] = { - FIELDOF_NORM(krb5_transited, octet, tr_type, 0), - FIELDOF_NORM(krb5_transited, ostring_data, tr_contents, 1), + FIELDOF_NORM(krb5_transited, octet, tr_type, 0, 0), + FIELDOF_NORM(krb5_transited, ostring_data, tr_contents, 1, 0), }; DEFSEQTYPE(transited, krb5_transited, transited_fields, 0); static const struct field_info krb_safe_body_fields[] = { - FIELDOF_NORM(krb5_safe, ostring_data, user_data, 0), - FIELDOF_OPT(krb5_safe, kerberos_time, timestamp, 1, 1), - FIELDOF_OPT(krb5_safe, int32, usec, 2, 2), - FIELDOF_OPT(krb5_safe, uint, seq_number, 3, 3), - FIELDOF_NORM(krb5_safe, address_ptr, s_address, 4), - FIELDOF_OPT(krb5_safe, address_ptr, r_address, 5, 5), + FIELDOF_NORM(krb5_safe, ostring_data, user_data, 0, 0), + FIELDOF_OPT(krb5_safe, kerberos_time, timestamp, 1, 0, 1), + FIELDOF_OPT(krb5_safe, int32, usec, 2, 0, 2), + FIELDOF_OPT(krb5_safe, uint, seq_number, 3, 0, 3), + FIELDOF_NORM(krb5_safe, address_ptr, s_address, 4, 0), + FIELDOF_OPT(krb5_safe, address_ptr, r_address, 5, 0, 5), }; static unsigned int optional_krb_safe_body(const void *p) @@ -391,17 +399,17 @@ DEFSEQTYPE(krb_safe_body, krb5_safe, krb_safe_body_fields, optional_krb_safe_body); static const struct field_info krb_cred_info_fields[] = { - FIELDOF_NORM(krb5_cred_info, ptr_encryption_key, session, 0), - FIELDOF_OPT(krb5_cred_info, realm_of_principal, client, 1, 1), - FIELDOF_OPT(krb5_cred_info, principal, client, 2, 2), - FIELDOF_OPT(krb5_cred_info, krb5_flags, flags, 3, 3), - FIELDOF_OPT(krb5_cred_info, kerberos_time, times.authtime, 4, 4), - FIELDOF_OPT(krb5_cred_info, kerberos_time, times.starttime, 5, 5), - FIELDOF_OPT(krb5_cred_info, kerberos_time, times.endtime, 6, 6), - FIELDOF_OPT(krb5_cred_info, kerberos_time, times.renew_till, 7, 7), - FIELDOF_OPT(krb5_cred_info, realm_of_principal, server, 8, 8), - FIELDOF_OPT(krb5_cred_info, principal, server, 9, 9), - FIELDOF_OPT(krb5_cred_info, ptr_seqof_host_addresses, caddrs, 10, 10), + FIELDOF_NORM(krb5_cred_info, ptr_encryption_key, session, 0, 0), + FIELDOF_OPT(krb5_cred_info, realm_of_principal, client, 1, 0, 1), + FIELDOF_OPT(krb5_cred_info, principal, client, 2, 0, 2), + FIELDOF_OPT(krb5_cred_info, krb5_flags, flags, 3, 0, 3), + FIELDOF_OPT(krb5_cred_info, kerberos_time, times.authtime, 4, 0, 4), + FIELDOF_OPT(krb5_cred_info, kerberos_time, times.starttime, 5, 0, 5), + FIELDOF_OPT(krb5_cred_info, kerberos_time, times.endtime, 6, 0, 6), + FIELDOF_OPT(krb5_cred_info, kerberos_time, times.renew_till, 7, 0, 7), + FIELDOF_OPT(krb5_cred_info, realm_of_principal, server, 8, 0, 8), + FIELDOF_OPT(krb5_cred_info, principal, server, 9, 0, 9), + FIELDOF_OPT(krb5_cred_info, ptr_seqof_host_addresses, caddrs, 10, 0, 10), }; static unsigned int optional_krb_cred_info(const void *p) @@ -453,8 +461,9 @@ optional_etype_info_entry(const void *vptr) return optional; } static const struct field_info etype_info_entry_fields[] = { - FIELDOF_NORM(krb5_etype_info_entry, int32, etype, 0), - FIELDOF_OPTSTRING(krb5_etype_info_entry, octetstring, salt, length, 1, 1), + FIELDOF_NORM(krb5_etype_info_entry, int32, etype, 0, 0), + FIELDOF_OPTSTRING(krb5_etype_info_entry, octetstring, salt, length, + 1, 0, 1), }; DEFSEQTYPE(etype_info_entry, krb5_etype_info_entry, etype_info_entry_fields, optional_etype_info_entry); @@ -474,10 +483,10 @@ optional_etype_info2_entry(const void *vptr) } static const struct field_info etype_info2_entry_fields[] = { - FIELDOF_NORM(krb5_etype_info_entry, int32, etype, 0), + FIELDOF_NORM(krb5_etype_info_entry, int32, etype, 0, 0), FIELDOF_OPTSTRING(krb5_etype_info_entry, u_generalstring, salt, length, - 1, 1), - FIELDOF_OPT(krb5_etype_info_entry, ostring_data, s2kparams, 2, 2), + 1, 0, 1), + FIELDOF_OPT(krb5_etype_info_entry, ostring_data, s2kparams, 2, 0, 2), }; DEFSEQTYPE(etype_info2_entry, krb5_etype_info_entry, etype_info2_entry_fields, optional_etype_info2_entry); @@ -489,8 +498,8 @@ DEFPTRTYPE(etype_info2_entry_ptr, etype_info2_entry); DEFNULLTERMSEQOFTYPE(etype_info2, etype_info2_entry_ptr); static const struct field_info passwdsequence_fields[] = { - FIELDOF_NORM(passwd_phrase_element, ostring_data_ptr, passwd, 0), - FIELDOF_NORM(passwd_phrase_element, ostring_data_ptr, phrase, 1), + FIELDOF_NORM(passwd_phrase_element, ostring_data_ptr, passwd, 0, 0), + FIELDOF_NORM(passwd_phrase_element, ostring_data_ptr, phrase, 1, 0), }; DEFSEQTYPE(passwdsequence, passwd_phrase_element, passwdsequence_fields, 0); @@ -500,16 +509,18 @@ DEFPTRTYPE(ptr_seqof_passwdsequence, seqof_passwdsequence); static const struct field_info sam_challenge_fields[] = { - FIELDOF_NORM(krb5_sam_challenge, int32, sam_type, 0), - FIELDOF_NORM(krb5_sam_challenge, krb5_flags, sam_flags, 1), - FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_type_name, 2, 2), - FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_track_id,3, 3), - FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_challenge_label,4, 4), - FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_challenge,5, 5), - FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_response_prompt,6, 6), - FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_pk_for_sad,7, 7), - FIELDOF_OPT(krb5_sam_challenge, int32, sam_nonce, 8, 8), - FIELDOF_OPT(krb5_sam_challenge, checksum, sam_cksum, 9, 9), + FIELDOF_NORM(krb5_sam_challenge, int32, sam_type, 0, 0), + FIELDOF_NORM(krb5_sam_challenge, krb5_flags, sam_flags, 1, 0), + FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_type_name, 2, 0, 2), + FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_track_id, 3, 0, 3), + FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_challenge_label, + 4, 0, 4), + FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_challenge, 5, 0, 5), + FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_response_prompt, + 6, 0, 6), + FIELDOF_OPT(krb5_sam_challenge, ostring_data, sam_pk_for_sad, 7, 0, 7), + FIELDOF_OPT(krb5_sam_challenge, int32, sam_nonce, 8, 0, 8), + FIELDOF_OPT(krb5_sam_challenge, checksum, sam_cksum, 9, 0, 9), }; static unsigned int optional_sam_challenge(const void *p) @@ -569,16 +580,22 @@ asn1_encode_sam_challenge_2(asn1buf *buf, const krb5_sam_challenge_2 *val, DEFFNTYPE(sam_challenge_2, krb5_sam_challenge_2, asn1_encode_sam_challenge_2); static const struct field_info sam_challenge_2_body_fields[] = { - FIELDOF_NORM(krb5_sam_challenge_2_body, int32, sam_type, 0), - FIELDOF_NORM(krb5_sam_challenge_2_body, krb5_flags, sam_flags, 1), - FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_type_name, 2, 2), - FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_track_id,3, 3), - FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_challenge_label,4, 4), - FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_challenge,5, 5), - FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_response_prompt,6, 6), - FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_pk_for_sad,7, 7), - FIELDOF_NORM(krb5_sam_challenge_2_body, int32, sam_nonce, 8), - FIELDOF_NORM(krb5_sam_challenge_2_body, int32, sam_etype, 9), + FIELDOF_NORM(krb5_sam_challenge_2_body, int32, sam_type, 0, 0), + FIELDOF_NORM(krb5_sam_challenge_2_body, krb5_flags, sam_flags, 1, 0), + FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_type_name, + 2, 0, 2), + FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_track_id, + 3, 0, 3), + FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_challenge_label, + 4, 0, 4), + FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_challenge, + 5, 0, 5), + FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_response_prompt, + 6, 0, 6), + FIELDOF_OPT(krb5_sam_challenge_2_body, ostring_data, sam_pk_for_sad, + 7, 0, 7), + FIELDOF_NORM(krb5_sam_challenge_2_body, int32, sam_nonce, 8, 0), + FIELDOF_NORM(krb5_sam_challenge_2_body, int32, sam_etype, 9, 0), }; static unsigned int optional_sam_challenge_2_body(const void *p) @@ -600,15 +617,16 @@ DEFSEQTYPE(sam_challenge_2_body,krb5_sam_challenge_2_body,sam_challenge_2_body_f static const struct field_info sam_key_fields[] = { - FIELDOF_NORM(krb5_sam_key, encryption_key, sam_key, 0), + FIELDOF_NORM(krb5_sam_key, encryption_key, sam_key, 0, 0), }; DEFSEQTYPE(sam_key, krb5_sam_key, sam_key_fields, 0); static const struct field_info enc_sam_response_enc_fields[] = { - FIELDOF_NORM(krb5_enc_sam_response_enc, int32, sam_nonce, 0), - FIELDOF_NORM(krb5_enc_sam_response_enc, kerberos_time, sam_timestamp, 1), - FIELDOF_NORM(krb5_enc_sam_response_enc, int32, sam_usec, 2), - FIELDOF_OPT(krb5_enc_sam_response_enc, ostring_data, sam_sad, 3, 3), + FIELDOF_NORM(krb5_enc_sam_response_enc, int32, sam_nonce, 0, 0), + FIELDOF_NORM(krb5_enc_sam_response_enc, kerberos_time, sam_timestamp, + 1, 0), + FIELDOF_NORM(krb5_enc_sam_response_enc, int32, sam_usec, 2, 0), + FIELDOF_OPT(krb5_enc_sam_response_enc, ostring_data, sam_sad, 3, 0, 3), }; static unsigned int optional_enc_sam_response_enc(const void *p) @@ -624,8 +642,8 @@ DEFSEQTYPE(enc_sam_response_enc, krb5_enc_sam_response_enc, enc_sam_response_enc_fields, optional_enc_sam_response_enc); static const struct field_info enc_sam_response_enc_2_fields[] = { - FIELDOF_NORM(krb5_enc_sam_response_enc_2, int32, sam_nonce, 0), - FIELDOF_OPT(krb5_enc_sam_response_enc_2, ostring_data, sam_sad, 1, 1), + FIELDOF_NORM(krb5_enc_sam_response_enc_2, int32, sam_nonce, 0, 0), + FIELDOF_OPT(krb5_enc_sam_response_enc_2, ostring_data, sam_sad, 1, 0, 1), }; static unsigned int optional_enc_sam_response_enc_2(const void *p) @@ -641,13 +659,13 @@ DEFSEQTYPE(enc_sam_response_enc_2, krb5_enc_sam_response_enc_2, enc_sam_response_enc_2_fields, optional_enc_sam_response_enc_2); static const struct field_info sam_response_fields[] = { - FIELDOF_NORM(krb5_sam_response, int32, sam_type, 0), - FIELDOF_NORM(krb5_sam_response, krb5_flags, sam_flags, 1), - FIELDOF_OPT(krb5_sam_response, ostring_data, sam_track_id, 2, 2), - FIELDOF_OPT(krb5_sam_response, encrypted_data, sam_enc_key, 3, 3), - FIELDOF_NORM(krb5_sam_response, encrypted_data, sam_enc_nonce_or_ts, 4), - FIELDOF_OPT(krb5_sam_response, int32, sam_nonce, 5, 5), - FIELDOF_OPT(krb5_sam_response, kerberos_time, sam_patimestamp, 6, 6), + FIELDOF_NORM(krb5_sam_response, int32, sam_type, 0, 0), + FIELDOF_NORM(krb5_sam_response, krb5_flags, sam_flags, 1, 0), + FIELDOF_OPT(krb5_sam_response, ostring_data, sam_track_id, 2, 0, 2), + FIELDOF_OPT(krb5_sam_response, encrypted_data, sam_enc_key, 3, 0, 3), + FIELDOF_NORM(krb5_sam_response, encrypted_data, sam_enc_nonce_or_ts, 4, 0), + FIELDOF_OPT(krb5_sam_response, int32, sam_nonce, 5, 0, 5), + FIELDOF_OPT(krb5_sam_response, kerberos_time, sam_patimestamp, 6, 0, 6), }; static unsigned int optional_sam_response(const void *p) @@ -669,11 +687,12 @@ DEFSEQTYPE(sam_response, krb5_sam_response, sam_response_fields, optional_sam_response); static const struct field_info sam_response_2_fields[] = { - FIELDOF_NORM(krb5_sam_response_2, int32, sam_type, 0), - FIELDOF_NORM(krb5_sam_response_2, krb5_flags, sam_flags, 1), - FIELDOF_OPT(krb5_sam_response_2, ostring_data, sam_track_id, 2, 2), - FIELDOF_NORM(krb5_sam_response_2, encrypted_data, sam_enc_nonce_or_sad, 3), - FIELDOF_NORM(krb5_sam_response_2, int32, sam_nonce, 4), + FIELDOF_NORM(krb5_sam_response_2, int32, sam_type, 0, 0), + FIELDOF_NORM(krb5_sam_response_2, krb5_flags, sam_flags, 1, 0), + FIELDOF_OPT(krb5_sam_response_2, ostring_data, sam_track_id, 2, 0, 2), + FIELDOF_NORM(krb5_sam_response_2, encrypted_data, sam_enc_nonce_or_sad, + 3, 0), + FIELDOF_NORM(krb5_sam_response_2, int32, sam_nonce, 4, 0), }; static unsigned int optional_sam_response_2(const void *p) @@ -689,13 +708,14 @@ DEFSEQTYPE(sam_response_2, krb5_sam_response_2, sam_response_2_fields, optional_sam_response_2); static const struct field_info predicted_sam_response_fields[] = { - FIELDOF_NORM(krb5_predicted_sam_response, encryption_key, sam_key, 0), - FIELDOF_NORM(krb5_predicted_sam_response, krb5_flags, sam_flags, 1), - FIELDOF_NORM(krb5_predicted_sam_response, kerberos_time, stime, 2), - FIELDOF_NORM(krb5_predicted_sam_response, int32, susec, 3), - FIELDOF_NORM(krb5_predicted_sam_response, realm_of_principal, client, 4), - FIELDOF_NORM(krb5_predicted_sam_response, principal, client, 5), - FIELDOF_OPT(krb5_predicted_sam_response, ostring_data, msd, 6, 6), + FIELDOF_NORM(krb5_predicted_sam_response, encryption_key, sam_key, 0, 0), + FIELDOF_NORM(krb5_predicted_sam_response, krb5_flags, sam_flags, 1, 0), + FIELDOF_NORM(krb5_predicted_sam_response, kerberos_time, stime, 2, 0), + FIELDOF_NORM(krb5_predicted_sam_response, int32, susec, 3, 0), + FIELDOF_NORM(krb5_predicted_sam_response, realm_of_principal, client, + 4, 0), + FIELDOF_NORM(krb5_predicted_sam_response, principal, client, 5, 0), + FIELDOF_OPT(krb5_predicted_sam_response, ostring_data, msd, 6, 0, 6), }; static unsigned int optional_predicted_sam_response(const void *p) @@ -714,23 +734,24 @@ DEFSEQTYPE(predicted_sam_response, krb5_predicted_sam_response, static const struct field_info krb5_authenticator_fields[] = { /* Authenticator ::= [APPLICATION 2] SEQUENCE */ /* authenticator-vno[0] INTEGER */ - FIELD_INT_IMM(KVNO, 0), + FIELD_INT_IMM(KVNO, 0, 0), /* crealm[1] Realm */ - FIELDOF_NORM(krb5_authenticator, realm_of_principal, client, 1), + FIELDOF_NORM(krb5_authenticator, realm_of_principal, client, 1, 0), /* cname[2] PrincipalName */ - FIELDOF_NORM(krb5_authenticator, principal, client, 2), + FIELDOF_NORM(krb5_authenticator, principal, client, 2, 0), /* cksum[3] Checksum OPTIONAL */ - FIELDOF_OPT(krb5_authenticator, checksum_ptr, checksum, 3, 3), + FIELDOF_OPT(krb5_authenticator, checksum_ptr, checksum, 3, 0, 3), /* cusec[4] INTEGER */ - FIELDOF_NORM(krb5_authenticator, int32, cusec, 4), + FIELDOF_NORM(krb5_authenticator, int32, cusec, 4, 0), /* ctime[5] KerberosTime */ - FIELDOF_NORM(krb5_authenticator, kerberos_time, ctime, 5), + FIELDOF_NORM(krb5_authenticator, kerberos_time, ctime, 5, 0), /* subkey[6] EncryptionKey OPTIONAL */ - FIELDOF_OPT(krb5_authenticator, ptr_encryption_key, subkey, 6, 6), + FIELDOF_OPT(krb5_authenticator, ptr_encryption_key, subkey, 6, 0, 6), /* seq-number[7] INTEGER OPTIONAL */ - FIELDOF_OPT(krb5_authenticator, uint, seq_number, 7, 7), + FIELDOF_OPT(krb5_authenticator, uint, seq_number, 7, 0, 7), /* authorization-data[8] AuthorizationData OPTIONAL */ - FIELDOF_OPT(krb5_authenticator, auth_data_ptr, authorization_data, 8, 8), + FIELDOF_OPT(krb5_authenticator, auth_data_ptr, authorization_data, + 8, 0, 8), }; static unsigned int optional_krb5_authenticator(const void *p) @@ -759,27 +780,28 @@ DEFAPPTAGGEDTYPE(krb5_authenticator, 2, untagged_krb5_authenticator); static const struct field_info enc_tkt_part_fields[] = { /* EncTicketPart ::= [APPLICATION 3] SEQUENCE */ /* flags[0] TicketFlags */ - FIELDOF_NORM(krb5_enc_tkt_part, krb5_flags, flags, 0), + FIELDOF_NORM(krb5_enc_tkt_part, krb5_flags, flags, 0, 0), /* key[1] EncryptionKey */ - FIELDOF_NORM(krb5_enc_tkt_part, ptr_encryption_key, session, 1), + FIELDOF_NORM(krb5_enc_tkt_part, ptr_encryption_key, session, 1, 0), /* crealm[2] Realm */ - FIELDOF_NORM(krb5_enc_tkt_part, realm_of_principal, client, 2), + FIELDOF_NORM(krb5_enc_tkt_part, realm_of_principal, client, 2, 0), /* cname[3] PrincipalName */ - FIELDOF_NORM(krb5_enc_tkt_part, principal, client, 3), + FIELDOF_NORM(krb5_enc_tkt_part, principal, client, 3, 0), /* transited[4] TransitedEncoding */ - FIELDOF_NORM(krb5_enc_tkt_part, transited, transited, 4), + FIELDOF_NORM(krb5_enc_tkt_part, transited, transited, 4, 0), /* authtime[5] KerberosTime */ - FIELDOF_NORM(krb5_enc_tkt_part, kerberos_time, times.authtime, 5), + FIELDOF_NORM(krb5_enc_tkt_part, kerberos_time, times.authtime, 5, 0), /* starttime[6] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_enc_tkt_part, kerberos_time, times.starttime, 6, 6), + FIELDOF_OPT(krb5_enc_tkt_part, kerberos_time, times.starttime, 6, 0, 6), /* endtime[7] KerberosTime */ - FIELDOF_NORM(krb5_enc_tkt_part, kerberos_time, times.endtime, 7), + FIELDOF_NORM(krb5_enc_tkt_part, kerberos_time, times.endtime, 7, 0), /* renew-till[8] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_enc_tkt_part, kerberos_time, times.renew_till, 8, 8), + FIELDOF_OPT(krb5_enc_tkt_part, kerberos_time, times.renew_till, 8, 0, 8), /* caddr[9] HostAddresses OPTIONAL */ - FIELDOF_OPT(krb5_enc_tkt_part, ptr_seqof_host_addresses, caddrs, 9, 9), + FIELDOF_OPT(krb5_enc_tkt_part, ptr_seqof_host_addresses, caddrs, 9, 0, 9), /* authorization-data[10] AuthorizationData OPTIONAL */ - FIELDOF_OPT(krb5_enc_tkt_part, auth_data_ptr, authorization_data, 10, 10), + FIELDOF_OPT(krb5_enc_tkt_part, auth_data_ptr, authorization_data, + 10, 0, 10), }; static unsigned int optional_enc_tkt_part(const void *p) @@ -808,13 +830,13 @@ static const struct field_info as_rep_fields[] = { /* AS-REP ::= [APPLICATION 11] KDC-REP */ /* But KDC-REP needs to know what type it's being encapsulated in, so expand each version. */ - FIELD_INT_IMM(KVNO, 0), - FIELD_INT_IMM(KRB5_AS_REP, 1), - FIELDOF_OPT(krb5_kdc_rep, ptr_seqof_pa_data, padata, 2, 2), - FIELDOF_NORM(krb5_kdc_rep, realm_of_principal, client, 3), - FIELDOF_NORM(krb5_kdc_rep, principal, client, 4), - FIELDOF_NORM(krb5_kdc_rep, ticket_ptr, ticket, 5), - FIELDOF_NORM(krb5_kdc_rep, encrypted_data, enc_part, 6), + FIELD_INT_IMM(KVNO, 0, 0), + FIELD_INT_IMM(KRB5_AS_REP, 1, 0), + FIELDOF_OPT(krb5_kdc_rep, ptr_seqof_pa_data, padata, 2, 0, 2), + FIELDOF_NORM(krb5_kdc_rep, realm_of_principal, client, 3, 0), + FIELDOF_NORM(krb5_kdc_rep, principal, client, 4, 0), + FIELDOF_NORM(krb5_kdc_rep, ticket_ptr, ticket, 5, 0), + FIELDOF_NORM(krb5_kdc_rep, encrypted_data, enc_part, 6, 0), }; static unsigned int optional_as_rep(const void *p) @@ -834,13 +856,13 @@ static const struct field_info tgs_rep_fields[] = { /* TGS-REP ::= [APPLICATION 13] KDC-REP */ /* But KDC-REP needs to know what type it's being encapsulated in, so expand each version. */ - FIELD_INT_IMM(KVNO, 0), - FIELD_INT_IMM(KRB5_TGS_REP, 1), - FIELDOF_OPT(krb5_kdc_rep, ptr_seqof_pa_data, padata, 2, 2), - FIELDOF_NORM(krb5_kdc_rep, realm_of_principal, client, 3), - FIELDOF_NORM(krb5_kdc_rep, principal, client, 4), - FIELDOF_NORM(krb5_kdc_rep, ticket_ptr, ticket, 5), - FIELDOF_NORM(krb5_kdc_rep, encrypted_data, enc_part, 6), + FIELD_INT_IMM(KVNO, 0, 0), + FIELD_INT_IMM(KRB5_TGS_REP, 1, 0), + FIELDOF_OPT(krb5_kdc_rep, ptr_seqof_pa_data, padata, 2, 0, 2), + FIELDOF_NORM(krb5_kdc_rep, realm_of_principal, client, 3, 0), + FIELDOF_NORM(krb5_kdc_rep, principal, client, 4, 0), + FIELDOF_NORM(krb5_kdc_rep, ticket_ptr, ticket, 5, 0), + FIELDOF_NORM(krb5_kdc_rep, encrypted_data, enc_part, 6, 0), }; static unsigned int optional_tgs_rep(const void *p) @@ -859,15 +881,15 @@ DEFAPPTAGGEDTYPE(tgs_rep, 13, untagged_tgs_rep); static const struct field_info ap_req_fields[] = { /* AP-REQ ::= [APPLICATION 14] SEQUENCE */ /* pvno[0] INTEGER */ - FIELD_INT_IMM(KVNO, 0), + FIELD_INT_IMM(KVNO, 0, 0), /* msg-type[1] INTEGER */ - FIELD_INT_IMM(ASN1_KRB_AP_REQ, 1), + FIELD_INT_IMM(ASN1_KRB_AP_REQ, 1, 0), /* ap-options[2] APOptions */ - FIELDOF_NORM(krb5_ap_req, krb5_flags, ap_options, 2), + FIELDOF_NORM(krb5_ap_req, krb5_flags, ap_options, 2, 0), /* ticket[3] Ticket */ - FIELDOF_NORM(krb5_ap_req, ticket_ptr, ticket, 3), + FIELDOF_NORM(krb5_ap_req, ticket_ptr, ticket, 3, 0), /* authenticator[4] EncryptedData */ - FIELDOF_NORM(krb5_ap_req, encrypted_data, authenticator, 4), + FIELDOF_NORM(krb5_ap_req, encrypted_data, authenticator, 4, 0), }; DEFSEQTYPE(untagged_ap_req, krb5_ap_req, ap_req_fields, 0); DEFAPPTAGGEDTYPE(ap_req, 14, untagged_ap_req); @@ -875,11 +897,11 @@ DEFAPPTAGGEDTYPE(ap_req, 14, untagged_ap_req); static const struct field_info ap_rep_fields[] = { /* AP-REP ::= [APPLICATION 15] SEQUENCE */ /* pvno[0] INTEGER */ - FIELD_INT_IMM(KVNO, 0), + FIELD_INT_IMM(KVNO, 0, 0), /* msg-type[1] INTEGER */ - FIELD_INT_IMM(ASN1_KRB_AP_REP, 1), + FIELD_INT_IMM(ASN1_KRB_AP_REP, 1, 0), /* enc-part[2] EncryptedData */ - FIELDOF_NORM(krb5_ap_rep, encrypted_data, enc_part, 2), + FIELDOF_NORM(krb5_ap_rep, encrypted_data, enc_part, 2, 0), }; DEFSEQTYPE(untagged_ap_rep, krb5_ap_rep, ap_rep_fields, 0); DEFAPPTAGGEDTYPE(ap_rep, 15, untagged_ap_rep); @@ -887,13 +909,13 @@ DEFAPPTAGGEDTYPE(ap_rep, 15, untagged_ap_rep); static const struct field_info ap_rep_enc_part_fields[] = { /* EncAPRepPart ::= [APPLICATION 27] SEQUENCE */ /* ctime[0] KerberosTime */ - FIELDOF_NORM(krb5_ap_rep_enc_part, kerberos_time, ctime, 0), + FIELDOF_NORM(krb5_ap_rep_enc_part, kerberos_time, ctime, 0, 0), /* cusec[1] INTEGER */ - FIELDOF_NORM(krb5_ap_rep_enc_part, int32, cusec, 1), + FIELDOF_NORM(krb5_ap_rep_enc_part, int32, cusec, 1, 0), /* subkey[2] EncryptionKey OPTIONAL */ - FIELDOF_OPT(krb5_ap_rep_enc_part, ptr_encryption_key, subkey, 2, 2), + FIELDOF_OPT(krb5_ap_rep_enc_part, ptr_encryption_key, subkey, 2, 0, 2), /* seq-number[3] INTEGER OPTIONAL */ - FIELDOF_OPT(krb5_ap_rep_enc_part, uint, seq_number, 3, 3), + FIELDOF_OPT(krb5_ap_rep_enc_part, uint, seq_number, 3, 0, 3), }; static unsigned int optional_ap_rep_enc_part(const void *p) @@ -914,10 +936,10 @@ DEFAPPTAGGEDTYPE(ap_rep_enc_part, 27, untagged_ap_rep_enc_part); static const struct field_info as_req_fields[] = { /* AS-REQ ::= [APPLICATION 10] KDC-REQ */ - FIELD_INT_IMM(KVNO, 1), - FIELD_INT_IMM(KRB5_AS_REQ, 2), - FIELDOF_OPT(krb5_kdc_req, ptr_seqof_pa_data, padata, 3, 3), - FIELDOF_ENCODEAS(krb5_kdc_req, kdc_req_body, 4), + FIELD_INT_IMM(KVNO, 1, 0), + FIELD_INT_IMM(KRB5_AS_REQ, 2, 0), + FIELDOF_OPT(krb5_kdc_req, ptr_seqof_pa_data, padata, 3, 0, 3), + FIELDOF_ENCODEAS(krb5_kdc_req, kdc_req_body, 4, 0), }; static unsigned int optional_as_req(const void *p) @@ -935,10 +957,10 @@ DEFAPPTAGGEDTYPE(as_req, 10, untagged_as_req); static const struct field_info tgs_req_fields[] = { /* TGS-REQ ::= [APPLICATION 12] KDC-REQ */ - FIELD_INT_IMM(KVNO, 1), - FIELD_INT_IMM(KRB5_TGS_REQ, 2), - FIELDOF_OPT(krb5_kdc_req, ptr_seqof_pa_data, padata, 3, 3), - FIELDOF_ENCODEAS(krb5_kdc_req, kdc_req_body, 4), + FIELD_INT_IMM(KVNO, 1, 0), + FIELD_INT_IMM(KRB5_TGS_REQ, 2, 0), + FIELDOF_OPT(krb5_kdc_req, ptr_seqof_pa_data, padata, 3, 0, 3), + FIELDOF_ENCODEAS(krb5_kdc_req, kdc_req_body, 4, 0), }; static unsigned int optional_tgs_req(const void *p) @@ -956,43 +978,45 @@ DEFSEQTYPE(untagged_tgs_req, krb5_kdc_req, tgs_req_fields, DEFAPPTAGGEDTYPE(tgs_req, 12, untagged_tgs_req); static const struct field_info krb5_safe_fields[] = { - FIELD_INT_IMM(KVNO, 0), - FIELD_INT_IMM(ASN1_KRB_SAFE,1), - FIELD_SELF(krb_safe_body, 2), - FIELDOF_NORM(krb5_safe, checksum_ptr, checksum, 3), + FIELD_INT_IMM(KVNO, 0, 0), + FIELD_INT_IMM(ASN1_KRB_SAFE, 1, 0), + FIELD_SELF(krb_safe_body, 2, 0), + FIELDOF_NORM(krb5_safe, checksum_ptr, checksum, 3, 0), }; DEFSEQTYPE(untagged_krb5_safe, krb5_safe, krb5_safe_fields, 0); DEFAPPTAGGEDTYPE(krb5_safe, 20, untagged_krb5_safe); DEFPTRTYPE(krb_saved_safe_body_ptr, opaque_data); DEFFIELDTYPE(krb5_safe_checksum_only, krb5_safe, - FIELDOF_NORM(krb5_safe, checksum_ptr, checksum, -1)); + FIELDOF_NORM(krb5_safe, checksum_ptr, checksum, -1, 0)); DEFPTRTYPE(krb5_safe_checksum_only_ptr, krb5_safe_checksum_only); static const struct field_info krb5_safe_with_body_fields[] = { - FIELD_INT_IMM(KVNO, 0), - FIELD_INT_IMM(ASN1_KRB_SAFE,1), - FIELDOF_NORM(struct krb5_safe_with_body, krb_saved_safe_body_ptr, body, 2), - FIELDOF_NORM(struct krb5_safe_with_body, krb5_safe_checksum_only_ptr, safe, 3), + FIELD_INT_IMM(KVNO, 0, 0), + FIELD_INT_IMM(ASN1_KRB_SAFE, 1, 0), + FIELDOF_NORM(struct krb5_safe_with_body, krb_saved_safe_body_ptr, body, + 2, 0), + FIELDOF_NORM(struct krb5_safe_with_body, krb5_safe_checksum_only_ptr, + safe, 3, 0), }; DEFSEQTYPE(untagged_krb5_safe_with_body, struct krb5_safe_with_body, krb5_safe_with_body_fields, 0); DEFAPPTAGGEDTYPE(krb5_safe_with_body, 20, untagged_krb5_safe_with_body); static const struct field_info priv_fields[] = { - FIELD_INT_IMM(KVNO, 0), - FIELD_INT_IMM(ASN1_KRB_PRIV, 1), - FIELDOF_NORM(krb5_priv, encrypted_data, enc_part, 3), + FIELD_INT_IMM(KVNO, 0, 0), + FIELD_INT_IMM(ASN1_KRB_PRIV, 1, 0), + FIELDOF_NORM(krb5_priv, encrypted_data, enc_part, 3, 0), }; DEFSEQTYPE(untagged_priv, krb5_priv, priv_fields, 0); DEFAPPTAGGEDTYPE(krb5_priv, 21, untagged_priv); static const struct field_info priv_enc_part_fields[] = { - FIELDOF_NORM(krb5_priv_enc_part, ostring_data, user_data, 0), - FIELDOF_OPT(krb5_priv_enc_part, kerberos_time, timestamp, 1, 1), - FIELDOF_OPT(krb5_priv_enc_part, int32, usec, 2, 2), - FIELDOF_OPT(krb5_priv_enc_part, uint, seq_number, 3, 3), - FIELDOF_NORM(krb5_priv_enc_part, address_ptr, s_address, 4), - FIELDOF_OPT(krb5_priv_enc_part, address_ptr, r_address, 5, 5), + FIELDOF_NORM(krb5_priv_enc_part, ostring_data, user_data, 0, 0), + FIELDOF_OPT(krb5_priv_enc_part, kerberos_time, timestamp, 1, 0, 1), + FIELDOF_OPT(krb5_priv_enc_part, int32, usec, 2, 0, 2), + FIELDOF_OPT(krb5_priv_enc_part, uint, seq_number, 3, 0, 3), + FIELDOF_NORM(krb5_priv_enc_part, address_ptr, s_address, 4, 0), + FIELDOF_OPT(krb5_priv_enc_part, address_ptr, r_address, 5, 0, 5), }; static unsigned int optional_priv_enc_part(const void *p) @@ -1018,13 +1042,13 @@ DEFAPPTAGGEDTYPE(priv_enc_part, 28, untagged_priv_enc_part); static const struct field_info cred_fields[] = { /* KRB-CRED ::= [APPLICATION 22] SEQUENCE */ /* pvno[0] INTEGER */ - FIELD_INT_IMM(KVNO, 0), + FIELD_INT_IMM(KVNO, 0, 0), /* msg-type[1] INTEGER, -- KRB_CRED */ - FIELD_INT_IMM(ASN1_KRB_CRED, 1), + FIELD_INT_IMM(ASN1_KRB_CRED, 1, 0), /* tickets[2] SEQUENCE OF Ticket */ - FIELDOF_NORM(krb5_cred, ptr_seqof_ticket, tickets, 2), + FIELDOF_NORM(krb5_cred, ptr_seqof_ticket, tickets, 2, 0), /* enc-part[3] EncryptedData */ - FIELDOF_NORM(krb5_cred, encrypted_data, enc_part, 3), + FIELDOF_NORM(krb5_cred, encrypted_data, enc_part, 3, 0), }; DEFSEQTYPE(untagged_cred, krb5_cred, cred_fields, 0); DEFAPPTAGGEDTYPE(krb5_cred, 22, untagged_cred); @@ -1032,17 +1056,17 @@ DEFAPPTAGGEDTYPE(krb5_cred, 22, untagged_cred); static const struct field_info enc_cred_part_fields[] = { /* EncKrbCredPart ::= [APPLICATION 29] SEQUENCE */ /* ticket-info[0] SEQUENCE OF KrbCredInfo */ - FIELDOF_NORM(krb5_cred_enc_part, ptrseqof_cred_info, ticket_info, 0), + FIELDOF_NORM(krb5_cred_enc_part, ptrseqof_cred_info, ticket_info, 0, 0), /* nonce[1] INTEGER OPTIONAL */ - FIELDOF_OPT(krb5_cred_enc_part, int32, nonce, 1, 1), + FIELDOF_OPT(krb5_cred_enc_part, int32, nonce, 1, 0, 1), /* timestamp[2] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_cred_enc_part, kerberos_time, timestamp, 2, 2), + FIELDOF_OPT(krb5_cred_enc_part, kerberos_time, timestamp, 2, 0, 2), /* usec[3] INTEGER OPTIONAL */ - FIELDOF_OPT(krb5_cred_enc_part, int32, usec, 3, 3), + FIELDOF_OPT(krb5_cred_enc_part, int32, usec, 3, 0, 3), /* s-address[4] HostAddress OPTIONAL */ - FIELDOF_OPT(krb5_cred_enc_part, address_ptr, s_address, 4, 4), + FIELDOF_OPT(krb5_cred_enc_part, address_ptr, s_address, 4, 0, 4), /* r-address[5] HostAddress OPTIONAL */ - FIELDOF_OPT(krb5_cred_enc_part, address_ptr, r_address, 5, 5), + FIELDOF_OPT(krb5_cred_enc_part, address_ptr, r_address, 5, 0, 5), }; static unsigned int optional_enc_cred_part(const void *p) @@ -1073,31 +1097,31 @@ DEFAPPTAGGEDTYPE(enc_cred_part, 29, untagged_enc_cred_part); static const struct field_info error_fields[] = { /* KRB-ERROR ::= [APPLICATION 30] SEQUENCE */ /* pvno[0] INTEGER */ - FIELD_INT_IMM(KVNO, 0), + FIELD_INT_IMM(KVNO, 0, 0), /* msg-type[1] INTEGER */ - FIELD_INT_IMM(ASN1_KRB_ERROR, 1), + FIELD_INT_IMM(ASN1_KRB_ERROR, 1, 0), /* ctime[2] KerberosTime OPTIONAL */ - FIELDOF_OPT(krb5_error, kerberos_time, ctime, 2, 2), + FIELDOF_OPT(krb5_error, kerberos_time, ctime, 2, 0, 2), /* cusec[3] INTEGER OPTIONAL */ - FIELDOF_OPT(krb5_error, int32, cusec, 3, 3), + FIELDOF_OPT(krb5_error, int32, cusec, 3, 0, 3), /* stime[4] KerberosTime */ - FIELDOF_NORM(krb5_error, kerberos_time, stime, 4), + FIELDOF_NORM(krb5_error, kerberos_time, stime, 4, 0), /* susec[5] INTEGER */ - FIELDOF_NORM(krb5_error, int32, susec, 5), + FIELDOF_NORM(krb5_error, int32, susec, 5, 0), /* error-code[6] INTEGER */ - FIELDOF_NORM(krb5_error, ui_4, error, 6), + FIELDOF_NORM(krb5_error, ui_4, error, 6, 0), /* crealm[7] Realm OPTIONAL */ - FIELDOF_OPT(krb5_error, realm_of_principal, client, 7, 7), + FIELDOF_OPT(krb5_error, realm_of_principal, client, 7, 0, 7), /* cname[8] PrincipalName OPTIONAL */ - FIELDOF_OPT(krb5_error, principal, client, 8, 8), + FIELDOF_OPT(krb5_error, principal, client, 8, 0, 8), /* realm[9] Realm -- Correct realm */ - FIELDOF_NORM(krb5_error, realm_of_principal, server, 9), + FIELDOF_NORM(krb5_error, realm_of_principal, server, 9, 0), /* sname[10] PrincipalName -- Correct name */ - FIELDOF_NORM(krb5_error, principal, server, 10), + FIELDOF_NORM(krb5_error, principal, server, 10, 0), /* e-text[11] GeneralString OPTIONAL */ - FIELDOF_OPT(krb5_error, gstring_data, text, 11, 11), + FIELDOF_OPT(krb5_error, gstring_data, text, 11, 0, 11), /* e-data[12] OCTET STRING OPTIONAL */ - FIELDOF_OPT(krb5_error, ostring_data, e_data, 12, 12), + FIELDOF_OPT(krb5_error, ostring_data, e_data, 12, 0, 12), }; static unsigned int optional_error(const void *p) @@ -1124,8 +1148,8 @@ DEFSEQTYPE(untagged_krb5_error, krb5_error, error_fields, optional_error); DEFAPPTAGGEDTYPE(krb5_error, 30, untagged_krb5_error); static const struct field_info alt_method_fields[] = { - FIELDOF_NORM(krb5_alt_method, int32, method, 0), - FIELDOF_OPTSTRING(krb5_alt_method, octetstring, data, length, 1, 1), + FIELDOF_NORM(krb5_alt_method, int32, method, 0, 0), + FIELDOF_OPTSTRING(krb5_alt_method, octetstring, data, length, 1, 0, 1), }; static unsigned int optional_alt_method(const void *p) @@ -1141,8 +1165,8 @@ optional_alt_method(const void *p) DEFSEQTYPE(alt_method, krb5_alt_method, alt_method_fields, optional_alt_method); static const struct field_info pa_enc_ts_fields[] = { - FIELDOF_NORM(krb5_pa_enc_ts, kerberos_time, patimestamp, 0), - FIELDOF_OPT(krb5_pa_enc_ts, int32, pausec, 1, 1), + FIELDOF_NORM(krb5_pa_enc_ts, kerberos_time, patimestamp, 0, 0), + FIELDOF_OPT(krb5_pa_enc_ts, int32, pausec, 1, 0, 1), }; static unsigned int optional_pa_enc_ts(const void *p) @@ -1158,36 +1182,36 @@ optional_pa_enc_ts(const void *p) DEFSEQTYPE(pa_enc_ts, krb5_pa_enc_ts, pa_enc_ts_fields, optional_pa_enc_ts); static const struct field_info pwd_data_fields[] = { - FIELDOF_NORM(krb5_pwd_data, int32, sequence_count, 0), - FIELDOF_NORM(krb5_pwd_data, ptr_seqof_passwdsequence, element, 1), + FIELDOF_NORM(krb5_pwd_data, int32, sequence_count, 0, 0), + FIELDOF_NORM(krb5_pwd_data, ptr_seqof_passwdsequence, element, 1, 0), }; DEFSEQTYPE(pwd_data, krb5_pwd_data, pwd_data_fields, 0); static const struct field_info setpw_req_fields[] = { - FIELDOF_NORM(struct krb5_setpw_req, ostring_data, password, 0), - FIELDOF_NORM(struct krb5_setpw_req, principal, target, 1), - FIELDOF_NORM(struct krb5_setpw_req, realm_of_principal, target, 2), + FIELDOF_NORM(struct krb5_setpw_req, ostring_data, password, 0, 0), + FIELDOF_NORM(struct krb5_setpw_req, principal, target, 1, 0), + FIELDOF_NORM(struct krb5_setpw_req, realm_of_principal, target, 2, 0), }; DEFSEQTYPE(setpw_req, struct krb5_setpw_req, setpw_req_fields, 0); /* [MS-SFU] Section 2.2.1. */ static const struct field_info pa_for_user_fields[] = { - FIELDOF_NORM(krb5_pa_for_user, principal, user, 0), - FIELDOF_NORM(krb5_pa_for_user, realm_of_principal, user, 1), - FIELDOF_NORM(krb5_pa_for_user, checksum, cksum, 2), - FIELDOF_NORM(krb5_pa_for_user, gstring_data, auth_package, 3), + FIELDOF_NORM(krb5_pa_for_user, principal, user, 0, 0), + FIELDOF_NORM(krb5_pa_for_user, realm_of_principal, user, 1, 0), + FIELDOF_NORM(krb5_pa_for_user, checksum, cksum, 2, 0), + FIELDOF_NORM(krb5_pa_for_user, gstring_data, auth_package, 3, 0), }; DEFSEQTYPE(pa_for_user, krb5_pa_for_user, pa_for_user_fields, 0); /* [MS-SFU] Section 2.2.2. */ static const struct field_info s4u_userid_fields[] = { - FIELDOF_NORM(krb5_s4u_userid, int32, nonce, 0), - FIELDOF_OPT(krb5_s4u_userid, principal, user, 1, 1), - FIELDOF_NORM(krb5_s4u_userid, realm_of_principal, user, 2), - FIELDOF_OPT(krb5_s4u_userid, ostring_data, subject_cert, 3, 3), - FIELDOF_OPT(krb5_s4u_userid, krb5_flags, options, 4, 4), + FIELDOF_NORM(krb5_s4u_userid, int32, nonce, 0, 0), + FIELDOF_OPT(krb5_s4u_userid, principal, user, 1, 0, 1), + FIELDOF_NORM(krb5_s4u_userid, realm_of_principal, user, 2, 0), + FIELDOF_OPT(krb5_s4u_userid, ostring_data, subject_cert, 3, 0, 3), + FIELDOF_OPT(krb5_s4u_userid, krb5_flags, options, 4, 0, 4), }; static unsigned int s4u_userid_optional (const void *p) { @@ -1205,27 +1229,32 @@ static unsigned int s4u_userid_optional (const void *p) { DEFSEQTYPE(s4u_userid, krb5_s4u_userid, s4u_userid_fields, s4u_userid_optional); static const struct field_info pa_s4u_x509_user_fields[] = { - FIELDOF_NORM(krb5_pa_s4u_x509_user, s4u_userid, user_id, 0), - FIELDOF_NORM(krb5_pa_s4u_x509_user, checksum, cksum, 1), + FIELDOF_NORM(krb5_pa_s4u_x509_user, s4u_userid, user_id, 0, 0), + FIELDOF_NORM(krb5_pa_s4u_x509_user, checksum, cksum, 1, 0), }; DEFSEQTYPE(pa_s4u_x509_user, krb5_pa_s4u_x509_user, pa_s4u_x509_user_fields, 0); /* draft-ietf-krb-wg-kerberos-referrals Appendix A. */ static const struct field_info pa_svr_referral_data_fields[] = { - FIELDOF_NORM(krb5_pa_svr_referral_data, realm_of_principal, principal, 0), - FIELDOF_OPT(krb5_pa_svr_referral_data, principal, principal, 1, 1), + FIELDOF_NORM(krb5_pa_svr_referral_data, realm_of_principal, principal, + 0, 0), + FIELDOF_OPT(krb5_pa_svr_referral_data, principal, principal, 1, 0, 1), }; DEFSEQTYPE(pa_svr_referral_data, krb5_pa_svr_referral_data, pa_svr_referral_data_fields, 0); /* draft-ietf-krb-wg-kerberos-referrals Section 8. */ static const struct field_info pa_server_referral_data_fields[] = { - FIELDOF_OPT(krb5_pa_server_referral_data, gstring_data_ptr, referred_realm, 0, 0), - FIELDOF_OPT(krb5_pa_server_referral_data, principal, true_principal_name, 1, 1), - FIELDOF_OPT(krb5_pa_server_referral_data, principal, requested_principal_name, 2, 2), - FIELDOF_OPT(krb5_pa_server_referral_data, kerberos_time, referral_valid_until, 3, 3), - FIELDOF_NORM(krb5_pa_server_referral_data, checksum, rep_cksum, 4), + FIELDOF_OPT(krb5_pa_server_referral_data, gstring_data_ptr, referred_realm, + 0, 0, 0), + FIELDOF_OPT(krb5_pa_server_referral_data, principal, true_principal_name, + 1, 0, 1), + FIELDOF_OPT(krb5_pa_server_referral_data, principal, + requested_principal_name, 2, 0, 2), + FIELDOF_OPT(krb5_pa_server_referral_data, kerberos_time, + referral_valid_until, 3, 0, 3), + FIELDOF_NORM(krb5_pa_server_referral_data, checksum, rep_cksum, 4, 0), }; DEFSEQTYPE(pa_server_referral_data, krb5_pa_server_referral_data, pa_server_referral_data_fields, 0); @@ -1233,7 +1262,7 @@ DEFSEQTYPE(pa_server_referral_data, krb5_pa_server_referral_data, pa_server_refe #if 0 /* draft-brezak-win2k-krb-authz Section 6. */ static const struct field_info pa_pac_request_fields[] = { - FIELDOF_NORM(krb5_pa_pac_req, boolean, include_pac, 0), + FIELDOF_NORM(krb5_pa_pac_req, boolean, include_pac, 0, 0), }; DEFSEQTYPE(pa_pac_request, krb5_pa_pac_req, pa_pac_request_fields, 0); @@ -1241,21 +1270,22 @@ DEFSEQTYPE(pa_pac_request, krb5_pa_pac_req, pa_pac_request_fields, 0); /* RFC 4537 */ DEFFIELDTYPE(etype_list, krb5_etype_list, - FIELDOF_SEQOF_INT32(krb5_etype_list, int32_ptr, etypes, length, -1)); + FIELDOF_SEQOF_INT32(krb5_etype_list, int32_ptr, etypes, length, + -1, 0)); /* draft-ietf-krb-wg-preauth-framework-09 */ static const struct field_info fast_armor_fields[] = { - FIELDOF_NORM(krb5_fast_armor, int32, armor_type, 0), - FIELDOF_NORM( krb5_fast_armor, ostring_data, armor_value, 1), + FIELDOF_NORM(krb5_fast_armor, int32, armor_type, 0, 0), + FIELDOF_NORM(krb5_fast_armor, ostring_data, armor_value, 1, 0), }; DEFSEQTYPE( fast_armor, krb5_fast_armor, fast_armor_fields, 0); DEFPTRTYPE( ptr_fast_armor, fast_armor); static const struct field_info fast_armored_req_fields[] = { - FIELDOF_OPT( krb5_fast_armored_req, ptr_fast_armor, armor, 0, 0), - FIELDOF_NORM( krb5_fast_armored_req, checksum, req_checksum, 1), - FIELDOF_NORM( krb5_fast_armored_req, encrypted_data, enc_part, 2), + FIELDOF_OPT(krb5_fast_armored_req, ptr_fast_armor, armor, 0, 0, 0), + FIELDOF_NORM(krb5_fast_armored_req, checksum, req_checksum, 1, 0), + FIELDOF_NORM(krb5_fast_armored_req, encrypted_data, enc_part, 2, 0), }; static unsigned int fast_armored_req_optional (const void *p) { @@ -1267,28 +1297,28 @@ static unsigned int fast_armored_req_optional (const void *p) { } DEFSEQTYPE( fast_armored_req, krb5_fast_armored_req, fast_armored_req_fields, fast_armored_req_optional); -DEFFIELDTYPE( pa_fx_fast_request, krb5_fast_armored_req, - FIELDOF_ENCODEAS( krb5_fast_armored_req, fast_armored_req, 0)); +DEFFIELDTYPE(pa_fx_fast_request, krb5_fast_armored_req, + FIELDOF_ENCODEAS(krb5_fast_armored_req, fast_armored_req, 0, 0)); DEFFIELDTYPE(fast_req_padata, krb5_kdc_req, - FIELDOF_NORM(krb5_kdc_req, ptr_seqof_pa_data, padata, -1)); + FIELDOF_NORM(krb5_kdc_req, ptr_seqof_pa_data, padata, -1, 0)); DEFPTRTYPE(ptr_fast_req_padata, fast_req_padata); static const struct field_info fast_req_fields[] = { - FIELDOF_NORM(krb5_fast_req, krb5_flags, fast_options, 0), - FIELDOF_NORM( krb5_fast_req, ptr_fast_req_padata, req_body, 1), - FIELDOF_NORM( krb5_fast_req, ptr_kdc_req_body, req_body, 2), + FIELDOF_NORM(krb5_fast_req, krb5_flags, fast_options, 0, 0), + FIELDOF_NORM( krb5_fast_req, ptr_fast_req_padata, req_body, 1, 0), + FIELDOF_NORM( krb5_fast_req, ptr_kdc_req_body, req_body, 2, 0), }; DEFSEQTYPE(fast_req, krb5_fast_req, fast_req_fields, 0); static const struct field_info fast_finished_fields[] = { - FIELDOF_NORM( krb5_fast_finished, kerberos_time, timestamp, 0), - FIELDOF_NORM( krb5_fast_finished, int32, usec, 1), - FIELDOF_NORM( krb5_fast_finished, realm_of_principal, client, 2), - FIELDOF_NORM(krb5_fast_finished, principal, client, 3), - FIELDOF_NORM( krb5_fast_finished, checksum, ticket_checksum, 4), + FIELDOF_NORM( krb5_fast_finished, kerberos_time, timestamp, 0, 0), + FIELDOF_NORM( krb5_fast_finished, int32, usec, 1, 0), + FIELDOF_NORM( krb5_fast_finished, realm_of_principal, client, 2, 0), + FIELDOF_NORM(krb5_fast_finished, principal, client, 3, 0), + FIELDOF_NORM( krb5_fast_finished, checksum, ticket_checksum, 4, 0), }; DEFSEQTYPE( fast_finished, krb5_fast_finished, fast_finished_fields, 0); @@ -1296,10 +1326,11 @@ DEFSEQTYPE( fast_finished, krb5_fast_finished, fast_finished_fields, 0); DEFPTRTYPE( ptr_fast_finished, fast_finished); static const struct field_info fast_response_fields[] = { - FIELDOF_NORM(krb5_fast_response, ptr_seqof_pa_data, padata, 0), - FIELDOF_OPT( krb5_fast_response, ptr_encryption_key, strengthen_key, 1, 1), - FIELDOF_OPT( krb5_fast_response, ptr_fast_finished, finished, 2, 2), - FIELDOF_NORM(krb5_fast_response, int32, nonce, 3), + FIELDOF_NORM(krb5_fast_response, ptr_seqof_pa_data, padata, 0, 0), + FIELDOF_OPT(krb5_fast_response, ptr_encryption_key, strengthen_key, + 1, 0, 1), + FIELDOF_OPT(krb5_fast_response, ptr_fast_finished, finished, 2, 0, 2), + FIELDOF_NORM(krb5_fast_response, int32, nonce, 3, 0), }; static unsigned int @@ -1316,18 +1347,18 @@ fast_response_optional (const void *p) DEFSEQTYPE( fast_response, krb5_fast_response, fast_response_fields, fast_response_optional); static const struct field_info fast_rep_fields[] = { - FIELDOF_ENCODEAS(krb5_enc_data, encrypted_data, 0), + FIELDOF_ENCODEAS(krb5_enc_data, encrypted_data, 0, 0), }; DEFSEQTYPE(fast_rep, krb5_enc_data, fast_rep_fields, 0); DEFFIELDTYPE(pa_fx_fast_reply, krb5_enc_data, - FIELDOF_ENCODEAS(krb5_enc_data, fast_rep, 0)); + FIELDOF_ENCODEAS(krb5_enc_data, fast_rep, 0, 0)); static const struct field_info ad_kdcissued_fields[] = { - FIELDOF_NORM(krb5_ad_kdcissued, checksum, ad_checksum, 0), - FIELDOF_OPT(krb5_ad_kdcissued, realm_of_principal, i_principal, 1, 1), - FIELDOF_OPT(krb5_ad_kdcissued, principal, i_principal, 2, 1), - FIELDOF_NORM(krb5_ad_kdcissued, auth_data_ptr, elements, 3), + FIELDOF_NORM(krb5_ad_kdcissued, checksum, ad_checksum, 0, 0), + FIELDOF_OPT(krb5_ad_kdcissued, realm_of_principal, i_principal, 1, 0, 1), + FIELDOF_OPT(krb5_ad_kdcissued, principal, i_principal, 2, 0, 1), + FIELDOF_NORM(krb5_ad_kdcissued, auth_data_ptr, elements, 3, 0), }; static unsigned int @@ -1343,8 +1374,8 @@ ad_kdcissued_optional(const void *p) DEFSEQTYPE(ad_kdc_issued, krb5_ad_kdcissued, ad_kdcissued_fields, ad_kdcissued_optional); static const struct field_info princ_plus_realm_fields[] = { - FIELDOF_ENCODEAS(krb5_principal_data, principal_data, 0), - FIELDOF_ENCODEAS(krb5_principal_data, realm_of_principal_data, 1), + FIELDOF_ENCODEAS(krb5_principal_data, principal_data, 0, 0), + FIELDOF_ENCODEAS(krb5_principal_data, realm_of_principal_data, 1, 0), }; DEFSEQTYPE(princ_plus_realm_data, krb5_principal_data, princ_plus_realm_fields, 0); @@ -1354,11 +1385,14 @@ DEFNULLTERMSEQOFTYPE(seq_of_princ_plus_realm, princ_plus_realm); DEFPTRTYPE(ptr_seq_of_princ_plus_realm, seq_of_princ_plus_realm); static const struct field_info ad_signedpath_data_fields[] = { - FIELDOF_NORM(krb5_ad_signedpath_data, princ_plus_realm, client, 0), - FIELDOF_NORM(krb5_ad_signedpath_data, kerberos_time, authtime, 1), - FIELDOF_OPT(krb5_ad_signedpath_data, ptr_seq_of_princ_plus_realm, delegated, 2, 2), - FIELDOF_OPT(krb5_ad_signedpath_data, ptr_seqof_pa_data, method_data, 3, 3), - FIELDOF_OPT(krb5_ad_signedpath_data, auth_data_ptr, authorization_data, 4, 4), + FIELDOF_NORM(krb5_ad_signedpath_data, princ_plus_realm, client, 0, 0), + FIELDOF_NORM(krb5_ad_signedpath_data, kerberos_time, authtime, 1, 0), + FIELDOF_OPT(krb5_ad_signedpath_data, ptr_seq_of_princ_plus_realm, + delegated, 2, 0, 2), + FIELDOF_OPT(krb5_ad_signedpath_data, ptr_seqof_pa_data, method_data, + 3, 0, 3), + FIELDOF_OPT(krb5_ad_signedpath_data, auth_data_ptr, authorization_data, + 4, 0, 4), }; static unsigned int ad_signedpath_data_optional(const void *p) @@ -1377,10 +1411,11 @@ static unsigned int ad_signedpath_data_optional(const void *p) DEFSEQTYPE(ad_signedpath_data, krb5_ad_signedpath_data, ad_signedpath_data_fields, ad_signedpath_data_optional); static const struct field_info ad_signedpath_fields[] = { - FIELDOF_NORM(krb5_ad_signedpath, int32, enctype, 0), - FIELDOF_NORM(krb5_ad_signedpath, checksum, checksum, 1), - FIELDOF_OPT(krb5_ad_signedpath, ptr_seq_of_princ_plus_realm, delegated, 2, 2), - FIELDOF_OPT(krb5_ad_signedpath, ptr_seqof_pa_data, method_data, 3, 3), + FIELDOF_NORM(krb5_ad_signedpath, int32, enctype, 0, 0), + FIELDOF_NORM(krb5_ad_signedpath, checksum, checksum, 1, 0), + FIELDOF_OPT(krb5_ad_signedpath, ptr_seq_of_princ_plus_realm, delegated, + 2, 0, 2), + FIELDOF_OPT(krb5_ad_signedpath, ptr_seqof_pa_data, method_data, 3, 0, 3), }; static unsigned int ad_signedpath_optional(const void *p) @@ -1397,8 +1432,8 @@ static unsigned int ad_signedpath_optional(const void *p) DEFSEQTYPE(ad_signedpath, krb5_ad_signedpath, ad_signedpath_fields, ad_signedpath_optional); static const struct field_info iakerb_header_fields[] = { - FIELDOF_NORM(krb5_iakerb_header, ostring_data, target_realm, 1), - FIELDOF_OPT(krb5_iakerb_header, ostring_data_ptr, cookie, 2, 2), + FIELDOF_NORM(krb5_iakerb_header, ostring_data, target_realm, 1, 0), + FIELDOF_OPT(krb5_iakerb_header, ostring_data_ptr, cookie, 2, 0, 2), }; static unsigned int iakerb_header_optional(const void *p) @@ -1413,7 +1448,7 @@ static unsigned int iakerb_header_optional(const void *p) DEFSEQTYPE(iakerb_header, krb5_iakerb_header, iakerb_header_fields, iakerb_header_optional); static const struct field_info iakerb_finished_fields[] = { - FIELDOF_NORM(krb5_iakerb_finished, checksum, checksum, 1), + FIELDOF_NORM(krb5_iakerb_finished, checksum, checksum, 1, 0), }; static unsigned int iakerb_finished_optional(const void *p) @@ -1656,11 +1691,12 @@ DEFFNTYPE(algorithm_identifier, krb5_algorithm_identifier, asn1_encode_algorithm DEFSTRINGTYPE(object_identifier, char *, asn1_encode_bytestring, ASN1_OBJECTIDENTIFIER); DEFFIELDTYPE(oid_data, krb5_data, - FIELDOF_STRING(krb5_data, object_identifier, data, length, -1)); + FIELDOF_STRING(krb5_data, object_identifier, data, length, + -1, 0)); DEFPTRTYPE(oid_data_ptr, oid_data); static const struct field_info kdf_alg_id_fields[] = { - FIELDOF_ENCODEAS(krb5_data, oid_data, 0) + FIELDOF_ENCODEAS(krb5_data, oid_data, 0, 0) }; DEFSEQTYPE(kdf_alg_id, krb5_data, kdf_alg_id_fields, NULL); DEFPTRTYPE(kdf_alg_id_ptr, kdf_alg_id); @@ -1673,8 +1709,8 @@ MAKE_ENCFN(asn1_encode_kdf_alg_id, kdf_alg_id); /* Krb5PrincipalName is defined in RFC 4556 and is *not* PrincipalName from RFC 4120*/ static const struct field_info pkinit_krb5_principal_name_fields[] = { - FIELDOF_NORM(krb5_principal_data, gstring_data, realm, 0), - FIELDOF_ENCODEAS(krb5_principal_data, principal_data, 1) + FIELDOF_NORM(krb5_principal_data, gstring_data, realm, 0, 0), + FIELDOF_ENCODEAS(krb5_principal_data, principal_data, 1, 0) }; @@ -1685,21 +1721,25 @@ DEFOCTETWRAPTYPE(pkinit_krb5_principal_name_wrapped, pkinit_krb5_principal_name) /* For SP80056A OtherInfo, for pkinit agility */ static const struct field_info sp80056a_other_info_fields[] = { - FIELDOF_NORM(krb5_sp80056a_other_info, algorithm_identifier, algorithm_identifier, -1), - FIELDOF_NORM(krb5_sp80056a_other_info, pkinit_krb5_principal_name_wrapped, party_u_info, 0), - FIELDOF_NORM(krb5_sp80056a_other_info, pkinit_krb5_principal_name_wrapped, party_v_info, 1), - FIELDOF_STRING(krb5_sp80056a_other_info, s_octetstring, supp_pub_info.data, supp_pub_info.length, 2), + FIELDOF_NORM(krb5_sp80056a_other_info, algorithm_identifier, + algorithm_identifier, -1, 0), + FIELDOF_NORM(krb5_sp80056a_other_info, pkinit_krb5_principal_name_wrapped, + party_u_info, 0, 0), + FIELDOF_NORM(krb5_sp80056a_other_info, pkinit_krb5_principal_name_wrapped, + party_v_info, 1, 0), + FIELDOF_STRING(krb5_sp80056a_other_info, s_octetstring, + supp_pub_info.data, supp_pub_info.length, 2, 0), }; DEFSEQTYPE(sp80056a_other_info, krb5_sp80056a_other_info, sp80056a_other_info_fields, NULL); /* For PkinitSuppPubInfo, for pkinit agility */ static const struct field_info pkinit_supp_pub_info_fields[] = { - FIELDOF_NORM(krb5_pkinit_supp_pub_info, int32, enctype, 0), + FIELDOF_NORM(krb5_pkinit_supp_pub_info, int32, enctype, 0, 0), FIELDOF_STRING(krb5_pkinit_supp_pub_info, s_octetstring, as_req.data, - as_req.length, 1), + as_req.length, 1, 0), FIELDOF_STRING(krb5_pkinit_supp_pub_info, s_octetstring, pk_as_rep.data, - pk_as_rep.length, 2), + pk_as_rep.length, 2, 0), }; DEFSEQTYPE(pkinit_supp_pub_info, krb5_pkinit_supp_pub_info, pkinit_supp_pub_info_fields, NULL); diff --git a/src/lib/krb5/asn.1/ldap_key_seq.c b/src/lib/krb5/asn.1/ldap_key_seq.c index 92104ba2c..3b080cba9 100644 --- a/src/lib/krb5/asn.1/ldap_key_seq.c +++ b/src/lib/krb5/asn.1/ldap_key_seq.c @@ -59,9 +59,9 @@ DEFINTTYPE(int16, krb5_int16); DEFINTTYPE(ui_2, krb5_ui_2); static const struct field_info krbsalt_fields[] = { - FIELDOF_NORM(krb5_key_data, int16, key_data_type[1], 0), + FIELDOF_NORM(krb5_key_data, int16, key_data_type[1], 0, 0), FIELDOF_OPTSTRINGL(krb5_key_data, octetstring, key_data_contents[1], - ui_2, key_data_length[1], 1, 1), + ui_2, key_data_length[1], 1, 0, 1), }; static unsigned int optional_krbsalt (const void *p) @@ -76,15 +76,15 @@ optional_krbsalt (const void *p) } DEFSEQTYPE(krbsalt, krb5_key_data, krbsalt_fields, optional_krbsalt); static const struct field_info encryptionkey_fields[] = { - FIELDOF_NORM(krb5_key_data, int16, key_data_type[0], 0), + FIELDOF_NORM(krb5_key_data, int16, key_data_type[0], 0, 0), FIELDOF_STRINGL(krb5_key_data, octetstring, key_data_contents[0], - ui_2, key_data_length[0], 1), + ui_2, key_data_length[0], 1, 0), }; DEFSEQTYPE(encryptionkey, krb5_key_data, encryptionkey_fields, 0); static const struct field_info key_data_fields[] = { - FIELDOF_ENCODEAS(krb5_key_data, krbsalt, 0), - FIELDOF_ENCODEAS(krb5_key_data, encryptionkey, 1), + FIELDOF_ENCODEAS(krb5_key_data, krbsalt, 0, 0), + FIELDOF_ENCODEAS(krb5_key_data, encryptionkey, 1, 0), #if 0 /* We don't support this field currently. */ FIELDOF_blah(krb5_key_data, s2kparams, ...), #endif @@ -93,16 +93,16 @@ DEFSEQTYPE(key_data, krb5_key_data, key_data_fields, 0); DEFPTRTYPE(ptr_key_data, key_data); DEFFIELDTYPE(key_data_kvno, krb5_key_data, - FIELDOF_NORM(krb5_key_data, int16, key_data_kvno, -1)); + FIELDOF_NORM(krb5_key_data, int16, key_data_kvno, -1, 0)); DEFPTRTYPE(ptr_key_data_kvno, key_data_kvno); static const struct field_info ldap_key_seq_fields[] = { - FIELD_INT_IMM(1, 0), - FIELD_INT_IMM(1, 1), - FIELDOF_NORM(ldap_seqof_key_data, ptr_key_data_kvno, key_data, 2), - FIELDOF_NORM(ldap_seqof_key_data, int32, mkvno, 3), /* mkvno */ + FIELD_INT_IMM(1, 0, 0), + FIELD_INT_IMM(1, 1, 0), + FIELDOF_NORM(ldap_seqof_key_data, ptr_key_data_kvno, key_data, 2, 0), + FIELDOF_NORM(ldap_seqof_key_data, int32, mkvno, 3, 0), /* mkvno */ FIELDOF_SEQOF_LEN(ldap_seqof_key_data, ptr_key_data, key_data, n_key_data, - int16, 4), + int16, 4, 0), }; DEFSEQTYPE(ldap_key_seq, ldap_seqof_key_data, ldap_key_seq_fields, 0); |
