#ifndef _KRB5_INT_PKINIT_H
#define _KRB5_INT_PKINIT_H
typedef struct _krb5_algorithm_identifier {
krb5_data algorithm;
krb5_data parameters;
} krb5_algorithm_identifier;
typedef struct _krb5_pachecksum2 {
krb5_data checksum;
krb5_algorithm_identifier algorithmIdentifier;
} krb5_pachecksum2;
typedef struct _krb5_pk_authenticator {
krb5_int32 cusec;
krb5_timestamp ctime;
krb5_int32 nonce;
krb5_data paChecksum;
krb5_data *freshnessToken;
krb5_pachecksum2 *paChecksum2;
} krb5_pk_authenticator;
typedef struct _krb5_auth_pack {
krb5_pk_authenticator pkAuthenticator;
krb5_data clientPublicValue;
krb5_algorithm_identifier **supportedCMSTypes;
krb5_data clientDHNonce;
krb5_data **supportedKDFs;
} krb5_auth_pack;
typedef struct _krb5_external_principal_identifier {
krb5_data subjectName;
krb5_data issuerAndSerialNumber;
krb5_data subjectKeyIdentifier;
} krb5_external_principal_identifier;
typedef struct _krb5_pa_pk_as_req {
krb5_data signedAuthPack;
krb5_external_principal_identifier **trustedCertifiers;
krb5_data kdcPkId;
} krb5_pa_pk_as_req;
typedef struct _krb5_dh_rep_info {
krb5_data dhSignedData;
krb5_data serverDHNonce;
krb5_data *kdfID;
} krb5_dh_rep_info;
typedef struct _krb5_kdc_dh_key_info {
krb5_data subjectPublicKey;
krb5_int32 nonce;
krb5_timestamp dhKeyExpiration;
} krb5_kdc_dh_key_info;
typedef struct _krb5_reply_key_pack {
krb5_keyblock replyKey;
krb5_checksum asChecksum;
} krb5_reply_key_pack;
typedef struct _krb5_pa_pk_as_rep {
enum krb5_pa_pk_as_rep_selection {
choice_pa_pk_as_rep_UNKNOWN = -1,
choice_pa_pk_as_rep_dhInfo = 0,
choice_pa_pk_as_rep_encKeyPack = 1
} choice;
union krb5_pa_pk_as_rep_choices {
krb5_dh_rep_info dh_Info;
krb5_data encKeyPack;
} u;
} krb5_pa_pk_as_rep;
typedef struct _krb5_sp80056a_other_info {
krb5_algorithm_identifier algorithm_identifier;
krb5_principal party_u_info;
krb5_principal party_v_info;
krb5_data supp_pub_info;
} krb5_sp80056a_other_info;
typedef struct _krb5_pkinit_supp_pub_info {
krb5_enctype enctype;
krb5_data as_req;
krb5_data pk_as_rep;
} krb5_pkinit_supp_pub_info;
krb5_error_code
encode_krb5_pa_pk_as_req(const krb5_pa_pk_as_req *rep, krb5_data **code);
krb5_error_code
encode_krb5_pa_pk_as_rep(const krb5_pa_pk_as_rep *rep, krb5_data **code);
krb5_error_code
encode_krb5_auth_pack(const krb5_auth_pack *rep, krb5_data **code);
krb5_error_code
encode_krb5_kdc_dh_key_info(const krb5_kdc_dh_key_info *rep, krb5_data **code);
krb5_error_code
encode_krb5_reply_key_pack(const krb5_reply_key_pack *, krb5_data **code);
krb5_error_code
encode_krb5_td_trusted_certifiers(krb5_external_principal_identifier *const *,
krb5_data **code);
krb5_error_code
encode_krb5_td_dh_parameters(krb5_algorithm_identifier *const *,
krb5_data **code);
krb5_error_code
encode_krb5_sp80056a_other_info(const krb5_sp80056a_other_info *,
krb5_data **);
krb5_error_code
encode_krb5_pkinit_supp_pub_info(const krb5_pkinit_supp_pub_info *,
krb5_data **);
krb5_error_code
decode_krb5_pa_pk_as_req(const krb5_data *, krb5_pa_pk_as_req **);
krb5_error_code
decode_krb5_pa_pk_as_rep(const krb5_data *, krb5_pa_pk_as_rep **);
krb5_error_code
decode_krb5_auth_pack(const krb5_data *, krb5_auth_pack **);
krb5_error_code
decode_krb5_kdc_dh_key_info(const krb5_data *, krb5_kdc_dh_key_info **);
krb5_error_code
decode_krb5_principal_name(const krb5_data *, krb5_principal_data **);
krb5_error_code
decode_krb5_reply_key_pack(const krb5_data *, krb5_reply_key_pack **);
krb5_error_code
decode_krb5_td_trusted_certifiers(const krb5_data *,
krb5_external_principal_identifier ***);
krb5_error_code
decode_krb5_td_dh_parameters(const krb5_data *, krb5_algorithm_identifier ***);
krb5_error_code
encode_krb5_enc_data(const krb5_enc_data *, krb5_data **);
krb5_error_code
encode_krb5_encryption_key(const krb5_keyblock *rep, krb5_data **code);
krb5_error_code
krb5_encrypt_helper(krb5_context context, const krb5_keyblock *key,
krb5_keyusage keyusage, const krb5_data *plain,
krb5_enc_data *cipher);
#endif