#ifndef KRB_FAST_H
#define KRB_FAST_H
#include <k5-int.h>
struct krb5int_fast_request_state {
krb5_kdc_req fast_outer_request;
krb5_keyblock *armor_key;
krb5_fast_armor *armor;
krb5_ui_4 fast_state_flags;
krb5_ui_4 fast_options;
krb5_int32 nonce;
};
#define KRB5INT_FAST_DO_FAST (1l<<0)
#define KRB5INT_FAST_ARMOR_AVAIL (1l<<1)
krb5_error_code
krb5int_fast_prep_req_body(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_kdc_req *request,
krb5_data **encoded_req_body);
typedef krb5_error_code (*kdc_req_encoder_proc)(const krb5_kdc_req *,
krb5_data **);
krb5_error_code
krb5int_fast_prep_req(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_kdc_req *request,
const krb5_data *to_be_checksummed,
kdc_req_encoder_proc encoder,
krb5_data **encoded_request);
krb5_error_code
krb5int_fast_process_error(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_error **err_replyptr,
krb5_pa_data ***out_padata,
krb5_boolean *retry);
krb5_error_code
krb5int_fast_process_response(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_kdc_rep *resp,
krb5_keyblock **strengthen_key);
krb5_error_code
krb5int_fast_make_state(krb5_context context,
struct krb5int_fast_request_state **state);
void
krb5int_fast_free_state(krb5_context context,
struct krb5int_fast_request_state *state);
krb5_error_code
krb5int_fast_as_armor(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_get_init_creds_opt *opt, krb5_kdc_req *request);
krb5_error_code
krb5int_fast_reply_key(krb5_context context,
const krb5_keyblock *strengthen_key,
const krb5_keyblock *existing_key, krb5_keyblock *output_key);
krb5_error_code
krb5int_fast_verify_nego(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_kdc_rep *rep, krb5_data *request,
krb5_keyblock *decrypting_key,
krb5_boolean *fast_avail);
krb5_boolean
k5_upgrade_to_fast_p(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_pa_data **padata);
krb5_error_code
krb5int_fast_tgs_armor(krb5_context context,
struct krb5int_fast_request_state *state,
krb5_keyblock *subkey,
krb5_keyblock *session_key,
krb5_ccache ccache,
krb5_data *target_realm);
#endif