summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTheodore Tso <tytso@mit.edu>1995-08-28 20:01:39 +0000
committerTheodore Tso <tytso@mit.edu>1995-08-28 20:01:39 +0000
commit42c4dd4abdc0bfc0ceb8ea8185fa15228cfcfcb3 (patch)
tree5f9316d67c89726acf74a274221d5ad831f7abe8 /src
parent4132293f0a3ec1d79e2d07bce37152f8701bc5aa (diff)
downloadkrb5-42c4dd4abdc0bfc0ceb8ea8185fa15228cfcfcb3.tar.gz
krb5-42c4dd4abdc0bfc0ceb8ea8185fa15228cfcfcb3.tar.xz
krb5-42c4dd4abdc0bfc0ceb8ea8185fa15228cfcfcb3.zip
Added two new data structures: krb5_alt_method and krb5_etype_info
(and krb5_etype_info_entry). git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6604 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/include/ChangeLog5
-rw-r--r--src/include/k5-int.h553
2 files changed, 301 insertions, 257 deletions
diff --git a/src/include/ChangeLog b/src/include/ChangeLog
index 726922140..db1333416 100644
--- a/src/include/ChangeLog
+++ b/src/include/ChangeLog
@@ -1,3 +1,8 @@
+Mon Aug 28 15:58:14 1995 <tytso@rsts-11.mit.edu>
+
+ * k5-int.h: Added two new data structures: krb5_alt_method and
+ krb5_etype_info (and krb5_etype_info_entry).
+
Fri Aug 25 17:12:37 1995 Theodore Y. Ts'o <tytso@dcl>
* k5-int.h: Added prototypes for encode_krb5_padata_sequence and
diff --git a/src/include/k5-int.h b/src/include/k5-int.h
index 6fdfc0212..8c9e46b63 100644
--- a/src/include/k5-int.h
+++ b/src/include/k5-int.h
@@ -453,267 +453,30 @@ int win_socket_initialize();
*/
/*
- * Begin "asn1.h"
+ * This structure is returned in the e-data field of the KRB-ERROR
+ * message when the error calling for an alternative form of
+ * authentication is returned, KRB_AP_METHOD.
*/
-#ifndef KRB5_ASN1__
-#define KRB5_ASN1__
-
-/* ASN.1 encoding knowledge; KEEP IN SYNC WITH ASN.1 defs! */
-/* here we use some knowledge of ASN.1 encodings */
-/*
- Ticket is APPLICATION 1.
- Authenticator is APPLICATION 2.
- AS_REQ is APPLICATION 10.
- AS_REP is APPLICATION 11.
- TGS_REQ is APPLICATION 12.
- TGS_REP is APPLICATION 13.
- AP_REQ is APPLICATION 14.
- AP_REP is APPLICATION 15.
- KRB_SAFE is APPLICATION 20.
- KRB_PRIV is APPLICATION 21.
- KRB_CRED is APPLICATION 22.
- EncASRepPart is APPLICATION 25.
- EncTGSRepPart is APPLICATION 26.
- EncAPRepPart is APPLICATION 27.
- EncKrbPrivPart is APPLICATION 28.
- EncKrbCredPart is APPLICATION 29.
- KRB_ERROR is APPLICATION 30.
- */
-/* allow either constructed or primitive encoding, so check for bit 6
- set or reset */
-#define krb5_is_krb_ticket(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x61 ||\
- (dat)->data[0] == 0x41))
-#define krb5_is_krb_authenticator(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x62 ||\
- (dat)->data[0] == 0x42))
-#define krb5_is_as_req(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x6a ||\
- (dat)->data[0] == 0x4a))
-#define krb5_is_as_rep(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x6b ||\
- (dat)->data[0] == 0x4b))
-#define krb5_is_tgs_req(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x6c ||\
- (dat)->data[0] == 0x4c))
-#define krb5_is_tgs_rep(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x6d ||\
- (dat)->data[0] == 0x4d))
-#define krb5_is_ap_req(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x6e ||\
- (dat)->data[0] == 0x4e))
-#define krb5_is_ap_rep(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x6f ||\
- (dat)->data[0] == 0x4f))
-#define krb5_is_krb_safe(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x74 ||\
- (dat)->data[0] == 0x54))
-#define krb5_is_krb_priv(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x75 ||\
- (dat)->data[0] == 0x55))
-#define krb5_is_krb_cred(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x76 ||\
- (dat)->data[0] == 0x56))
-#define krb5_is_krb_enc_as_rep_part(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x79 ||\
- (dat)->data[0] == 0x59))
-#define krb5_is_krb_enc_tgs_rep_part(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x7a ||\
- (dat)->data[0] == 0x5a))
-#define krb5_is_krb_enc_ap_rep_part(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x7b ||\
- (dat)->data[0] == 0x5b))
-#define krb5_is_krb_enc_krb_priv_part(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x7c ||\
- (dat)->data[0] == 0x5c))
-#define krb5_is_krb_enc_krb_cred_part(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x7d ||\
- (dat)->data[0] == 0x5d))
-#define krb5_is_krb_error(dat)\
- ((dat) && (dat)->length && ((dat)->data[0] == 0x7e ||\
- (dat)->data[0] == 0x5e))
-
-/*************************************************************************
- * Prototypes for krb5_encode.c
- *************************************************************************/
-
-/*
- krb5_error_code encode_krb5_structure(const krb5_structure *rep,
- krb5_data **code);
- modifies *code
- effects Returns the ASN.1 encoding of *rep in **code.
- Returns ASN1_MISSING_FIELD if a required field is emtpy in *rep.
- Returns ENOMEM if memory runs out.
-*/
-
-krb5_error_code encode_krb5_authenticator
- KRB5_PROTOTYPE((const krb5_authenticator *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_ticket
- KRB5_PROTOTYPE((const krb5_ticket *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_encryption_key
- KRB5_PROTOTYPE((const krb5_keyblock *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_enc_tkt_part
- KRB5_PROTOTYPE((const krb5_enc_tkt_part *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_enc_kdc_rep_part
- KRB5_PROTOTYPE((const krb5_enc_kdc_rep_part *rep, krb5_data **code));
-
-/* yes, the translation is identical to that used for KDC__REP */
-krb5_error_code encode_krb5_as_rep
- KRB5_PROTOTYPE((const krb5_kdc_rep *rep, krb5_data **code));
-
-/* yes, the translation is identical to that used for KDC__REP */
-krb5_error_code encode_krb5_tgs_rep
- KRB5_PROTOTYPE((const krb5_kdc_rep *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_ap_req
- KRB5_PROTOTYPE((const krb5_ap_req *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_ap_rep
- KRB5_PROTOTYPE((const krb5_ap_rep *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_ap_rep_enc_part
- KRB5_PROTOTYPE((const krb5_ap_rep_enc_part *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_as_req
- KRB5_PROTOTYPE((const krb5_kdc_req *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_tgs_req
- KRB5_PROTOTYPE((const krb5_kdc_req *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_kdc_req_body
- KRB5_PROTOTYPE((const krb5_kdc_req *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_safe
- KRB5_PROTOTYPE((const krb5_safe *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_priv
- KRB5_PROTOTYPE((const krb5_priv *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_enc_priv_part
- KRB5_PROTOTYPE((const krb5_priv_enc_part *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_cred
- KRB5_PROTOTYPE((const krb5_cred *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_enc_cred_part
- KRB5_PROTOTYPE((const krb5_cred_enc_part *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_error
- KRB5_PROTOTYPE((const krb5_error *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_authdata
- KRB5_PROTOTYPE((const krb5_authdata **rep, krb5_data **code));
-
-krb5_error_code encode_krb5_pwd_sequence
- KRB5_PROTOTYPE((const passwd_phrase_element *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_pwd_data
- KRB5_PROTOTYPE((const krb5_pwd_data *rep, krb5_data **code));
-
-krb5_error_code encode_krb5_padata_sequence
- KRB5_PROTOTYPE((const krb5_pa_data ** rep, krb5_data **code));
-
-/*************************************************************************
- * End of prototypes for krb5_encode.c
- *************************************************************************/
-
-
-/*************************************************************************
- * Prototypes for krb5_decode.c
- *************************************************************************/
-
-/*
- krb5_error_code decode_krb5_structure(const krb5_data *code,
- krb5_structure **rep);
-
- requires Expects **rep to not have been allocated;
- a new *rep is allocated regardless of the old value.
- effects Decodes *code into **rep.
- Returns ENOMEM if memory is exhausted.
- Returns asn1 and krb5 errors.
-*/
-
-krb5_error_code decode_krb5_authenticator
- KRB5_PROTOTYPE((const krb5_data *code, krb5_authenticator **rep));
-
-krb5_error_code decode_krb5_ticket
- KRB5_PROTOTYPE((const krb5_data *code, krb5_ticket **rep));
-
-krb5_error_code decode_krb5_encryption_key
- KRB5_PROTOTYPE((const krb5_data *output, krb5_keyblock **rep));
-
-krb5_error_code decode_krb5_enc_tkt_part
- KRB5_PROTOTYPE((const krb5_data *output, krb5_enc_tkt_part **rep));
-
-krb5_error_code decode_krb5_enc_kdc_rep_part
- KRB5_PROTOTYPE((const krb5_data *output, krb5_enc_kdc_rep_part **rep));
-
-krb5_error_code decode_krb5_as_rep
- KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_rep **rep));
-
-krb5_error_code decode_krb5_tgs_rep
- KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_rep **rep));
-
-krb5_error_code decode_krb5_ap_req
- KRB5_PROTOTYPE((const krb5_data *output, krb5_ap_req **rep));
-
-krb5_error_code decode_krb5_ap_rep
- KRB5_PROTOTYPE((const krb5_data *output, krb5_ap_rep **rep));
-
-krb5_error_code decode_krb5_ap_rep_enc_part
- KRB5_PROTOTYPE((const krb5_data *output, krb5_ap_rep_enc_part **rep));
-
-krb5_error_code decode_krb5_as_req
- KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_req **rep));
-
-krb5_error_code decode_krb5_tgs_req
- KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_req **rep));
-
-krb5_error_code decode_krb5_kdc_req_body
- KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_req **rep));
-
-krb5_error_code decode_krb5_safe
- KRB5_PROTOTYPE((const krb5_data *output, krb5_safe **rep));
-
-krb5_error_code decode_krb5_priv
- KRB5_PROTOTYPE((const krb5_data *output, krb5_priv **rep));
-
-krb5_error_code decode_krb5_enc_priv_part
- KRB5_PROTOTYPE((const krb5_data *output, krb5_priv_enc_part **rep));
-
-krb5_error_code decode_krb5_cred
- KRB5_PROTOTYPE((const krb5_data *output, krb5_cred **rep));
-
-krb5_error_code decode_krb5_enc_cred_part
- KRB5_PROTOTYPE((const krb5_data *output, krb5_cred_enc_part **rep));
-
-krb5_error_code decode_krb5_error
- KRB5_PROTOTYPE((const krb5_data *output, krb5_error **rep));
-
-krb5_error_code decode_krb5_authdata
- KRB5_PROTOTYPE((const krb5_data *output, krb5_authdata ***rep));
-
-krb5_error_code decode_krb5_pwd_sequence
- KRB5_PROTOTYPE((const krb5_data *output, passwd_phrase_element **rep));
-
-krb5_error_code decode_krb5_pwd_data
- KRB5_PROTOTYPE((const krb5_data *output, krb5_pwd_data **rep));
-
-krb5_error_code decode_krb5_padata_sequence
- KRB5_PROTOTYPE((const krb5_data *output, krb5_pa_data ***rep));
-
-/*************************************************************************
- * End of prototypes for krb5_decode.c
- *************************************************************************/
+typedef struct _krb5_alt_method {
+ krb5_magic magic;
+ krb5_int32 method;
+ krb5_int32 length;
+ krb5_octet *data;
+} krb5_alt_method;
-#endif /* KRB5_ASN1__ */
/*
- * End "asn1.h"
+ * A null-terminated array of this structure is returned by the KDC as
+ * the data part of the ETYPE_INFO preauth type. It informs the
+ * client which encryption types are supported.
*/
+typedef struct _krb5_etype_info_entry {
+ krb5_magic magic;
+ krb5_int32 etype;
+ krb5_int32 length;
+ krb5_octet *salt;
+} krb5_etype_info_entry;
+
+typedef krb5_etype_info_entry ** krb5_etype_info;
/*
* Begin "dbm.h"
@@ -1104,4 +867,280 @@ struct _krb5_context {
profile_t profile;
void FAR *db_context;
};
+
+/*
+ * Begin "asn1.h"
+ */
+#ifndef KRB5_ASN1__
+#define KRB5_ASN1__
+
+/* ASN.1 encoding knowledge; KEEP IN SYNC WITH ASN.1 defs! */
+/* here we use some knowledge of ASN.1 encodings */
+/*
+ Ticket is APPLICATION 1.
+ Authenticator is APPLICATION 2.
+ AS_REQ is APPLICATION 10.
+ AS_REP is APPLICATION 11.
+ TGS_REQ is APPLICATION 12.
+ TGS_REP is APPLICATION 13.
+ AP_REQ is APPLICATION 14.
+ AP_REP is APPLICATION 15.
+ KRB_SAFE is APPLICATION 20.
+ KRB_PRIV is APPLICATION 21.
+ KRB_CRED is APPLICATION 22.
+ EncASRepPart is APPLICATION 25.
+ EncTGSRepPart is APPLICATION 26.
+ EncAPRepPart is APPLICATION 27.
+ EncKrbPrivPart is APPLICATION 28.
+ EncKrbCredPart is APPLICATION 29.
+ KRB_ERROR is APPLICATION 30.
+ */
+/* allow either constructed or primitive encoding, so check for bit 6
+ set or reset */
+#define krb5_is_krb_ticket(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x61 ||\
+ (dat)->data[0] == 0x41))
+#define krb5_is_krb_authenticator(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x62 ||\
+ (dat)->data[0] == 0x42))
+#define krb5_is_as_req(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x6a ||\
+ (dat)->data[0] == 0x4a))
+#define krb5_is_as_rep(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x6b ||\
+ (dat)->data[0] == 0x4b))
+#define krb5_is_tgs_req(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x6c ||\
+ (dat)->data[0] == 0x4c))
+#define krb5_is_tgs_rep(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x6d ||\
+ (dat)->data[0] == 0x4d))
+#define krb5_is_ap_req(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x6e ||\
+ (dat)->data[0] == 0x4e))
+#define krb5_is_ap_rep(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x6f ||\
+ (dat)->data[0] == 0x4f))
+#define krb5_is_krb_safe(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x74 ||\
+ (dat)->data[0] == 0x54))
+#define krb5_is_krb_priv(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x75 ||\
+ (dat)->data[0] == 0x55))
+#define krb5_is_krb_cred(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x76 ||\
+ (dat)->data[0] == 0x56))
+#define krb5_is_krb_enc_as_rep_part(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x79 ||\
+ (dat)->data[0] == 0x59))
+#define krb5_is_krb_enc_tgs_rep_part(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x7a ||\
+ (dat)->data[0] == 0x5a))
+#define krb5_is_krb_enc_ap_rep_part(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x7b ||\
+ (dat)->data[0] == 0x5b))
+#define krb5_is_krb_enc_krb_priv_part(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x7c ||\
+ (dat)->data[0] == 0x5c))
+#define krb5_is_krb_enc_krb_cred_part(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x7d ||\
+ (dat)->data[0] == 0x5d))
+#define krb5_is_krb_error(dat)\
+ ((dat) && (dat)->length && ((dat)->data[0] == 0x7e ||\
+ (dat)->data[0] == 0x5e))
+
+/*************************************************************************
+ * Prototypes for krb5_encode.c
+ *************************************************************************/
+
+/*
+ krb5_error_code encode_krb5_structure(const krb5_structure *rep,
+ krb5_data **code);
+ modifies *code
+ effects Returns the ASN.1 encoding of *rep in **code.
+ Returns ASN1_MISSING_FIELD if a required field is emtpy in *rep.
+ Returns ENOMEM if memory runs out.
+*/
+
+krb5_error_code encode_krb5_authenticator
+ KRB5_PROTOTYPE((const krb5_authenticator *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_ticket
+ KRB5_PROTOTYPE((const krb5_ticket *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_encryption_key
+ KRB5_PROTOTYPE((const krb5_keyblock *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_enc_tkt_part
+ KRB5_PROTOTYPE((const krb5_enc_tkt_part *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_enc_kdc_rep_part
+ KRB5_PROTOTYPE((const krb5_enc_kdc_rep_part *rep, krb5_data **code));
+
+/* yes, the translation is identical to that used for KDC__REP */
+krb5_error_code encode_krb5_as_rep
+ KRB5_PROTOTYPE((const krb5_kdc_rep *rep, krb5_data **code));
+
+/* yes, the translation is identical to that used for KDC__REP */
+krb5_error_code encode_krb5_tgs_rep
+ KRB5_PROTOTYPE((const krb5_kdc_rep *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_ap_req
+ KRB5_PROTOTYPE((const krb5_ap_req *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_ap_rep
+ KRB5_PROTOTYPE((const krb5_ap_rep *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_ap_rep_enc_part
+ KRB5_PROTOTYPE((const krb5_ap_rep_enc_part *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_as_req
+ KRB5_PROTOTYPE((const krb5_kdc_req *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_tgs_req
+ KRB5_PROTOTYPE((const krb5_kdc_req *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_kdc_req_body
+ KRB5_PROTOTYPE((const krb5_kdc_req *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_safe
+ KRB5_PROTOTYPE((const krb5_safe *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_priv
+ KRB5_PROTOTYPE((const krb5_priv *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_enc_priv_part
+ KRB5_PROTOTYPE((const krb5_priv_enc_part *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_cred
+ KRB5_PROTOTYPE((const krb5_cred *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_enc_cred_part
+ KRB5_PROTOTYPE((const krb5_cred_enc_part *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_error
+ KRB5_PROTOTYPE((const krb5_error *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_authdata
+ KRB5_PROTOTYPE((const krb5_authdata **rep, krb5_data **code));
+
+krb5_error_code encode_krb5_pwd_sequence
+ KRB5_PROTOTYPE((const passwd_phrase_element *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_pwd_data
+ KRB5_PROTOTYPE((const krb5_pwd_data *rep, krb5_data **code));
+
+krb5_error_code encode_krb5_padata_sequence
+ KRB5_PROTOTYPE((const krb5_pa_data ** rep, krb5_data **code));
+
+krb5_error_code encode_krb5_alt_method
+ KRB5_PROTOTYPE((const krb5_alt_method *, krb5_data **code));
+
+krb5_error_code encode_krb5_etype_info
+ KRB5_PROTOTYPE((const krb5_etype_info_entry **, krb5_data **code));
+
+/*************************************************************************
+ * End of prototypes for krb5_encode.c
+ *************************************************************************/
+
+
+/*************************************************************************
+ * Prototypes for krb5_decode.c
+ *************************************************************************/
+
+/*
+ krb5_error_code decode_krb5_structure(const krb5_data *code,
+ krb5_structure **rep);
+
+ requires Expects **rep to not have been allocated;
+ a new *rep is allocated regardless of the old value.
+ effects Decodes *code into **rep.
+ Returns ENOMEM if memory is exhausted.
+ Returns asn1 and krb5 errors.
+*/
+
+krb5_error_code decode_krb5_authenticator
+ KRB5_PROTOTYPE((const krb5_data *code, krb5_authenticator **rep));
+
+krb5_error_code decode_krb5_ticket
+ KRB5_PROTOTYPE((const krb5_data *code, krb5_ticket **rep));
+
+krb5_error_code decode_krb5_encryption_key
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_keyblock **rep));
+
+krb5_error_code decode_krb5_enc_tkt_part
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_enc_tkt_part **rep));
+
+krb5_error_code decode_krb5_enc_kdc_rep_part
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_enc_kdc_rep_part **rep));
+
+krb5_error_code decode_krb5_as_rep
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_rep **rep));
+
+krb5_error_code decode_krb5_tgs_rep
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_rep **rep));
+
+krb5_error_code decode_krb5_ap_req
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_ap_req **rep));
+
+krb5_error_code decode_krb5_ap_rep
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_ap_rep **rep));
+
+krb5_error_code decode_krb5_ap_rep_enc_part
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_ap_rep_enc_part **rep));
+
+krb5_error_code decode_krb5_as_req
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_req **rep));
+
+krb5_error_code decode_krb5_tgs_req
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_req **rep));
+
+krb5_error_code decode_krb5_kdc_req_body
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_kdc_req **rep));
+
+krb5_error_code decode_krb5_safe
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_safe **rep));
+
+krb5_error_code decode_krb5_priv
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_priv **rep));
+
+krb5_error_code decode_krb5_enc_priv_part
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_priv_enc_part **rep));
+
+krb5_error_code decode_krb5_cred
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_cred **rep));
+
+krb5_error_code decode_krb5_enc_cred_part
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_cred_enc_part **rep));
+
+krb5_error_code decode_krb5_error
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_error **rep));
+
+krb5_error_code decode_krb5_authdata
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_authdata ***rep));
+
+krb5_error_code decode_krb5_pwd_sequence
+ KRB5_PROTOTYPE((const krb5_data *output, passwd_phrase_element **rep));
+
+krb5_error_code decode_krb5_pwd_data
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_pwd_data **rep));
+
+krb5_error_code decode_krb5_padata_sequence
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_pa_data ***rep));
+
+krb5_error_code decode_krb5_alt_method
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_alt_method **rep));
+
+krb5_error_code decode_krb5_etype_info
+ KRB5_PROTOTYPE((const krb5_data *output, krb5_etype_info_entry ***rep));
+
+/*************************************************************************
+ * End of prototypes for krb5_decode.c
+ *************************************************************************/
+
+#endif /* KRB5_ASN1__ */
+/*
+ * End "asn1.h"
+ */
+
#endif /* _KRB5_INT_H */