xref: /freebsd/crypto/krb5/src/lib/gssapi/spnego/gssapiP_spnego.h (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1 /*
2  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #ifndef	_GSSAPIP_SPNEGO_H_
7 #define	_GSSAPIP_SPNEGO_H_
8 
9 /* #pragma ident	"@(#)gssapiP_spnego.h	1.3	03/09/18 SMI" */
10 
11 #ifdef	__cplusplus
12 extern "C" {
13 #endif
14 
15 typedef struct spnego_ctx_st *spnego_gss_ctx_id_t;
16 
17 #include <gssapi/gssapi.h>
18 #include <gssapi/gssapi_ext.h>
19 #include <k5-queue.h>
20 #include "gssapiP_negoex.h"
21 
22 #define	SEC_CONTEXT_TOKEN 1
23 #define	SPNEGO_SIZE_OF_INT 4
24 
25 #define	ACCEPT_COMPLETE 0
26 #define	ACCEPT_INCOMPLETE 1
27 #define	REJECT 2
28 #define REQUEST_MIC 3
29 #define	UNSPECIFIED 0xffffffffUL
30 
31 /*
32  * constants for der encoding/decoding routines.
33  */
34 
35 #define	MECH_OID		0x06
36 #define	OCTET_STRING		0x04
37 #define	CONTEXT			0xa0
38 #define	SEQUENCE		0x30
39 #define	SEQUENCE_OF		0x30
40 #define	BIT_STRING		0x03
41 #define	BIT_STRING_LENGTH	0x02
42 #define	BIT_STRING_PADDING	0x01
43 #define	ENUMERATED		0x0a
44 #define	ENUMERATION_LENGTH	1
45 #define	HEADER_ID		0x60
46 #define GENERAL_STRING		0x1b
47 
48 /*
49  * SPNEGO and NegoEx minor status codes
50  */
51 #define ERR_SPNEGO_NO_MECHS_AVAILABLE			0x20000001
52 #define ERR_SPNEGO_NO_CREDS_ACQUIRED			0x20000002
53 #define ERR_SPNEGO_NO_MECH_FROM_ACCEPTOR		0x20000003
54 #define ERR_SPNEGO_NEGOTIATION_FAILED			0x20000004
55 #define ERR_SPNEGO_NO_TOKEN_FROM_ACCEPTOR		0x20000005
56 #define ERR_NEGOEX_INVALID_MESSAGE_SIGNATURE		0x20000006
57 #define ERR_NEGOEX_INVALID_MESSAGE_TYPE			0x20000007
58 #define ERR_NEGOEX_INVALID_MESSAGE_SIZE			0x20000008
59 #define ERR_NEGOEX_INVALID_CONVERSATION_ID		0x20000009
60 #define ERR_NEGOEX_AUTH_SCHEME_NOT_FOUND		0x20000010
61 #define ERR_NEGOEX_MISSING_NEGO_MESSAGE			0x20000011
62 #define ERR_NEGOEX_MISSING_AP_REQUEST_MESSAGE		0x20000012
63 #define ERR_NEGOEX_NO_AVAILABLE_MECHS			0x20000013
64 #define ERR_NEGOEX_NO_VERIFY_KEY			0x20000014
65 #define ERR_NEGOEX_UNKNOWN_CHECKSUM_SCHEME		0x20000015
66 #define ERR_NEGOEX_INVALID_CHECKSUM			0x20000016
67 #define ERR_NEGOEX_UNSUPPORTED_CRITICAL_EXTENSION	0x20000017
68 #define ERR_NEGOEX_UNSUPPORTED_VERSION			0x20000018
69 #define ERR_NEGOEX_MESSAGE_OUT_OF_SEQUENCE		0x20000019
70 
71 /*
72  * send_token_flag is used to indicate in later steps what type
73  * of token, if any should be sent or processed.
74  * NO_TOKEN_SEND = no token should be sent
75  * INIT_TOKEN_SEND = initial token will be sent
76  * CONT_TOKEN_SEND = continuing tokens to be sent
77  * CHECK_MIC = no token to be sent, but have a MIC to check.
78  * ERROR_TOKEN_SEND = error token from peer needs to be sent.
79  */
80 
81 typedef	enum {NO_TOKEN_SEND, INIT_TOKEN_SEND, CONT_TOKEN_SEND,
82 		CHECK_MIC, ERROR_TOKEN_SEND} send_token_flag;
83 
84 /*
85  * The Mech OID:
86  * { iso(1) org(3) dod(6) internet(1) security(5)
87  *  mechanism(5) spnego(2) }
88  */
89 
90 #define	SPNEGO_OID_LENGTH 6
91 #define	SPNEGO_OID "\053\006\001\005\005\002"
92 
93 typedef void *spnego_token_t;
94 
95 /* spnego name structure for internal representation. */
96 typedef struct {
97 	gss_OID type;
98 	gss_buffer_t buffer;
99 	gss_OID	mech_type;
100 	gss_name_t	mech_name;
101 } spnego_name_desc, *spnego_name_t;
102 
103 /* Structure for credential */
104 typedef struct {
105 	gss_cred_id_t mcred;	/* mechglue union of obtainable creds */
106 	gss_OID_set neg_mechs;	/* app-specified list of allowable mechs */
107 	int no_ask_integ;	/* do not request integ from mechs */
108 } spnego_gss_cred_id_rec, *spnego_gss_cred_id_t;
109 
110 /* Structure for context handle */
111 struct spnego_ctx_st {
112 	OM_uint32	magic_num;
113 	gss_buffer_desc DER_mechTypes;
114 	gss_OID_set mech_set;
115 	gss_OID internal_mech;  /* alias into mech_set->elements */
116 	gss_ctx_id_t ctx_handle;
117 	int mic_reqd;
118 	int mic_sent;
119 	int mic_rcvd;
120 	int firstpass;
121 	int mech_complete;
122 	int nego_done;
123 	int initiate;
124 	int opened;
125 	OM_uint32 ctx_flags;
126 	gss_name_t internal_name;
127 	gss_OID actual_mech;
128 	gss_cred_id_t deleg_cred;
129 	int negoex_step;
130 	struct k5buf negoex_transcript;
131 	uint32_t negoex_seqnum;
132 	conversation_id negoex_conv_id;
133 	K5_TAILQ_HEAD(negoex_mech_list, negoex_auth_mech) negoex_mechs;
134 	krb5_context kctx;
135 };
136 
137 /*
138  * The magic number must be less than a standard pagesize
139  * to avoid a possible collision with a real address.
140  */
141 #define	SPNEGO_MAGIC_ID  0x00000fed
142 
143 /* SPNEGO oid declarations */
144 extern const gss_OID_desc * const gss_mech_spnego;
145 extern const gss_OID_set_desc * const gss_mech_set_spnego;
146 
147 #if defined(DEBUG) && defined(HAVE_SYSLOG_H)
148 #include <syslog.h>
149 #define	dsyslog(a) syslog(LOG_DEBUG, a)
150 #else
151 #define	dsyslog(a)
152 #define	SPNEGO_STATIC
153 #endif	/* DEBUG */
154 
155 /*
156  * declarations of internal name mechanism functions
157  */
158 
159 OM_uint32 KRB5_CALLCONV spnego_gss_acquire_cred
160 (
161 	OM_uint32 *,		/* minor_status */
162 	gss_name_t,		/* desired_name */
163 	OM_uint32,		/* time_req */
164 	gss_OID_set,		/* desired_mechs */
165 	gss_cred_usage_t,	/* cred_usage */
166 	gss_cred_id_t *,	/* output_cred_handle */
167 	gss_OID_set *,		/* actual_mechs */
168 	OM_uint32 *		/* time_rec */
169 );
170 
171 OM_uint32 KRB5_CALLCONV spnego_gss_release_cred
172 (
173 	OM_uint32 *,		/* minor_status */
174 	/* CSTYLED */
175 	gss_cred_id_t	*	/* cred_handle */
176 );
177 
178 OM_uint32 KRB5_CALLCONV spnego_gss_init_sec_context
179 (
180 	OM_uint32 *,		/* minor_status */
181 	gss_cred_id_t,		/* claimant_cred_handle */
182 	gss_ctx_id_t *,		/* context_handle */
183 	gss_name_t,		/* target_name */
184 	gss_OID,		/* mech_type */
185 	OM_uint32,		/* req_flags */
186 	OM_uint32,		/* time_req */
187 	gss_channel_bindings_t, /* input_chan_bindings */
188 	gss_buffer_t,		/* input_token */
189 	gss_OID *,		/* actual_mech_type */
190 	gss_buffer_t,		/* output_token */
191 	OM_uint32 *,		/* ret_flags */
192 	OM_uint32 *		/* time_rec */
193 );
194 
195 #ifndef LEAN_CLIENT
196 OM_uint32 KRB5_CALLCONV spnego_gss_accept_sec_context
197 (
198 	OM_uint32 *,		/* minor_status */
199 	gss_ctx_id_t *,		/* context_handle */
200 	gss_cred_id_t,		/* verifier_cred_handle */
201 	gss_buffer_t,		/* input_token_buffer */
202 	gss_channel_bindings_t, /* input_chan_bindings */
203 	gss_name_t *,		/* src_name */
204 	gss_OID *,		/* mech_type */
205 	gss_buffer_t,		/* output_token */
206 	OM_uint32 *,		/* ret_flags */
207 	OM_uint32 *,		/* time_rec */
208 	/* CSTYLED */
209 	gss_cred_id_t *		/* delegated_cred_handle */
210 );
211 #endif /* LEAN_CLIENT */
212 
213 OM_uint32 KRB5_CALLCONV spnego_gss_compare_name
214 (
215 	OM_uint32 *,		/* minor_status */
216 	const gss_name_t,	/* name1 */
217 	const gss_name_t,	/* name2 */
218 	int *			/* name_equal */
219 );
220 
221 OM_uint32 KRB5_CALLCONV spnego_gss_display_name
222 (
223 	OM_uint32 *,		/* minor_status */
224 	gss_name_t,		/*  input_name */
225 	gss_buffer_t,		/*  output_name_buffer */
226 	gss_OID *		/* output_name_type */
227 );
228 
229 OM_uint32 KRB5_CALLCONV spnego_gss_display_status
230 (
231 	OM_uint32 *,		/* minor_status */
232 	OM_uint32,		/* status_value */
233 	int,			/* status_type */
234 	gss_OID,		/* mech_type */
235 	OM_uint32 *,		/* message_context */
236 	gss_buffer_t		/* status_string */
237 );
238 
239 OM_uint32 KRB5_CALLCONV spnego_gss_import_name
240 (
241 	OM_uint32 *,		/* minor_status */
242 	gss_buffer_t,		/* input_name_buffer */
243 	gss_OID,		/* input_name_type */
244 	/* CSTYLED */
245 	gss_name_t *		/* output_name */
246 );
247 
248 OM_uint32 KRB5_CALLCONV spnego_gss_release_name
249 (
250 	OM_uint32 *,		/* minor_status */
251 	/* CSTYLED */
252 	gss_name_t *		/* input_name */
253 );
254 
255 OM_uint32 KRB5_CALLCONV spnego_gss_duplicate_name
256 (
257 	OM_uint32 *,		/* minor_status */
258 	/* CSTYLED */
259 	const gss_name_t, 	/* input_name */
260 	gss_name_t *		/* output_name */
261 );
262 
263 OM_uint32 KRB5_CALLCONV spnego_gss_inquire_cred
264 (
265 	OM_uint32 *,		/* minor_status */
266 	gss_cred_id_t,		/* cred_handle */
267 	gss_name_t *,		/* name */
268 	OM_uint32 *,		/* lifetime */
269 	int *,			/* cred_usage */
270 	gss_OID_set *		/* mechanisms */
271 );
272 
273 OM_uint32 KRB5_CALLCONV spnego_gss_inquire_names_for_mech
274 (
275 	OM_uint32 *,		/* minor_status */
276 	gss_OID,		/* mechanism */
277 	gss_OID_set *		/* name_types */
278 );
279 
280 OM_uint32 KRB5_CALLCONV spnego_gss_unwrap
281 (
282 	OM_uint32 *minor_status,
283 	gss_ctx_id_t context_handle,
284 	gss_buffer_t input_message_buffer,
285 	gss_buffer_t output_message_buffer,
286 	int *conf_state,
287 	gss_qop_t *qop_state
288 );
289 
290 OM_uint32 KRB5_CALLCONV spnego_gss_wrap
291 (
292 	OM_uint32 *minor_status,
293 	gss_ctx_id_t context_handle,
294 	int conf_req_flag,
295 	gss_qop_t qop_req,
296 	gss_buffer_t input_message_buffer,
297 	int *conf_state,
298 	gss_buffer_t output_message_buffer
299 );
300 
301 OM_uint32 KRB5_CALLCONV spnego_gss_process_context_token
302 (
303 	OM_uint32	*minor_status,
304 	const gss_ctx_id_t context_handle,
305 	const gss_buffer_t token_buffer
306 );
307 
308 OM_uint32 KRB5_CALLCONV spnego_gss_delete_sec_context
309 (
310 	OM_uint32 *minor_status,
311 	gss_ctx_id_t *context_handle,
312 	gss_buffer_t output_token
313 );
314 
315 OM_uint32 KRB5_CALLCONV spnego_gss_context_time
316 (
317 	OM_uint32	*minor_status,
318 	const gss_ctx_id_t context_handle,
319 	OM_uint32	*time_rec
320 );
321 #ifndef LEAN_CLIENT
322 OM_uint32 KRB5_CALLCONV spnego_gss_export_sec_context
323 (
324 	OM_uint32	*minor_status,
325 	gss_ctx_id_t	*context_handle,
326 	gss_buffer_t	interprocess_token
327 );
328 
329 OM_uint32 KRB5_CALLCONV spnego_gss_import_sec_context
330 (
331 	OM_uint32		*minor_status,
332 	const gss_buffer_t	interprocess_token,
333 	gss_ctx_id_t		*context_handle
334 );
335 #endif /* LEAN_CLIENT */
336 
337 OM_uint32 KRB5_CALLCONV spnego_gss_inquire_context
338 (
339 	OM_uint32	*minor_status,
340 	const gss_ctx_id_t context_handle,
341 	gss_name_t	*src_name,
342 	gss_name_t	*targ_name,
343 	OM_uint32	*lifetime_rec,
344 	gss_OID		*mech_type,
345 	OM_uint32	*ctx_flags,
346 	int		*locally_initiated,
347 	int		*opened
348 );
349 
350 OM_uint32 KRB5_CALLCONV spnego_gss_wrap_size_limit
351 (
352 	OM_uint32	*minor_status,
353 	const gss_ctx_id_t context_handle,
354 	int		conf_req_flag,
355 	gss_qop_t	qop_req,
356 	OM_uint32	req_output_size,
357 	OM_uint32	*max_input_size
358 );
359 
360 OM_uint32 KRB5_CALLCONV spnego_gss_localname
361 (
362 	OM_uint32 *minor_status,
363 	const gss_name_t pname,
364 	const gss_const_OID mech_type,
365 	gss_buffer_t localname
366 );
367 
368 OM_uint32 KRB5_CALLCONV spnego_gss_get_mic
369 (
370 	OM_uint32 *minor_status,
371 	const gss_ctx_id_t context_handle,
372 	gss_qop_t qop_req,
373 	const gss_buffer_t message_buffer,
374 	gss_buffer_t message_token
375 );
376 
377 OM_uint32 KRB5_CALLCONV spnego_gss_verify_mic
378 (
379 	OM_uint32 *minor_status,
380 	const gss_ctx_id_t context_handle,
381 	const gss_buffer_t msg_buffer,
382 	const gss_buffer_t token_buffer,
383 	gss_qop_t *qop_state
384 );
385 
386 OM_uint32 KRB5_CALLCONV
387 spnego_gss_inquire_sec_context_by_oid
388 (
389 	OM_uint32 *minor_status,
390 	const gss_ctx_id_t context_handle,
391 	const gss_OID desired_object,
392 	gss_buffer_set_t *data_set
393 );
394 
395 OM_uint32 KRB5_CALLCONV
396 spnego_gss_inquire_cred_by_oid
397 (
398 	OM_uint32 *minor_status,
399 	const gss_cred_id_t cred_handle,
400 	const gss_OID desired_object,
401 	gss_buffer_set_t *data_set
402 );
403 
404 OM_uint32 KRB5_CALLCONV
405 spnego_gss_set_cred_option
406 (
407 	OM_uint32 *minor_status,
408 	gss_cred_id_t *cred_handle,
409 	const gss_OID desired_object,
410 	const gss_buffer_t value
411 );
412 
413 OM_uint32 KRB5_CALLCONV
414 spnego_gss_set_sec_context_option
415 (
416 	OM_uint32 *minor_status,
417 	gss_ctx_id_t *context_handle,
418 	const gss_OID desired_object,
419 	const gss_buffer_t value
420 );
421 
422 #ifdef _GSS_STATIC_LINK
423 int gss_spnegoint_lib_init(void);
424 void gss_spnegoint_lib_fini(void);
425 #else
426 gss_mechanism KRB5_CALLCONV gss_mech_initialize(void);
427 #endif /* _GSS_STATIC_LINK */
428 
429 OM_uint32 KRB5_CALLCONV spnego_gss_wrap_aead
430 (
431 	OM_uint32 *minor_status,
432 	gss_ctx_id_t context_handle,
433 	int conf_req_flag,
434 	gss_qop_t qop_req,
435 	gss_buffer_t input_assoc_buffer,
436 	gss_buffer_t input_payload_buffer,
437 	int *conf_state,
438 	gss_buffer_t output_message_buffer
439 );
440 
441 OM_uint32 KRB5_CALLCONV spnego_gss_unwrap_aead
442 (
443 	OM_uint32 *minor_status,
444 	gss_ctx_id_t context_handle,
445 	gss_buffer_t input_message_buffer,
446 	gss_buffer_t input_assoc_buffer,
447 	gss_buffer_t output_payload_buffer,
448 	int *conf_state,
449 	gss_qop_t *qop_state
450 );
451 
452 OM_uint32 KRB5_CALLCONV spnego_gss_wrap_iov
453 (
454 	OM_uint32 *minor_status,
455 	gss_ctx_id_t context_handle,
456 	int conf_req_flag,
457 	gss_qop_t qop_req,
458 	int *conf_state,
459 	gss_iov_buffer_desc *iov,
460 	int iov_count
461 );
462 
463 OM_uint32 KRB5_CALLCONV spnego_gss_unwrap_iov
464 (
465 	OM_uint32 *minor_status,
466 	gss_ctx_id_t context_handle,
467 	int *conf_state,
468 	gss_qop_t *qop_state,
469 	gss_iov_buffer_desc *iov,
470 	int iov_count
471 );
472 
473 OM_uint32 KRB5_CALLCONV spnego_gss_wrap_iov_length
474 (
475 	OM_uint32 *minor_status,
476 	gss_ctx_id_t context_handle,
477 	int conf_req_flag,
478 	gss_qop_t qop_req,
479 	int *conf_state,
480 	gss_iov_buffer_desc *iov,
481 	int iov_count
482 );
483 
484 OM_uint32 KRB5_CALLCONV
485 spnego_gss_complete_auth_token
486 (
487 	OM_uint32 *minor_status,
488 	const gss_ctx_id_t context_handle,
489 	gss_buffer_t input_message_buffer
490 );
491 
492 OM_uint32 KRB5_CALLCONV
493 spnego_gss_acquire_cred_impersonate_name(
494     OM_uint32 *,	    /* minor_status */
495     const gss_cred_id_t,    /* impersonator_cred_handle */
496     const gss_name_t,	    /* desired_name */
497     OM_uint32,		    /* time_req */
498     const gss_OID_set,	    /* desired_mechs */
499     gss_cred_usage_t,	    /* cred_usage */
500     gss_cred_id_t *,	    /* output_cred_handle */
501     gss_OID_set *,	    /* actual_mechs */
502     OM_uint32 *);	    /* time_rec */
503 
504 OM_uint32 KRB5_CALLCONV
505 spnego_gss_acquire_cred_with_password(
506     OM_uint32 *minor_status,
507     const gss_name_t desired_name,
508     const gss_buffer_t password,
509     OM_uint32 time_req,
510     const gss_OID_set desired_mechs,
511     gss_cred_usage_t cred_usage,
512     gss_cred_id_t *output_cred_handle,
513     gss_OID_set *actual_mechs,
514     OM_uint32 *time_rec);
515 
516 OM_uint32 KRB5_CALLCONV
517 spnego_gss_display_name_ext
518 (
519 	OM_uint32 *minor_status,
520 	gss_name_t name,
521 	gss_OID display_as_name_type,
522 	gss_buffer_t display_name
523 );
524 
525 OM_uint32 KRB5_CALLCONV
526 spnego_gss_inquire_name
527 (
528 	OM_uint32 *minor_status,
529 	gss_name_t name,
530 	int *name_is_MN,
531 	gss_OID *MN_mech,
532 	gss_buffer_set_t *attrs
533 );
534 
535 OM_uint32 KRB5_CALLCONV
536 spnego_gss_get_name_attribute
537 (
538 	OM_uint32 *minor_status,
539 	gss_name_t name,
540 	gss_buffer_t attr,
541 	int *authenticated,
542 	int *complete,
543 	gss_buffer_t value,
544 	gss_buffer_t display_value,
545 	int *more
546 );
547 
548 OM_uint32 KRB5_CALLCONV
549 spnego_gss_set_name_attribute
550 (
551 	OM_uint32 *minor_status,
552 	gss_name_t name,
553 	int complete,
554 	gss_buffer_t attr,
555 	gss_buffer_t value
556 );
557 
558 OM_uint32 KRB5_CALLCONV
559 spnego_gss_delete_name_attribute
560 (
561 	OM_uint32 *minor_status,
562 	gss_name_t name,
563 	gss_buffer_t attr
564 );
565 
566 OM_uint32 KRB5_CALLCONV
567 spnego_gss_export_name_composite
568 (
569 	OM_uint32 *minor_status,
570 	gss_name_t name,
571 	gss_buffer_t exp_composite_name
572 );
573 
574 OM_uint32 KRB5_CALLCONV
575 spnego_gss_map_name_to_any
576 (
577 	OM_uint32 *minor_status,
578 	gss_name_t name,
579 	int authenticated,
580 	gss_buffer_t type_id,
581 	gss_any_t *output
582 );
583 
584 OM_uint32 KRB5_CALLCONV
585 spnego_gss_release_any_name_mapping
586 (
587 	OM_uint32 *minor_status,
588 	gss_name_t name,
589 	gss_buffer_t type_id,
590 	gss_any_t *input
591 );
592 
593 OM_uint32 KRB5_CALLCONV
594 spnego_gss_pseudo_random
595 (
596 	OM_uint32 *minor_status,
597 	gss_ctx_id_t context,
598 	int prf_key,
599 	const gss_buffer_t prf_in,
600 	ssize_t desired_output_len,
601 	gss_buffer_t prf_out
602 );
603 
604 OM_uint32 KRB5_CALLCONV
605 spnego_gss_set_neg_mechs
606 (
607 	OM_uint32 *minor_status,
608 	gss_cred_id_t cred_handle,
609 	const gss_OID_set mech_list
610 );
611 
612 OM_uint32 KRB5_CALLCONV
613 spnego_gss_inquire_mech_for_saslname
614 (
615 	OM_uint32 *minor_status,
616 	const gss_buffer_t sasl_mech_name,
617 	gss_OID *mech_type
618 );
619 
620 OM_uint32 KRB5_CALLCONV
621 spnego_gss_inquire_saslname_for_mech
622 (
623 	OM_uint32 *minor_status,
624 	const gss_OID desired_mech,
625 	gss_buffer_t sasl_mech_name,
626 	gss_buffer_t mech_name,
627 	gss_buffer_t mech_description
628 );
629 
630 OM_uint32 KRB5_CALLCONV
631 spnego_gss_inquire_attrs_for_mech
632 (
633 	OM_uint32 *minor_status,
634 	gss_const_OID mech,
635 	gss_OID_set *mech_attrs,
636 	gss_OID_set *known_mech_attrs
637 );
638 
639 OM_uint32 KRB5_CALLCONV
640 spnego_gss_acquire_cred_from
641 (
642 	OM_uint32 *minor_status,
643 	const gss_name_t desired_name,
644 	OM_uint32 time_req,
645 	const gss_OID_set desired_mechs,
646 	gss_cred_usage_t cred_usage,
647 	gss_const_key_value_set_t cred_store,
648 	gss_cred_id_t *output_cred_handle,
649 	gss_OID_set *actual_mechs,
650 	OM_uint32 *time_rec
651 );
652 
653 OM_uint32 KRB5_CALLCONV
654 spnego_gss_export_cred(
655 	OM_uint32 *minor_status,
656 	gss_cred_id_t cred_handle,
657 	gss_buffer_t token
658 );
659 
660 OM_uint32 KRB5_CALLCONV
661 spnego_gss_import_cred(
662 	OM_uint32 *minor_status,
663 	gss_buffer_t token,
664 	gss_cred_id_t *cred_handle
665 );
666 
667 OM_uint32 KRB5_CALLCONV
668 spnego_gss_get_mic_iov(
669 	OM_uint32 *minor_status,
670 	gss_ctx_id_t context_handle,
671 	gss_qop_t qop_req,
672 	gss_iov_buffer_desc *iov,
673 	int iov_count
674 );
675 
676 OM_uint32 KRB5_CALLCONV
677 spnego_gss_verify_mic_iov(
678 	OM_uint32 *minor_status,
679 	gss_ctx_id_t context_handle,
680 	gss_qop_t *qop_state,
681 	gss_iov_buffer_desc *iov,
682 	int iov_count
683 );
684 
685 OM_uint32 KRB5_CALLCONV
686 spnego_gss_get_mic_iov_length(
687 	OM_uint32 *minor_status,
688 	gss_ctx_id_t context_handle,
689 	gss_qop_t qop_req,
690 	gss_iov_buffer_desc *iov,
691 	int iov_count
692 );
693 
694 #ifdef	__cplusplus
695 }
696 #endif
697 
698 #endif /* _GSSAPIP_SPNEGO_H_ */
699