Path: blob/main/crypto/krb5/src/lib/gssapi/spnego/gssapiP_spnego.h
39563 views
/*1* Copyright 2003 Sun Microsystems, Inc. All rights reserved.2* Use is subject to license terms.3*/45#ifndef _GSSAPIP_SPNEGO_H_6#define _GSSAPIP_SPNEGO_H_78/* #pragma ident "@(#)gssapiP_spnego.h 1.3 03/09/18 SMI" */910#ifdef __cplusplus11extern "C" {12#endif1314typedef struct spnego_ctx_st *spnego_gss_ctx_id_t;1516#include <gssapi/gssapi.h>17#include <gssapi/gssapi_ext.h>18#include <k5-queue.h>19#include "gssapiP_negoex.h"2021#define SEC_CONTEXT_TOKEN 122#define SPNEGO_SIZE_OF_INT 42324#define ACCEPT_COMPLETE 025#define ACCEPT_INCOMPLETE 126#define REJECT 227#define REQUEST_MIC 328#define UNSPECIFIED 0xffffffffUL2930/*31* constants for der encoding/decoding routines.32*/3334#define MECH_OID 0x0635#define OCTET_STRING 0x0436#define CONTEXT 0xa037#define SEQUENCE 0x3038#define SEQUENCE_OF 0x3039#define BIT_STRING 0x0340#define BIT_STRING_LENGTH 0x0241#define BIT_STRING_PADDING 0x0142#define ENUMERATED 0x0a43#define ENUMERATION_LENGTH 144#define HEADER_ID 0x6045#define GENERAL_STRING 0x1b4647/*48* SPNEGO and NegoEx minor status codes49*/50#define ERR_SPNEGO_NO_MECHS_AVAILABLE 0x2000000151#define ERR_SPNEGO_NO_CREDS_ACQUIRED 0x2000000252#define ERR_SPNEGO_NO_MECH_FROM_ACCEPTOR 0x2000000353#define ERR_SPNEGO_NEGOTIATION_FAILED 0x2000000454#define ERR_SPNEGO_NO_TOKEN_FROM_ACCEPTOR 0x2000000555#define ERR_NEGOEX_INVALID_MESSAGE_SIGNATURE 0x2000000656#define ERR_NEGOEX_INVALID_MESSAGE_TYPE 0x2000000757#define ERR_NEGOEX_INVALID_MESSAGE_SIZE 0x2000000858#define ERR_NEGOEX_INVALID_CONVERSATION_ID 0x2000000959#define ERR_NEGOEX_AUTH_SCHEME_NOT_FOUND 0x2000001060#define ERR_NEGOEX_MISSING_NEGO_MESSAGE 0x2000001161#define ERR_NEGOEX_MISSING_AP_REQUEST_MESSAGE 0x2000001262#define ERR_NEGOEX_NO_AVAILABLE_MECHS 0x2000001363#define ERR_NEGOEX_NO_VERIFY_KEY 0x2000001464#define ERR_NEGOEX_UNKNOWN_CHECKSUM_SCHEME 0x2000001565#define ERR_NEGOEX_INVALID_CHECKSUM 0x2000001666#define ERR_NEGOEX_UNSUPPORTED_CRITICAL_EXTENSION 0x2000001767#define ERR_NEGOEX_UNSUPPORTED_VERSION 0x2000001868#define ERR_NEGOEX_MESSAGE_OUT_OF_SEQUENCE 0x200000196970/*71* send_token_flag is used to indicate in later steps what type72* of token, if any should be sent or processed.73* NO_TOKEN_SEND = no token should be sent74* INIT_TOKEN_SEND = initial token will be sent75* CONT_TOKEN_SEND = continuing tokens to be sent76* CHECK_MIC = no token to be sent, but have a MIC to check.77* ERROR_TOKEN_SEND = error token from peer needs to be sent.78*/7980typedef enum {NO_TOKEN_SEND, INIT_TOKEN_SEND, CONT_TOKEN_SEND,81CHECK_MIC, ERROR_TOKEN_SEND} send_token_flag;8283/*84* The Mech OID:85* { iso(1) org(3) dod(6) internet(1) security(5)86* mechanism(5) spnego(2) }87*/8889#define SPNEGO_OID_LENGTH 690#define SPNEGO_OID "\053\006\001\005\005\002"9192typedef void *spnego_token_t;9394/* spnego name structure for internal representation. */95typedef struct {96gss_OID type;97gss_buffer_t buffer;98gss_OID mech_type;99gss_name_t mech_name;100} spnego_name_desc, *spnego_name_t;101102/* Structure for credential */103typedef struct {104gss_cred_id_t mcred; /* mechglue union of obtainable creds */105gss_OID_set neg_mechs; /* app-specified list of allowable mechs */106int no_ask_integ; /* do not request integ from mechs */107} spnego_gss_cred_id_rec, *spnego_gss_cred_id_t;108109/* Structure for context handle */110struct spnego_ctx_st {111OM_uint32 magic_num;112gss_buffer_desc DER_mechTypes;113gss_OID_set mech_set;114gss_OID internal_mech; /* alias into mech_set->elements */115gss_ctx_id_t ctx_handle;116int mic_reqd;117int mic_sent;118int mic_rcvd;119int firstpass;120int mech_complete;121int nego_done;122int initiate;123int opened;124OM_uint32 ctx_flags;125gss_name_t internal_name;126gss_OID actual_mech;127gss_cred_id_t deleg_cred;128int negoex_step;129struct k5buf negoex_transcript;130uint32_t negoex_seqnum;131conversation_id negoex_conv_id;132K5_TAILQ_HEAD(negoex_mech_list, negoex_auth_mech) negoex_mechs;133krb5_context kctx;134};135136/*137* The magic number must be less than a standard pagesize138* to avoid a possible collision with a real address.139*/140#define SPNEGO_MAGIC_ID 0x00000fed141142/* SPNEGO oid declarations */143extern const gss_OID_desc * const gss_mech_spnego;144extern const gss_OID_set_desc * const gss_mech_set_spnego;145146#if defined(DEBUG) && defined(HAVE_SYSLOG_H)147#include <syslog.h>148#define dsyslog(a) syslog(LOG_DEBUG, a)149#else150#define dsyslog(a)151#define SPNEGO_STATIC152#endif /* DEBUG */153154/*155* declarations of internal name mechanism functions156*/157158OM_uint32 KRB5_CALLCONV spnego_gss_acquire_cred159(160OM_uint32 *, /* minor_status */161gss_name_t, /* desired_name */162OM_uint32, /* time_req */163gss_OID_set, /* desired_mechs */164gss_cred_usage_t, /* cred_usage */165gss_cred_id_t *, /* output_cred_handle */166gss_OID_set *, /* actual_mechs */167OM_uint32 * /* time_rec */168);169170OM_uint32 KRB5_CALLCONV spnego_gss_release_cred171(172OM_uint32 *, /* minor_status */173/* CSTYLED */174gss_cred_id_t * /* cred_handle */175);176177OM_uint32 KRB5_CALLCONV spnego_gss_init_sec_context178(179OM_uint32 *, /* minor_status */180gss_cred_id_t, /* claimant_cred_handle */181gss_ctx_id_t *, /* context_handle */182gss_name_t, /* target_name */183gss_OID, /* mech_type */184OM_uint32, /* req_flags */185OM_uint32, /* time_req */186gss_channel_bindings_t, /* input_chan_bindings */187gss_buffer_t, /* input_token */188gss_OID *, /* actual_mech_type */189gss_buffer_t, /* output_token */190OM_uint32 *, /* ret_flags */191OM_uint32 * /* time_rec */192);193194#ifndef LEAN_CLIENT195OM_uint32 KRB5_CALLCONV spnego_gss_accept_sec_context196(197OM_uint32 *, /* minor_status */198gss_ctx_id_t *, /* context_handle */199gss_cred_id_t, /* verifier_cred_handle */200gss_buffer_t, /* input_token_buffer */201gss_channel_bindings_t, /* input_chan_bindings */202gss_name_t *, /* src_name */203gss_OID *, /* mech_type */204gss_buffer_t, /* output_token */205OM_uint32 *, /* ret_flags */206OM_uint32 *, /* time_rec */207/* CSTYLED */208gss_cred_id_t * /* delegated_cred_handle */209);210#endif /* LEAN_CLIENT */211212OM_uint32 KRB5_CALLCONV spnego_gss_compare_name213(214OM_uint32 *, /* minor_status */215const gss_name_t, /* name1 */216const gss_name_t, /* name2 */217int * /* name_equal */218);219220OM_uint32 KRB5_CALLCONV spnego_gss_display_name221(222OM_uint32 *, /* minor_status */223gss_name_t, /* input_name */224gss_buffer_t, /* output_name_buffer */225gss_OID * /* output_name_type */226);227228OM_uint32 KRB5_CALLCONV spnego_gss_display_status229(230OM_uint32 *, /* minor_status */231OM_uint32, /* status_value */232int, /* status_type */233gss_OID, /* mech_type */234OM_uint32 *, /* message_context */235gss_buffer_t /* status_string */236);237238OM_uint32 KRB5_CALLCONV spnego_gss_import_name239(240OM_uint32 *, /* minor_status */241gss_buffer_t, /* input_name_buffer */242gss_OID, /* input_name_type */243/* CSTYLED */244gss_name_t * /* output_name */245);246247OM_uint32 KRB5_CALLCONV spnego_gss_release_name248(249OM_uint32 *, /* minor_status */250/* CSTYLED */251gss_name_t * /* input_name */252);253254OM_uint32 KRB5_CALLCONV spnego_gss_duplicate_name255(256OM_uint32 *, /* minor_status */257/* CSTYLED */258const gss_name_t, /* input_name */259gss_name_t * /* output_name */260);261262OM_uint32 KRB5_CALLCONV spnego_gss_inquire_cred263(264OM_uint32 *, /* minor_status */265gss_cred_id_t, /* cred_handle */266gss_name_t *, /* name */267OM_uint32 *, /* lifetime */268int *, /* cred_usage */269gss_OID_set * /* mechanisms */270);271272OM_uint32 KRB5_CALLCONV spnego_gss_inquire_names_for_mech273(274OM_uint32 *, /* minor_status */275gss_OID, /* mechanism */276gss_OID_set * /* name_types */277);278279OM_uint32 KRB5_CALLCONV spnego_gss_unwrap280(281OM_uint32 *minor_status,282gss_ctx_id_t context_handle,283gss_buffer_t input_message_buffer,284gss_buffer_t output_message_buffer,285int *conf_state,286gss_qop_t *qop_state287);288289OM_uint32 KRB5_CALLCONV spnego_gss_wrap290(291OM_uint32 *minor_status,292gss_ctx_id_t context_handle,293int conf_req_flag,294gss_qop_t qop_req,295gss_buffer_t input_message_buffer,296int *conf_state,297gss_buffer_t output_message_buffer298);299300OM_uint32 KRB5_CALLCONV spnego_gss_process_context_token301(302OM_uint32 *minor_status,303const gss_ctx_id_t context_handle,304const gss_buffer_t token_buffer305);306307OM_uint32 KRB5_CALLCONV spnego_gss_delete_sec_context308(309OM_uint32 *minor_status,310gss_ctx_id_t *context_handle,311gss_buffer_t output_token312);313314OM_uint32 KRB5_CALLCONV spnego_gss_context_time315(316OM_uint32 *minor_status,317const gss_ctx_id_t context_handle,318OM_uint32 *time_rec319);320#ifndef LEAN_CLIENT321OM_uint32 KRB5_CALLCONV spnego_gss_export_sec_context322(323OM_uint32 *minor_status,324gss_ctx_id_t *context_handle,325gss_buffer_t interprocess_token326);327328OM_uint32 KRB5_CALLCONV spnego_gss_import_sec_context329(330OM_uint32 *minor_status,331const gss_buffer_t interprocess_token,332gss_ctx_id_t *context_handle333);334#endif /* LEAN_CLIENT */335336OM_uint32 KRB5_CALLCONV spnego_gss_inquire_context337(338OM_uint32 *minor_status,339const gss_ctx_id_t context_handle,340gss_name_t *src_name,341gss_name_t *targ_name,342OM_uint32 *lifetime_rec,343gss_OID *mech_type,344OM_uint32 *ctx_flags,345int *locally_initiated,346int *opened347);348349OM_uint32 KRB5_CALLCONV spnego_gss_wrap_size_limit350(351OM_uint32 *minor_status,352const gss_ctx_id_t context_handle,353int conf_req_flag,354gss_qop_t qop_req,355OM_uint32 req_output_size,356OM_uint32 *max_input_size357);358359OM_uint32 KRB5_CALLCONV spnego_gss_localname360(361OM_uint32 *minor_status,362const gss_name_t pname,363const gss_const_OID mech_type,364gss_buffer_t localname365);366367OM_uint32 KRB5_CALLCONV spnego_gss_get_mic368(369OM_uint32 *minor_status,370const gss_ctx_id_t context_handle,371gss_qop_t qop_req,372const gss_buffer_t message_buffer,373gss_buffer_t message_token374);375376OM_uint32 KRB5_CALLCONV spnego_gss_verify_mic377(378OM_uint32 *minor_status,379const gss_ctx_id_t context_handle,380const gss_buffer_t msg_buffer,381const gss_buffer_t token_buffer,382gss_qop_t *qop_state383);384385OM_uint32 KRB5_CALLCONV386spnego_gss_inquire_sec_context_by_oid387(388OM_uint32 *minor_status,389const gss_ctx_id_t context_handle,390const gss_OID desired_object,391gss_buffer_set_t *data_set392);393394OM_uint32 KRB5_CALLCONV395spnego_gss_inquire_cred_by_oid396(397OM_uint32 *minor_status,398const gss_cred_id_t cred_handle,399const gss_OID desired_object,400gss_buffer_set_t *data_set401);402403OM_uint32 KRB5_CALLCONV404spnego_gss_set_cred_option405(406OM_uint32 *minor_status,407gss_cred_id_t *cred_handle,408const gss_OID desired_object,409const gss_buffer_t value410);411412OM_uint32 KRB5_CALLCONV413spnego_gss_set_sec_context_option414(415OM_uint32 *minor_status,416gss_ctx_id_t *context_handle,417const gss_OID desired_object,418const gss_buffer_t value419);420421#ifdef _GSS_STATIC_LINK422int gss_spnegoint_lib_init(void);423void gss_spnegoint_lib_fini(void);424#else425gss_mechanism KRB5_CALLCONV gss_mech_initialize(void);426#endif /* _GSS_STATIC_LINK */427428OM_uint32 KRB5_CALLCONV spnego_gss_wrap_aead429(430OM_uint32 *minor_status,431gss_ctx_id_t context_handle,432int conf_req_flag,433gss_qop_t qop_req,434gss_buffer_t input_assoc_buffer,435gss_buffer_t input_payload_buffer,436int *conf_state,437gss_buffer_t output_message_buffer438);439440OM_uint32 KRB5_CALLCONV spnego_gss_unwrap_aead441(442OM_uint32 *minor_status,443gss_ctx_id_t context_handle,444gss_buffer_t input_message_buffer,445gss_buffer_t input_assoc_buffer,446gss_buffer_t output_payload_buffer,447int *conf_state,448gss_qop_t *qop_state449);450451OM_uint32 KRB5_CALLCONV spnego_gss_wrap_iov452(453OM_uint32 *minor_status,454gss_ctx_id_t context_handle,455int conf_req_flag,456gss_qop_t qop_req,457int *conf_state,458gss_iov_buffer_desc *iov,459int iov_count460);461462OM_uint32 KRB5_CALLCONV spnego_gss_unwrap_iov463(464OM_uint32 *minor_status,465gss_ctx_id_t context_handle,466int *conf_state,467gss_qop_t *qop_state,468gss_iov_buffer_desc *iov,469int iov_count470);471472OM_uint32 KRB5_CALLCONV spnego_gss_wrap_iov_length473(474OM_uint32 *minor_status,475gss_ctx_id_t context_handle,476int conf_req_flag,477gss_qop_t qop_req,478int *conf_state,479gss_iov_buffer_desc *iov,480int iov_count481);482483OM_uint32 KRB5_CALLCONV484spnego_gss_complete_auth_token485(486OM_uint32 *minor_status,487const gss_ctx_id_t context_handle,488gss_buffer_t input_message_buffer489);490491OM_uint32 KRB5_CALLCONV492spnego_gss_acquire_cred_impersonate_name(493OM_uint32 *, /* minor_status */494const gss_cred_id_t, /* impersonator_cred_handle */495const gss_name_t, /* desired_name */496OM_uint32, /* time_req */497const gss_OID_set, /* desired_mechs */498gss_cred_usage_t, /* cred_usage */499gss_cred_id_t *, /* output_cred_handle */500gss_OID_set *, /* actual_mechs */501OM_uint32 *); /* time_rec */502503OM_uint32 KRB5_CALLCONV504spnego_gss_acquire_cred_with_password(505OM_uint32 *minor_status,506const gss_name_t desired_name,507const gss_buffer_t password,508OM_uint32 time_req,509const gss_OID_set desired_mechs,510gss_cred_usage_t cred_usage,511gss_cred_id_t *output_cred_handle,512gss_OID_set *actual_mechs,513OM_uint32 *time_rec);514515OM_uint32 KRB5_CALLCONV516spnego_gss_display_name_ext517(518OM_uint32 *minor_status,519gss_name_t name,520gss_OID display_as_name_type,521gss_buffer_t display_name522);523524OM_uint32 KRB5_CALLCONV525spnego_gss_inquire_name526(527OM_uint32 *minor_status,528gss_name_t name,529int *name_is_MN,530gss_OID *MN_mech,531gss_buffer_set_t *attrs532);533534OM_uint32 KRB5_CALLCONV535spnego_gss_get_name_attribute536(537OM_uint32 *minor_status,538gss_name_t name,539gss_buffer_t attr,540int *authenticated,541int *complete,542gss_buffer_t value,543gss_buffer_t display_value,544int *more545);546547OM_uint32 KRB5_CALLCONV548spnego_gss_set_name_attribute549(550OM_uint32 *minor_status,551gss_name_t name,552int complete,553gss_buffer_t attr,554gss_buffer_t value555);556557OM_uint32 KRB5_CALLCONV558spnego_gss_delete_name_attribute559(560OM_uint32 *minor_status,561gss_name_t name,562gss_buffer_t attr563);564565OM_uint32 KRB5_CALLCONV566spnego_gss_export_name_composite567(568OM_uint32 *minor_status,569gss_name_t name,570gss_buffer_t exp_composite_name571);572573OM_uint32 KRB5_CALLCONV574spnego_gss_map_name_to_any575(576OM_uint32 *minor_status,577gss_name_t name,578int authenticated,579gss_buffer_t type_id,580gss_any_t *output581);582583OM_uint32 KRB5_CALLCONV584spnego_gss_release_any_name_mapping585(586OM_uint32 *minor_status,587gss_name_t name,588gss_buffer_t type_id,589gss_any_t *input590);591592OM_uint32 KRB5_CALLCONV593spnego_gss_pseudo_random594(595OM_uint32 *minor_status,596gss_ctx_id_t context,597int prf_key,598const gss_buffer_t prf_in,599ssize_t desired_output_len,600gss_buffer_t prf_out601);602603OM_uint32 KRB5_CALLCONV604spnego_gss_set_neg_mechs605(606OM_uint32 *minor_status,607gss_cred_id_t cred_handle,608const gss_OID_set mech_list609);610611OM_uint32 KRB5_CALLCONV612spnego_gss_inquire_mech_for_saslname613(614OM_uint32 *minor_status,615const gss_buffer_t sasl_mech_name,616gss_OID *mech_type617);618619OM_uint32 KRB5_CALLCONV620spnego_gss_inquire_saslname_for_mech621(622OM_uint32 *minor_status,623const gss_OID desired_mech,624gss_buffer_t sasl_mech_name,625gss_buffer_t mech_name,626gss_buffer_t mech_description627);628629OM_uint32 KRB5_CALLCONV630spnego_gss_inquire_attrs_for_mech631(632OM_uint32 *minor_status,633gss_const_OID mech,634gss_OID_set *mech_attrs,635gss_OID_set *known_mech_attrs636);637638OM_uint32 KRB5_CALLCONV639spnego_gss_acquire_cred_from640(641OM_uint32 *minor_status,642const gss_name_t desired_name,643OM_uint32 time_req,644const gss_OID_set desired_mechs,645gss_cred_usage_t cred_usage,646gss_const_key_value_set_t cred_store,647gss_cred_id_t *output_cred_handle,648gss_OID_set *actual_mechs,649OM_uint32 *time_rec650);651652OM_uint32 KRB5_CALLCONV653spnego_gss_export_cred(654OM_uint32 *minor_status,655gss_cred_id_t cred_handle,656gss_buffer_t token657);658659OM_uint32 KRB5_CALLCONV660spnego_gss_import_cred(661OM_uint32 *minor_status,662gss_buffer_t token,663gss_cred_id_t *cred_handle664);665666OM_uint32 KRB5_CALLCONV667spnego_gss_get_mic_iov(668OM_uint32 *minor_status,669gss_ctx_id_t context_handle,670gss_qop_t qop_req,671gss_iov_buffer_desc *iov,672int iov_count673);674675OM_uint32 KRB5_CALLCONV676spnego_gss_verify_mic_iov(677OM_uint32 *minor_status,678gss_ctx_id_t context_handle,679gss_qop_t *qop_state,680gss_iov_buffer_desc *iov,681int iov_count682);683684OM_uint32 KRB5_CALLCONV685spnego_gss_get_mic_iov_length(686OM_uint32 *minor_status,687gss_ctx_id_t context_handle,688gss_qop_t qop_req,689gss_iov_buffer_desc *iov,690int iov_count691);692693#ifdef __cplusplus694}695#endif696697#endif /* _GSSAPIP_SPNEGO_H_ */698699700