xref: /illumos-gate/usr/src/uts/common/gssapi/mechs/krb5/include/k5-int.h (revision ba7b222e36bac28710a7f43739283302b617e7f5)
17c478bd9Sstevel@tonic-gate /*
2*ba7b222eSGlenn Barry  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
37c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
47c478bd9Sstevel@tonic-gate  */
57c478bd9Sstevel@tonic-gate 
67c478bd9Sstevel@tonic-gate /*
7fe598cdcSmp  * Copyright (C) 1989,1990,1991,1992,1993,1994,1995,2000,2001, 2003,2006 by the Massachusetts Institute of Technology,
87c478bd9Sstevel@tonic-gate  * Cambridge, MA, USA.  All Rights Reserved.
9159d09a2SMark Phalan  *
10159d09a2SMark Phalan  * This software is being provided to you, the LICENSEE, by the
11159d09a2SMark Phalan  * Massachusetts Institute of Technology (M.I.T.) under the following
12159d09a2SMark Phalan  * license.  By obtaining, using and/or copying this software, you agree
13159d09a2SMark Phalan  * that you have read, understood, and will comply with these terms and
14159d09a2SMark Phalan  * conditions:
15159d09a2SMark Phalan  *
167c478bd9Sstevel@tonic-gate  * Export of this software from the United States of America may
177c478bd9Sstevel@tonic-gate  * require a specific license from the United States Government.
187c478bd9Sstevel@tonic-gate  * It is the responsibility of any person or organization contemplating
197c478bd9Sstevel@tonic-gate  * export to obtain such a license before exporting.
20159d09a2SMark Phalan  *
21159d09a2SMark Phalan  * WITHIN THAT CONSTRAINT, permission to use, copy, modify and distribute
22159d09a2SMark Phalan  * this software and its documentation for any purpose and without fee or
23159d09a2SMark Phalan  * royalty is hereby granted, provided that you agree to comply with the
24159d09a2SMark Phalan  * following copyright notice and statements, including the disclaimer, and
25159d09a2SMark Phalan  * that the same appear on ALL copies of the software and documentation,
26159d09a2SMark Phalan  * including modifications that you make for internal use or for
277c478bd9Sstevel@tonic-gate  * distribution:
28159d09a2SMark Phalan  *
29159d09a2SMark Phalan  * THIS SOFTWARE IS PROVIDED "AS IS", AND M.I.T. MAKES NO REPRESENTATIONS
30159d09a2SMark Phalan  * OR WARRANTIES, EXPRESS OR IMPLIED.  By way of example, but not
31159d09a2SMark Phalan  * limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF
32159d09a2SMark Phalan  * MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF
33159d09a2SMark Phalan  * THE LICENSED SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
34159d09a2SMark Phalan  * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
35159d09a2SMark Phalan  *
36159d09a2SMark Phalan  * The name of the Massachusetts Institute of Technology or M.I.T. may NOT
37159d09a2SMark Phalan  * be used in advertising or publicity pertaining to distribution of the
38159d09a2SMark Phalan  * software.  Title to copyright in this software and any associated
39159d09a2SMark Phalan  * documentation shall at all times remain with M.I.T., and USER agrees to
407c478bd9Sstevel@tonic-gate  * preserve same.
41fe598cdcSmp  *
42fe598cdcSmp  * Furthermore if you modify this software you must label
43fe598cdcSmp  * your software as modified software and not distribute it in such a
44fe598cdcSmp  * fashion that it might be confused with the original M.I.T. software.
45ab9b2e15Sgtb  */
46159d09a2SMark Phalan 
477c478bd9Sstevel@tonic-gate /*
487c478bd9Sstevel@tonic-gate  * Copyright (C) 1998 by the FundsXpress, INC.
49159d09a2SMark Phalan  *
507c478bd9Sstevel@tonic-gate  * All rights reserved.
51159d09a2SMark Phalan  *
527c478bd9Sstevel@tonic-gate  * Export of this software from the United States of America may require
537c478bd9Sstevel@tonic-gate  * a specific license from the United States Government.  It is the
547c478bd9Sstevel@tonic-gate  * responsibility of any person or organization contemplating export to
557c478bd9Sstevel@tonic-gate  * obtain such a license before exporting.
56159d09a2SMark Phalan  *
577c478bd9Sstevel@tonic-gate  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
587c478bd9Sstevel@tonic-gate  * distribute this software and its documentation for any purpose and
597c478bd9Sstevel@tonic-gate  * without fee is hereby granted, provided that the above copyright
607c478bd9Sstevel@tonic-gate  * notice appear in all copies and that both that copyright notice and
617c478bd9Sstevel@tonic-gate  * this permission notice appear in supporting documentation, and that
627c478bd9Sstevel@tonic-gate  * the name of FundsXpress. not be used in advertising or publicity pertaining
637c478bd9Sstevel@tonic-gate  * to distribution of the software without specific, written prior
647c478bd9Sstevel@tonic-gate  * permission.  FundsXpress makes no representations about the suitability of
657c478bd9Sstevel@tonic-gate  * this software for any purpose.  It is provided "as is" without express
667c478bd9Sstevel@tonic-gate  * or implied warranty.
67159d09a2SMark Phalan  *
687c478bd9Sstevel@tonic-gate  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
697c478bd9Sstevel@tonic-gate  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
707c478bd9Sstevel@tonic-gate  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
717c478bd9Sstevel@tonic-gate  */
727c478bd9Sstevel@tonic-gate 
737c478bd9Sstevel@tonic-gate /*
747c478bd9Sstevel@tonic-gate  * This prototype for k5-int.h (Krb5 internals include file)
757c478bd9Sstevel@tonic-gate  * includes the user-visible definitions from krb5.h and then
767c478bd9Sstevel@tonic-gate  * includes other definitions that are not user-visible but are
777c478bd9Sstevel@tonic-gate  * required for compiling Kerberos internal routines.
787c478bd9Sstevel@tonic-gate  *
797c478bd9Sstevel@tonic-gate  * John Gilmore, Cygnus Support, Sat Jan 21 22:45:52 PST 1995
807c478bd9Sstevel@tonic-gate  */
817c478bd9Sstevel@tonic-gate 
827c478bd9Sstevel@tonic-gate #ifndef _KRB5_INT_H
837c478bd9Sstevel@tonic-gate #define _KRB5_INT_H
847c478bd9Sstevel@tonic-gate 
85159d09a2SMark Phalan #ifdef KRB5_GENERAL__
86159d09a2SMark Phalan #error krb5.h included before k5-int.h
87159d09a2SMark Phalan #endif /* KRB5_GENERAL__ */
887c478bd9Sstevel@tonic-gate 
897c478bd9Sstevel@tonic-gate #ifndef	_KERNEL
907c478bd9Sstevel@tonic-gate #include <osconf.h>
917c478bd9Sstevel@tonic-gate #include <security/cryptoki.h>
927c478bd9Sstevel@tonic-gate #else
937c478bd9Sstevel@tonic-gate #include <sys/crypto/common.h>
947c478bd9Sstevel@tonic-gate #include <sys/crypto/api.h>
957c478bd9Sstevel@tonic-gate #endif
967c478bd9Sstevel@tonic-gate 
977c478bd9Sstevel@tonic-gate #ifdef  DEBUG
987c478bd9Sstevel@tonic-gate #if !defined(KRB5_DEBUG)
997c478bd9Sstevel@tonic-gate #define KRB5_DEBUG
1007c478bd9Sstevel@tonic-gate #endif
1017c478bd9Sstevel@tonic-gate #ifndef  KRB5_LOG_LVL
1027c478bd9Sstevel@tonic-gate #define KRB5_LOG_LVL KRB5_ERR
1037c478bd9Sstevel@tonic-gate #endif
1047c478bd9Sstevel@tonic-gate #endif  /* DEBUG */
1057c478bd9Sstevel@tonic-gate 
1067c478bd9Sstevel@tonic-gate #ifdef  _KERNEL
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate #ifdef  DEBUG
1097c478bd9Sstevel@tonic-gate #include        <sys/types.h>
1107c478bd9Sstevel@tonic-gate #include        <sys/cmn_err.h>
1117c478bd9Sstevel@tonic-gate  extern  void prom_printf();
1127c478bd9Sstevel@tonic-gate #endif  /* DEBUG */
1137c478bd9Sstevel@tonic-gate 
1147c478bd9Sstevel@tonic-gate #else   /* !_KERNEL */
1157c478bd9Sstevel@tonic-gate 
1167c478bd9Sstevel@tonic-gate #define prom_printf printf
1177c478bd9Sstevel@tonic-gate 
1187c478bd9Sstevel@tonic-gate #endif /* !_KERNEL */
1197c478bd9Sstevel@tonic-gate 
1207c478bd9Sstevel@tonic-gate #ifdef KRB5_LOG_LVL
1217c478bd9Sstevel@tonic-gate 
1227c478bd9Sstevel@tonic-gate /* krb5_log is used to set the logging level to determine what class of messages
1237c478bd9Sstevel@tonic-gate  * are output by the mech.  Note, more than one logging level can be used by
1247c478bd9Sstevel@tonic-gate  * bit or'ing the log values together.
1257c478bd9Sstevel@tonic-gate  *
1267c478bd9Sstevel@tonic-gate  * All log messages are captured by syslog.
1277c478bd9Sstevel@tonic-gate  */
1287c478bd9Sstevel@tonic-gate 
1297c478bd9Sstevel@tonic-gate extern unsigned int krb5_log;
1307c478bd9Sstevel@tonic-gate 
1317c478bd9Sstevel@tonic-gate /* Note, these defines should be mutually exclusive bit fields */
1327c478bd9Sstevel@tonic-gate #define KRB5_ERR  1   /* Use this debug log level for error path logging. */
1337c478bd9Sstevel@tonic-gate #define KRB5_INFO 2   /* Use this debug log level for informational messages. */
1347c478bd9Sstevel@tonic-gate 
1357c478bd9Sstevel@tonic-gate #ifdef  _KERNEL
1367c478bd9Sstevel@tonic-gate 
1377c478bd9Sstevel@tonic-gate #define KRB5_LOG1(A, B, C, D) \
1387c478bd9Sstevel@tonic-gate      ((void)((krb5_log) && (krb5_log & (A)) && (printf((B), (C), (D)), TRUE)))
1397c478bd9Sstevel@tonic-gate #define KRB5_LOG(A, B, C) \
1407c478bd9Sstevel@tonic-gate      ((void)((krb5_log) && (krb5_log & (A)) && (printf((B), (C)), TRUE)))
1417c478bd9Sstevel@tonic-gate #define KRB5_LOG0(A, B)   \
1427c478bd9Sstevel@tonic-gate      ((void)((krb5_log) && (krb5_log & (A)) && (printf((B)), TRUE)))
1437c478bd9Sstevel@tonic-gate 
1447c478bd9Sstevel@tonic-gate #else	/* !_KERNEL */
1457c478bd9Sstevel@tonic-gate 
1467c478bd9Sstevel@tonic-gate #include <syslog.h>
1477c478bd9Sstevel@tonic-gate 
1487c478bd9Sstevel@tonic-gate #define KRB5_LOG1(A, B, C, D) \
1497c478bd9Sstevel@tonic-gate         ((void)((krb5_log) && (krb5_log & (A)) && \
1507c478bd9Sstevel@tonic-gate 		(syslog(LOG_DEBUG, (B), (C), (D)), TRUE)))
1517c478bd9Sstevel@tonic-gate #define KRB5_LOG(A, B, C) \
1527c478bd9Sstevel@tonic-gate         ((void)((krb5_log) && (krb5_log & (A)) && \
1537c478bd9Sstevel@tonic-gate 		(syslog(LOG_DEBUG, (B), (C)), TRUE)))
1547c478bd9Sstevel@tonic-gate #define KRB5_LOG0(A, B)   \
1557c478bd9Sstevel@tonic-gate         ((void)((krb5_log) && (krb5_log & (A)) && \
1567c478bd9Sstevel@tonic-gate 	       	(syslog(LOG_DEBUG, B), TRUE)))
1577c478bd9Sstevel@tonic-gate 
1587c478bd9Sstevel@tonic-gate #endif	/* _KERNEL */
1597c478bd9Sstevel@tonic-gate 
1607c478bd9Sstevel@tonic-gate #else /* ! KRB5_LOG_LVL */
1617c478bd9Sstevel@tonic-gate 
1627c478bd9Sstevel@tonic-gate #define KRB5_LOG1(A, B, C, D)
1637c478bd9Sstevel@tonic-gate #define KRB5_LOG(A, B, C)
1647c478bd9Sstevel@tonic-gate #define KRB5_LOG0(A, B)
1657c478bd9Sstevel@tonic-gate 
1667c478bd9Sstevel@tonic-gate #endif /* KRB5_LOG_LVL */
1677c478bd9Sstevel@tonic-gate 
1687c478bd9Sstevel@tonic-gate #ifdef POSIX_TYPES
1697c478bd9Sstevel@tonic-gate #define timetype time_t
1707c478bd9Sstevel@tonic-gate #else
1717c478bd9Sstevel@tonic-gate #define timetype long
1727c478bd9Sstevel@tonic-gate #endif
1737c478bd9Sstevel@tonic-gate 
1747c478bd9Sstevel@tonic-gate /*
1757c478bd9Sstevel@tonic-gate  * Begin "k5-config.h"
1767c478bd9Sstevel@tonic-gate  */
1777c478bd9Sstevel@tonic-gate #ifndef KRB5_CONFIG__
1787c478bd9Sstevel@tonic-gate #define KRB5_CONFIG__
1797c478bd9Sstevel@tonic-gate 
180159d09a2SMark Phalan /*
181159d09a2SMark Phalan  * Machine-type definitions: PC Clone 386 running Microloss Windows
1827c478bd9Sstevel@tonic-gate  */
1837c478bd9Sstevel@tonic-gate 
184159d09a2SMark Phalan #if defined(_MSDOS) || defined(_WIN32)
1857c478bd9Sstevel@tonic-gate #include "win-mac.h"
1867c478bd9Sstevel@tonic-gate 
1877c478bd9Sstevel@tonic-gate /* Kerberos Windows initialization file */
188159d09a2SMark Phalan #define KERBEROS_INI	"kerberos.ini"
189159d09a2SMark Phalan #define INI_FILES	"Files"
190159d09a2SMark Phalan #define INI_KRB_CCACHE	"krb5cc"	/* Location of the ccache */
191159d09a2SMark Phalan #define INI_KRB5_CONF	"krb5.ini"	/* Location of krb5.conf file */
1927c478bd9Sstevel@tonic-gate #define ANSI_STDIO
1937c478bd9Sstevel@tonic-gate #endif
1947c478bd9Sstevel@tonic-gate 
1957c478bd9Sstevel@tonic-gate #ifndef _KERNEL
1967c478bd9Sstevel@tonic-gate #ifndef KRB5_AUTOCONF__
1977c478bd9Sstevel@tonic-gate #define KRB5_AUTOCONF__
198159d09a2SMark Phalan #include "autoconf.h"
1997c478bd9Sstevel@tonic-gate #endif
2007c478bd9Sstevel@tonic-gate #endif 		/* !_KERNEL  */
2017c478bd9Sstevel@tonic-gate 
2027c478bd9Sstevel@tonic-gate #ifndef KRB5_SYSTYPES__
2037c478bd9Sstevel@tonic-gate #define KRB5_SYSTYPES__
2047c478bd9Sstevel@tonic-gate 
205159d09a2SMark Phalan #ifndef _KERNEL
2067c478bd9Sstevel@tonic-gate #ifdef HAVE_SYS_TYPES_H		/* From autoconf.h */
2077c478bd9Sstevel@tonic-gate #include <sys/types.h>
2087c478bd9Sstevel@tonic-gate #else /* HAVE_SYS_TYPES_H */
209159d09a2SMark Phalan typedef unsigned long 	u_long;
210159d09a2SMark Phalan typedef unsigned int	u_int;
211159d09a2SMark Phalan typedef unsigned short	u_short;
212159d09a2SMark Phalan typedef unsigned char	u_char;
2137c478bd9Sstevel@tonic-gate #endif /* HAVE_SYS_TYPES_H */
2147c478bd9Sstevel@tonic-gate #endif /* KRB5_SYSTYPES__ */
215159d09a2SMark Phalan #endif 		/* !_KERNEL  */
216159d09a2SMark Phalan 
2177c478bd9Sstevel@tonic-gate 
218505d05c7Sgtb /* #include "k5-platform.h" SUNW XXX */
219505d05c7Sgtb /* not used in krb5.h (yet) */
2207c478bd9Sstevel@tonic-gate typedef uint64_t krb5_ui_8;
2217c478bd9Sstevel@tonic-gate typedef int64_t krb5_int64;
2227c478bd9Sstevel@tonic-gate 
223159d09a2SMark Phalan 
224159d09a2SMark Phalan 
2257c478bd9Sstevel@tonic-gate #define DEFAULT_PWD_STRING1 "Enter password:"
2267c478bd9Sstevel@tonic-gate #define DEFAULT_PWD_STRING2 "Re-enter password for verification:"
2277c478bd9Sstevel@tonic-gate #define	KRB5_KDB_MAX_LIFE	(60*60*24) /* one day */
2287c478bd9Sstevel@tonic-gate #define	KRB5_KDB_MAX_RLIFE	(60*60*24*365) /* one year */
2297c478bd9Sstevel@tonic-gate #define	KRB5_KDB_EXPIRATION	2145830400 /* Thu Jan  1 00:00:00 2038 UTC */
2307c478bd9Sstevel@tonic-gate #define KRB5_DEFAULT_LIFE 60*60*10 /* 10 hours */
2317c478bd9Sstevel@tonic-gate #define KRB5_DEFAULT_RENEW_LIFE 7*24*60*60 /* 7 Days */
2327c478bd9Sstevel@tonic-gate 
233159d09a2SMark Phalan /*
2347c478bd9Sstevel@tonic-gate  * Windows requires a different api interface to each function. Here
2357c478bd9Sstevel@tonic-gate  * just define it as NULL.
2367c478bd9Sstevel@tonic-gate  */
2377c478bd9Sstevel@tonic-gate #ifndef KRB5_CALLCONV
2387c478bd9Sstevel@tonic-gate #define KRB5_CALLCONV
2397c478bd9Sstevel@tonic-gate #define KRB5_CALLCONV_C
2407c478bd9Sstevel@tonic-gate #endif
2417c478bd9Sstevel@tonic-gate #ifndef O_BINARY
2427c478bd9Sstevel@tonic-gate #define O_BINARY 0
2437c478bd9Sstevel@tonic-gate #endif
2447c478bd9Sstevel@tonic-gate 
2457c478bd9Sstevel@tonic-gate #endif /* KRB5_CONFIG__ */
2467c478bd9Sstevel@tonic-gate 
2477c478bd9Sstevel@tonic-gate /*
2487c478bd9Sstevel@tonic-gate  * End "k5-config.h"
2497c478bd9Sstevel@tonic-gate  */
2507c478bd9Sstevel@tonic-gate 
2517c478bd9Sstevel@tonic-gate /*
2527c478bd9Sstevel@tonic-gate  * After loading the configuration definitions, load the Kerberos definitions.
2537c478bd9Sstevel@tonic-gate  */
254505d05c7Sgtb #ifndef _KERNEL
255505d05c7Sgtb #include <errno.h>
256505d05c7Sgtb #include "profile.h"
257505d05c7Sgtb #endif
258505d05c7Sgtb 
2597c478bd9Sstevel@tonic-gate #include <krb5.h>
2607c478bd9Sstevel@tonic-gate 
2617c478bd9Sstevel@tonic-gate #ifndef _KERNEL
262505d05c7Sgtb #if 1 /* def NEED_SOCKETS */
2637c478bd9Sstevel@tonic-gate #include <port-sockets.h>
2647c478bd9Sstevel@tonic-gate #include <socket-utils.h>
2657c478bd9Sstevel@tonic-gate #else
2667c478bd9Sstevel@tonic-gate #ifndef SOCK_DGRAM
2677c478bd9Sstevel@tonic-gate struct sockaddr;
2687c478bd9Sstevel@tonic-gate #endif
2697c478bd9Sstevel@tonic-gate #endif
2707c478bd9Sstevel@tonic-gate #endif
2717c478bd9Sstevel@tonic-gate 
272505d05c7Sgtb /* Get mutex support; currently used only for the replay cache.  */
273505d05c7Sgtb #include "k5-thread.h"
274505d05c7Sgtb 
275505d05c7Sgtb 
2767c478bd9Sstevel@tonic-gate /* krb5/krb5.h includes many other .h files in the krb5 subdirectory.
2777c478bd9Sstevel@tonic-gate    The ones that it doesn't include, we include below.  */
2787c478bd9Sstevel@tonic-gate 
2797c478bd9Sstevel@tonic-gate /*
2807c478bd9Sstevel@tonic-gate  * Begin "k5-errors.h"
2817c478bd9Sstevel@tonic-gate  */
2827c478bd9Sstevel@tonic-gate #ifndef KRB5_ERRORS__
2837c478bd9Sstevel@tonic-gate #define KRB5_ERRORS__
2847c478bd9Sstevel@tonic-gate 
2857c478bd9Sstevel@tonic-gate 
2867c478bd9Sstevel@tonic-gate /* Error codes used in KRB_ERROR protocol messages.
2877c478bd9Sstevel@tonic-gate    Return values of library routines are based on a different error table
2887c478bd9Sstevel@tonic-gate    (which allows non-ambiguous error codes between subsystems) */
2897c478bd9Sstevel@tonic-gate 
2907c478bd9Sstevel@tonic-gate /* KDC errors */
2917c478bd9Sstevel@tonic-gate #define	KDC_ERR_NONE			0 /* No error */
2927c478bd9Sstevel@tonic-gate #define	KDC_ERR_NAME_EXP		1 /* Client's entry in DB expired */
2937c478bd9Sstevel@tonic-gate #define	KDC_ERR_SERVICE_EXP		2 /* Server's entry in DB expired */
2947c478bd9Sstevel@tonic-gate #define	KDC_ERR_BAD_PVNO		3 /* Requested pvno not supported */
2957c478bd9Sstevel@tonic-gate #define	KDC_ERR_C_OLD_MAST_KVNO		4 /* C's key encrypted in old master */
2967c478bd9Sstevel@tonic-gate #define	KDC_ERR_S_OLD_MAST_KVNO		5 /* S's key encrypted in old master */
2977c478bd9Sstevel@tonic-gate #define	KDC_ERR_C_PRINCIPAL_UNKNOWN	6 /* Client not found in Kerberos DB */
2987c478bd9Sstevel@tonic-gate #define	KDC_ERR_S_PRINCIPAL_UNKNOWN	7 /* Server not found in Kerberos DB */
2997c478bd9Sstevel@tonic-gate #define	KDC_ERR_PRINCIPAL_NOT_UNIQUE	8 /* Multiple entries in Kerberos DB */
3007c478bd9Sstevel@tonic-gate #define	KDC_ERR_NULL_KEY		9 /* The C or S has a null key */
3017c478bd9Sstevel@tonic-gate #define	KDC_ERR_CANNOT_POSTDATE		10 /* Tkt ineligible for postdating */
3027c478bd9Sstevel@tonic-gate #define	KDC_ERR_NEVER_VALID		11 /* Requested starttime > endtime */
3037c478bd9Sstevel@tonic-gate #define	KDC_ERR_POLICY			12 /* KDC policy rejects request */
3047c478bd9Sstevel@tonic-gate #define	KDC_ERR_BADOPTION		13 /* KDC can't do requested opt. */
3057c478bd9Sstevel@tonic-gate #define	KDC_ERR_ENCTYPE_NOSUPP		14 /* No support for encryption type */
3067c478bd9Sstevel@tonic-gate #define KDC_ERR_SUMTYPE_NOSUPP		15 /* No support for checksum type */
3077c478bd9Sstevel@tonic-gate #define KDC_ERR_PADATA_TYPE_NOSUPP	16 /* No support for padata type */
3087c478bd9Sstevel@tonic-gate #define KDC_ERR_TRTYPE_NOSUPP		17 /* No support for transited type */
3097c478bd9Sstevel@tonic-gate #define KDC_ERR_CLIENT_REVOKED		18 /* C's creds have been revoked */
3107c478bd9Sstevel@tonic-gate #define KDC_ERR_SERVICE_REVOKED		19 /* S's creds have been revoked */
3117c478bd9Sstevel@tonic-gate #define KDC_ERR_TGT_REVOKED		20 /* TGT has been revoked */
3127c478bd9Sstevel@tonic-gate #define KDC_ERR_CLIENT_NOTYET		21 /* C not yet valid */
3137c478bd9Sstevel@tonic-gate #define KDC_ERR_SERVICE_NOTYET		22 /* S not yet valid */
3147c478bd9Sstevel@tonic-gate #define KDC_ERR_KEY_EXP			23 /* Password has expired */
3157c478bd9Sstevel@tonic-gate #define KDC_ERR_PREAUTH_FAILED		24 /* Preauthentication failed */
3167c478bd9Sstevel@tonic-gate #define KDC_ERR_PREAUTH_REQUIRED	25 /* Additional preauthentication */
3177c478bd9Sstevel@tonic-gate 					   /* required */
3187c478bd9Sstevel@tonic-gate #define KDC_ERR_SERVER_NOMATCH		26 /* Requested server and */
3197c478bd9Sstevel@tonic-gate 					   /* ticket don't match*/
320159d09a2SMark Phalan #define KDC_ERR_SVC_UNAVAILABLE		29 /* A service is not
321159d09a2SMark Phalan 					    * available that is
322159d09a2SMark Phalan 					    * required to process the
323159d09a2SMark Phalan 					    * request */
3247c478bd9Sstevel@tonic-gate /* Application errors */
3257c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_BAD_INTEGRITY 31	/* Decrypt integrity check failed */
3267c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_TKT_EXPIRED	32	/* Ticket expired */
3277c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_TKT_NYV	33	/* Ticket not yet valid */
3287c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_REPEAT	34	/* Request is a replay */
3297c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_NOT_US	35	/* The ticket isn't for us */
3307c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_BADMATCH	36	/* Ticket/authenticator don't match */
3317c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_SKEW		37	/* Clock skew too great */
3327c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_BADADDR	38	/* Incorrect net address */
3337c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_BADVERSION	39	/* Protocol version mismatch */
3347c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_MSG_TYPE	40	/* Invalid message type */
3357c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_MODIFIED	41	/* Message stream modified */
3367c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_BADORDER	42	/* Message out of order */
3377c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_BADKEYVER	44	/* Key version is not available */
3387c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_NOKEY	45	/* Service key not available */
3397c478bd9Sstevel@tonic-gate #define	KRB_AP_ERR_MUT_FAIL	46	/* Mutual authentication failed */
3407c478bd9Sstevel@tonic-gate #define KRB_AP_ERR_BADDIRECTION	47 	/* Incorrect message direction */
3417c478bd9Sstevel@tonic-gate #define KRB_AP_ERR_METHOD	48 	/* Alternative authentication */
3427c478bd9Sstevel@tonic-gate 					/* method required */
3437c478bd9Sstevel@tonic-gate #define KRB_AP_ERR_BADSEQ	49 	/* Incorrect sequence numnber */
3447c478bd9Sstevel@tonic-gate 					/* in message */
3457c478bd9Sstevel@tonic-gate #define KRB_AP_ERR_INAPP_CKSUM	50	/* Inappropriate type of */
3467c478bd9Sstevel@tonic-gate 					/* checksum in message */
347159d09a2SMark Phalan #define KRB_AP_PATH_NOT_ACCEPTED 51	/* Policy rejects transited path */
348159d09a2SMark Phalan #define KRB_ERR_RESPONSE_TOO_BIG 52	/* Response too big for UDP, */
349159d09a2SMark Phalan 					/*   retry with TCP */
3507c478bd9Sstevel@tonic-gate 
3517c478bd9Sstevel@tonic-gate /* other errors */
3527c478bd9Sstevel@tonic-gate #define KRB_ERR_GENERIC		60 	/* Generic error (description */
3537c478bd9Sstevel@tonic-gate 					/* in e-text) */
3547c478bd9Sstevel@tonic-gate #define	KRB_ERR_FIELD_TOOLONG	61	/* Field is too long for impl. */
3557c478bd9Sstevel@tonic-gate 
356159d09a2SMark Phalan /* PKINIT server-reported errors */
357159d09a2SMark Phalan #define KDC_ERR_CLIENT_NOT_TRUSTED		62 /* client cert not trusted */
358159d09a2SMark Phalan #define KDC_ERR_INVALID_SIG			64 /* client signature verify failed */
359159d09a2SMark Phalan #define KDC_ERR_DH_KEY_PARAMETERS_NOT_ACCEPTED	65 /* invalid Diffie-Hellman parameters */
360159d09a2SMark Phalan #define KDC_ERR_CANT_VERIFY_CERTIFICATE		70 /* client cert not verifiable to */
361159d09a2SMark Phalan 						   /* trusted root cert */
362159d09a2SMark Phalan #define KDC_ERR_INVALID_CERTIFICATE		71 /* client cert had invalid signature */
363159d09a2SMark Phalan #define KDC_ERR_REVOKED_CERTIFICATE		72 /* client cert was revoked */
364159d09a2SMark Phalan #define KDC_ERR_REVOCATION_STATUS_UNKNOWN	73 /* client cert revoked, reason unknown */
365159d09a2SMark Phalan #define KDC_ERR_CLIENT_NAME_MISMATCH		75 /* mismatch between client cert and */
366159d09a2SMark Phalan 						   /* principal name */
367159d09a2SMark Phalan #define KDC_ERR_INCONSISTENT_KEY_PURPOSE	77 /* bad extended key use */
368159d09a2SMark Phalan #define KDC_ERR_DIGEST_IN_CERT_NOT_ACCEPTED	78 /* bad digest algorithm in client cert */
369159d09a2SMark Phalan #define KDC_ERR_PA_CHECKSUM_MUST_BE_INCLUDED	79 /* missing paChecksum in PA-PK-AS-REQ */
370159d09a2SMark Phalan #define KDC_ERR_DIGEST_IN_SIGNED_DATA_NOT_ACCEPTED 80 /* bad digest algorithm in SignedData */
371159d09a2SMark Phalan #define KDC_ERR_PUBLIC_KEY_ENCRYPTION_NOT_SUPPORTED 81
372159d09a2SMark Phalan 
3737c478bd9Sstevel@tonic-gate #endif /* KRB5_ERRORS__ */
3747c478bd9Sstevel@tonic-gate /*
3757c478bd9Sstevel@tonic-gate  * End "k5-errors.h"
3767c478bd9Sstevel@tonic-gate  */
3777c478bd9Sstevel@tonic-gate 
3787c478bd9Sstevel@tonic-gate /*
3797c478bd9Sstevel@tonic-gate  * This structure is returned in the e-data field of the KRB-ERROR
3807c478bd9Sstevel@tonic-gate  * message when the error calling for an alternative form of
3817c478bd9Sstevel@tonic-gate  * authentication is returned, KRB_AP_METHOD.
3827c478bd9Sstevel@tonic-gate  */
3837c478bd9Sstevel@tonic-gate typedef struct _krb5_alt_method {
3847c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
3857c478bd9Sstevel@tonic-gate 	krb5_int32	method;
3867c478bd9Sstevel@tonic-gate 	unsigned int	length;
3877c478bd9Sstevel@tonic-gate 	krb5_octet	*data;
3887c478bd9Sstevel@tonic-gate } krb5_alt_method;
3897c478bd9Sstevel@tonic-gate 
3907c478bd9Sstevel@tonic-gate /*
3917c478bd9Sstevel@tonic-gate  * A null-terminated array of this structure is returned by the KDC as
3927c478bd9Sstevel@tonic-gate  * the data part of the ETYPE_INFO preauth type.  It informs the
3937c478bd9Sstevel@tonic-gate  * client which encryption types are supported.
394159d09a2SMark Phalan  * The  same data structure is used by both etype-info and etype-info2
3957c478bd9Sstevel@tonic-gate  * but s2kparams must be null when encoding etype-info.
3967c478bd9Sstevel@tonic-gate  */
3977c478bd9Sstevel@tonic-gate typedef struct _krb5_etype_info_entry {
3987c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
3997c478bd9Sstevel@tonic-gate 	krb5_enctype	etype;
4007c478bd9Sstevel@tonic-gate 	unsigned int	length;
4017c478bd9Sstevel@tonic-gate 	krb5_octet	*salt;
402159d09a2SMark Phalan     krb5_data s2kparams;
4037c478bd9Sstevel@tonic-gate } krb5_etype_info_entry;
4047c478bd9Sstevel@tonic-gate 
405159d09a2SMark Phalan /*
4067c478bd9Sstevel@tonic-gate  *  This is essentially -1 without sign extension which can screw up
4077c478bd9Sstevel@tonic-gate  *  comparisons on 64 bit machines. If the length is this value, then
4087c478bd9Sstevel@tonic-gate  *  the salt data is not present. This is to distinguish between not
409159d09a2SMark Phalan  *  being set and being of 0 length.
4107c478bd9Sstevel@tonic-gate  */
4117c478bd9Sstevel@tonic-gate #define KRB5_ETYPE_NO_SALT VALID_UINT_BITS
4127c478bd9Sstevel@tonic-gate 
4137c478bd9Sstevel@tonic-gate typedef krb5_etype_info_entry ** krb5_etype_info;
4147c478bd9Sstevel@tonic-gate 
415*ba7b222eSGlenn Barry /* RFC 4537 */
416*ba7b222eSGlenn Barry typedef struct _krb5_etype_list {
417*ba7b222eSGlenn Barry         int             length;
418*ba7b222eSGlenn Barry         krb5_enctype    *etypes;
419*ba7b222eSGlenn Barry } krb5_etype_list;
420*ba7b222eSGlenn Barry 
4217c478bd9Sstevel@tonic-gate /*
422159d09a2SMark Phalan  * a sam_challenge is returned for alternate preauth
4237c478bd9Sstevel@tonic-gate  */
4247c478bd9Sstevel@tonic-gate /*
4257c478bd9Sstevel@tonic-gate           SAMFlags ::= BIT STRING {
4267c478bd9Sstevel@tonic-gate               use-sad-as-key[0],
4277c478bd9Sstevel@tonic-gate               send-encrypted-sad[1],
4287c478bd9Sstevel@tonic-gate               must-pk-encrypt-sad[2]
4297c478bd9Sstevel@tonic-gate           }
4307c478bd9Sstevel@tonic-gate  */
4317c478bd9Sstevel@tonic-gate /*
4327c478bd9Sstevel@tonic-gate           PA-SAM-CHALLENGE ::= SEQUENCE {
4337c478bd9Sstevel@tonic-gate               sam-type[0]                 INTEGER,
4347c478bd9Sstevel@tonic-gate               sam-flags[1]                SAMFlags,
4357c478bd9Sstevel@tonic-gate               sam-type-name[2]            GeneralString OPTIONAL,
4367c478bd9Sstevel@tonic-gate               sam-track-id[3]             GeneralString OPTIONAL,
4377c478bd9Sstevel@tonic-gate               sam-challenge-label[4]      GeneralString OPTIONAL,
4387c478bd9Sstevel@tonic-gate               sam-challenge[5]            GeneralString OPTIONAL,
4397c478bd9Sstevel@tonic-gate               sam-response-prompt[6]      GeneralString OPTIONAL,
4407c478bd9Sstevel@tonic-gate               sam-pk-for-sad[7]           EncryptionKey OPTIONAL,
4417c478bd9Sstevel@tonic-gate               sam-nonce[8]                INTEGER OPTIONAL,
4427c478bd9Sstevel@tonic-gate               sam-cksum[9]                Checksum OPTIONAL
4437c478bd9Sstevel@tonic-gate           }
4447c478bd9Sstevel@tonic-gate */
4457c478bd9Sstevel@tonic-gate /* sam_type values -- informational only */
4467c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_ENIGMA     1   /*  Enigma Logic */
4477c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_DIGI_PATH  2   /*  Digital Pathways */
4487c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_SKEY_K0    3   /*  S/key where  KDC has key 0 */
4497c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_SKEY       4   /*  Traditional S/Key */
4507c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_SECURID    5   /*  Security Dynamics */
4517c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_CRYPTOCARD 6   /*  CRYPTOCard */
4527c478bd9Sstevel@tonic-gate #if 1 /* XXX need to figure out who has which numbers assigned */
4537c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_ACTIVCARD_DEC  6   /*  ActivCard decimal mode */
4547c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_ACTIVCARD_HEX  7   /*  ActivCard hex mode */
4557c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_DIGI_PATH_HEX  8   /*  Digital Pathways hex mode */
4567c478bd9Sstevel@tonic-gate #endif
4577c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_EXP_BASE    128 /* experimental */
4587c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_GRAIL		(PA_SAM_TYPE_EXP_BASE+0) /* testing */
4597c478bd9Sstevel@tonic-gate #define PA_SAM_TYPE_SECURID_PREDICT	(PA_SAM_TYPE_EXP_BASE+1) /* special */
4607c478bd9Sstevel@tonic-gate 
4617c478bd9Sstevel@tonic-gate typedef struct _krb5_predicted_sam_response {
4627c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
4637c478bd9Sstevel@tonic-gate 	krb5_keyblock	sam_key;
464159d09a2SMark Phalan 	krb5_flags	sam_flags; /* Makes key munging easier */
465159d09a2SMark Phalan 	krb5_timestamp  stime;	/* time on server, for replay detection */
466159d09a2SMark Phalan 	krb5_int32      susec;
467159d09a2SMark Phalan 	krb5_principal  client;
468159d09a2SMark Phalan 	krb5_data       msd;	/* mechanism specific data */
4697c478bd9Sstevel@tonic-gate } krb5_predicted_sam_response;
4707c478bd9Sstevel@tonic-gate 
4717c478bd9Sstevel@tonic-gate typedef struct _krb5_sam_challenge {
4727c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
4737c478bd9Sstevel@tonic-gate 	krb5_int32	sam_type; /* information */
4747c478bd9Sstevel@tonic-gate 	krb5_flags	sam_flags; /* KRB5_SAM_* values */
4757c478bd9Sstevel@tonic-gate 	krb5_data	sam_type_name;
4767c478bd9Sstevel@tonic-gate 	krb5_data	sam_track_id;
4777c478bd9Sstevel@tonic-gate 	krb5_data	sam_challenge_label;
4787c478bd9Sstevel@tonic-gate 	krb5_data	sam_challenge;
4797c478bd9Sstevel@tonic-gate 	krb5_data	sam_response_prompt;
4807c478bd9Sstevel@tonic-gate 	krb5_data	sam_pk_for_sad;
4817c478bd9Sstevel@tonic-gate 	krb5_int32	sam_nonce;
4827c478bd9Sstevel@tonic-gate 	krb5_checksum	sam_cksum;
4837c478bd9Sstevel@tonic-gate } krb5_sam_challenge;
4847c478bd9Sstevel@tonic-gate 
4857c478bd9Sstevel@tonic-gate typedef struct _krb5_sam_key {	/* reserved for future use */
4867c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
4877c478bd9Sstevel@tonic-gate 	krb5_keyblock	sam_key;
4887c478bd9Sstevel@tonic-gate } krb5_sam_key;
4897c478bd9Sstevel@tonic-gate 
4907c478bd9Sstevel@tonic-gate typedef struct _krb5_enc_sam_response_enc {
4917c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
4927c478bd9Sstevel@tonic-gate 	krb5_int32	sam_nonce;
4937c478bd9Sstevel@tonic-gate 	krb5_timestamp	sam_timestamp;
4947c478bd9Sstevel@tonic-gate 	krb5_int32	sam_usec;
4957c478bd9Sstevel@tonic-gate 	krb5_data	sam_sad;
4967c478bd9Sstevel@tonic-gate } krb5_enc_sam_response_enc;
4977c478bd9Sstevel@tonic-gate 
4987c478bd9Sstevel@tonic-gate typedef struct _krb5_sam_response {
4997c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
5007c478bd9Sstevel@tonic-gate 	krb5_int32	sam_type; /* informational */
5017c478bd9Sstevel@tonic-gate 	krb5_flags	sam_flags; /* KRB5_SAM_* values */
5027c478bd9Sstevel@tonic-gate 	krb5_data	sam_track_id; /* copied */
5037c478bd9Sstevel@tonic-gate 	krb5_enc_data	sam_enc_key; /* krb5_sam_key - future use */
5047c478bd9Sstevel@tonic-gate 	krb5_enc_data	sam_enc_nonce_or_ts; /* krb5_enc_sam_response_enc */
5057c478bd9Sstevel@tonic-gate 	krb5_int32	sam_nonce;
5067c478bd9Sstevel@tonic-gate 	krb5_timestamp	sam_patimestamp;
5077c478bd9Sstevel@tonic-gate } krb5_sam_response;
5087c478bd9Sstevel@tonic-gate 
5097c478bd9Sstevel@tonic-gate typedef struct _krb5_sam_challenge_2 {
5107c478bd9Sstevel@tonic-gate 	krb5_data	sam_challenge_2_body;
5117c478bd9Sstevel@tonic-gate 	krb5_checksum	**sam_cksum;		/* Array of checksums */
5127c478bd9Sstevel@tonic-gate } krb5_sam_challenge_2;
5137c478bd9Sstevel@tonic-gate 
5147c478bd9Sstevel@tonic-gate typedef struct _krb5_sam_challenge_2_body {
5157c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
5167c478bd9Sstevel@tonic-gate 	krb5_int32	sam_type; /* information */
5177c478bd9Sstevel@tonic-gate 	krb5_flags	sam_flags; /* KRB5_SAM_* values */
5187c478bd9Sstevel@tonic-gate 	krb5_data	sam_type_name;
5197c478bd9Sstevel@tonic-gate 	krb5_data	sam_track_id;
5207c478bd9Sstevel@tonic-gate 	krb5_data	sam_challenge_label;
5217c478bd9Sstevel@tonic-gate 	krb5_data	sam_challenge;
5227c478bd9Sstevel@tonic-gate 	krb5_data	sam_response_prompt;
5237c478bd9Sstevel@tonic-gate 	krb5_data	sam_pk_for_sad;
5247c478bd9Sstevel@tonic-gate 	krb5_int32	sam_nonce;
5257c478bd9Sstevel@tonic-gate 	krb5_enctype	sam_etype;
5267c478bd9Sstevel@tonic-gate } krb5_sam_challenge_2_body;
5277c478bd9Sstevel@tonic-gate 
5287c478bd9Sstevel@tonic-gate typedef struct _krb5_sam_response_2 {
5297c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
5307c478bd9Sstevel@tonic-gate 	krb5_int32	sam_type; /* informational */
5317c478bd9Sstevel@tonic-gate 	krb5_flags	sam_flags; /* KRB5_SAM_* values */
5327c478bd9Sstevel@tonic-gate 	krb5_data	sam_track_id; /* copied */
5337c478bd9Sstevel@tonic-gate 	krb5_enc_data	sam_enc_nonce_or_sad; /* krb5_enc_sam_response_enc */
5347c478bd9Sstevel@tonic-gate 	krb5_int32	sam_nonce;
5357c478bd9Sstevel@tonic-gate } krb5_sam_response_2;
5367c478bd9Sstevel@tonic-gate 
5377c478bd9Sstevel@tonic-gate typedef struct _krb5_enc_sam_response_enc_2 {
5387c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
5397c478bd9Sstevel@tonic-gate 	krb5_int32	sam_nonce;
5407c478bd9Sstevel@tonic-gate 	krb5_data	sam_sad;
5417c478bd9Sstevel@tonic-gate } krb5_enc_sam_response_enc_2;
5427c478bd9Sstevel@tonic-gate 
543159d09a2SMark Phalan /*
544159d09a2SMark Phalan  * Keep the pkinit definitions in a separate file so that the plugin
545159d09a2SMark Phalan  * only has to include k5-int-pkinit.h rather than k5-int.h
546159d09a2SMark Phalan  */
547159d09a2SMark Phalan 
548159d09a2SMark Phalan #include "k5-int-pkinit.h"
549159d09a2SMark Phalan 
5507c478bd9Sstevel@tonic-gate /*
5517c478bd9Sstevel@tonic-gate  * Begin "dbm.h"
5527c478bd9Sstevel@tonic-gate  */
5537c478bd9Sstevel@tonic-gate #ifndef _KERNEL
5547c478bd9Sstevel@tonic-gate 
5557c478bd9Sstevel@tonic-gate /*
5567c478bd9Sstevel@tonic-gate  * Since we are always using db, use the db-ndbm include header file.
5577c478bd9Sstevel@tonic-gate  */
5587c478bd9Sstevel@tonic-gate 
5597c478bd9Sstevel@tonic-gate #include "db-ndbm.h"
5607c478bd9Sstevel@tonic-gate 
5617c478bd9Sstevel@tonic-gate #endif /* !KERNEL */
5627c478bd9Sstevel@tonic-gate /*
5637c478bd9Sstevel@tonic-gate  * End "dbm.h"
5647c478bd9Sstevel@tonic-gate  */
5657c478bd9Sstevel@tonic-gate 
5667c478bd9Sstevel@tonic-gate /*
5677c478bd9Sstevel@tonic-gate  * Begin "ext-proto.h"
5687c478bd9Sstevel@tonic-gate  */
5697c478bd9Sstevel@tonic-gate #ifndef KRB5_EXT_PROTO__
5707c478bd9Sstevel@tonic-gate #define KRB5_EXT_PROTO__
5717c478bd9Sstevel@tonic-gate 
5727c478bd9Sstevel@tonic-gate #ifndef _KERNEL
5737c478bd9Sstevel@tonic-gate #include <stdlib.h>
5747c478bd9Sstevel@tonic-gate #include <string.h>
5757c478bd9Sstevel@tonic-gate #endif /* !_KERNEL */
5767c478bd9Sstevel@tonic-gate 
5777c478bd9Sstevel@tonic-gate #ifndef HAVE_STRDUP
5787c478bd9Sstevel@tonic-gate extern char *strdup (const char *);
5797c478bd9Sstevel@tonic-gate #endif
5807c478bd9Sstevel@tonic-gate 
5817c478bd9Sstevel@tonic-gate #ifndef _KERNEL
5827c478bd9Sstevel@tonic-gate #ifdef HAVE_UNISTD_H
5837c478bd9Sstevel@tonic-gate #include <unistd.h>
5847c478bd9Sstevel@tonic-gate #endif
5857c478bd9Sstevel@tonic-gate #endif /* !_KERNEL */
5867c478bd9Sstevel@tonic-gate 
5877c478bd9Sstevel@tonic-gate #endif /* KRB5_EXT_PROTO__ */
5887c478bd9Sstevel@tonic-gate /*
5897c478bd9Sstevel@tonic-gate  * End "ext-proto.h"
5907c478bd9Sstevel@tonic-gate  */
5917c478bd9Sstevel@tonic-gate 
5927c478bd9Sstevel@tonic-gate /*
5937c478bd9Sstevel@tonic-gate  * Begin "sysincl.h"
5947c478bd9Sstevel@tonic-gate  */
5957c478bd9Sstevel@tonic-gate #ifndef KRB5_SYSINCL__
5967c478bd9Sstevel@tonic-gate #define KRB5_SYSINCL__
5977c478bd9Sstevel@tonic-gate 
5987c478bd9Sstevel@tonic-gate #ifndef KRB5_SYSTYPES__
5997c478bd9Sstevel@tonic-gate #define KRB5_SYSTYPES__
6007c478bd9Sstevel@tonic-gate /* needed for much of the rest -- but already handled in krb5.h? */
6017c478bd9Sstevel@tonic-gate /* #include <sys/types.h> */
6027c478bd9Sstevel@tonic-gate #endif /* KRB5_SYSTYPES__ */
6037c478bd9Sstevel@tonic-gate 
6047c478bd9Sstevel@tonic-gate #ifdef	_KERNEL
6057c478bd9Sstevel@tonic-gate #include <sys/time.h>
6067c478bd9Sstevel@tonic-gate #else
6077c478bd9Sstevel@tonic-gate #ifdef HAVE_SYS_TIME_H
6087c478bd9Sstevel@tonic-gate #include <sys/time.h>
6097c478bd9Sstevel@tonic-gate #ifdef TIME_WITH_SYS_TIME
6107c478bd9Sstevel@tonic-gate #include <time.h>
6117c478bd9Sstevel@tonic-gate #endif
6127c478bd9Sstevel@tonic-gate #else
6137c478bd9Sstevel@tonic-gate #include <time.h>
6147c478bd9Sstevel@tonic-gate #endif
6157c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
6167c478bd9Sstevel@tonic-gate 
6177c478bd9Sstevel@tonic-gate #ifdef HAVE_SYS_STAT_H
6187c478bd9Sstevel@tonic-gate #include <sys/stat.h>			/* struct stat, stat() */
6197c478bd9Sstevel@tonic-gate #endif
6207c478bd9Sstevel@tonic-gate 
6217c478bd9Sstevel@tonic-gate #ifdef HAVE_SYS_PARAM_H
6227c478bd9Sstevel@tonic-gate #include <sys/param.h>			/* MAXPATHLEN */
6237c478bd9Sstevel@tonic-gate #endif
6247c478bd9Sstevel@tonic-gate 
6257c478bd9Sstevel@tonic-gate #ifdef HAVE_SYS_FILE_H
6267c478bd9Sstevel@tonic-gate #include <sys/file.h>			/* prototypes for file-related
6277c478bd9Sstevel@tonic-gate 					   syscalls; flags for open &
6287c478bd9Sstevel@tonic-gate 					   friends */
6297c478bd9Sstevel@tonic-gate #endif
6307c478bd9Sstevel@tonic-gate 
6317c478bd9Sstevel@tonic-gate #ifdef _KERNEL
6327c478bd9Sstevel@tonic-gate #include <sys/fcntl.h>
6337c478bd9Sstevel@tonic-gate #else
6347c478bd9Sstevel@tonic-gate #include <fcntl.h>
6357c478bd9Sstevel@tonic-gate #endif
6367c478bd9Sstevel@tonic-gate 
6377c478bd9Sstevel@tonic-gate #endif /* KRB5_SYSINCL__ */
6387c478bd9Sstevel@tonic-gate /*
6397c478bd9Sstevel@tonic-gate  * End "sysincl.h"
6407c478bd9Sstevel@tonic-gate  */
6417c478bd9Sstevel@tonic-gate 
6427c478bd9Sstevel@tonic-gate /*
6437c478bd9Sstevel@tonic-gate  * Begin "los-proto.h"
6447c478bd9Sstevel@tonic-gate  */
6457c478bd9Sstevel@tonic-gate #ifndef KRB5_LIBOS_PROTO__
6467c478bd9Sstevel@tonic-gate #define KRB5_LIBOS_PROTO__
647159d09a2SMark Phalan #endif
6487c478bd9Sstevel@tonic-gate 
6497c478bd9Sstevel@tonic-gate #ifndef	_KERNEL
6507c478bd9Sstevel@tonic-gate #include <stdio.h>
6517c478bd9Sstevel@tonic-gate 
6527c478bd9Sstevel@tonic-gate struct addrlist;
653159d09a2SMark Phalan struct sendto_callback_info;
6547c478bd9Sstevel@tonic-gate #endif
6557c478bd9Sstevel@tonic-gate 
6567c478bd9Sstevel@tonic-gate /* libos.spec */
657159d09a2SMark Phalan krb5_error_code krb5_lock_file (krb5_context, int, int);
658159d09a2SMark Phalan krb5_error_code krb5_unlock_file (krb5_context, int);
659159d09a2SMark Phalan krb5_error_code krb5_sendto_kdc (krb5_context, const krb5_data *,
660159d09a2SMark Phalan 				 const krb5_data *, krb5_data *, int *, int);
661159d09a2SMark Phalan 
6627c478bd9Sstevel@tonic-gate 
663159d09a2SMark Phalan krb5_error_code krb5_get_krbhst (krb5_context, const krb5_data *, char *** );
664159d09a2SMark Phalan krb5_error_code krb5_free_krbhst (krb5_context, char * const * );
665159d09a2SMark Phalan krb5_error_code krb5_create_secure_file (krb5_context, const char * pathname);
6667c478bd9Sstevel@tonic-gate 
667159d09a2SMark Phalan int krb5_net_read (krb5_context, int , char *, int);
6687c478bd9Sstevel@tonic-gate 
6697c478bd9Sstevel@tonic-gate int krb5_net_write
6707c478bd9Sstevel@tonic-gate 	(krb5_context, int , const char *, int);
6717c478bd9Sstevel@tonic-gate 
6727c478bd9Sstevel@tonic-gate 
6737c478bd9Sstevel@tonic-gate krb5_error_code krb5_gen_replay_name
6747c478bd9Sstevel@tonic-gate     (krb5_context, const krb5_address *, const char *, char **);
6757c478bd9Sstevel@tonic-gate 
6767c478bd9Sstevel@tonic-gate 
6777c478bd9Sstevel@tonic-gate #ifndef	_KERNEL
678159d09a2SMark Phalan 
679159d09a2SMark Phalan krb5_error_code krb5_sync_disk_file (krb5_context, FILE *fp);
6807c478bd9Sstevel@tonic-gate 
6817c478bd9Sstevel@tonic-gate krb5_error_code
6827c478bd9Sstevel@tonic-gate krb5_open_pkcs11_session(CK_SESSION_HANDLE *);
6837c478bd9Sstevel@tonic-gate 
6847c478bd9Sstevel@tonic-gate 
6857c478bd9Sstevel@tonic-gate krb5_error_code krb5_read_message
6867c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_pointer, krb5_data *);
6877c478bd9Sstevel@tonic-gate 
6887c478bd9Sstevel@tonic-gate krb5_error_code krb5_write_message
6897c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_pointer, krb5_data *);
690159d09a2SMark Phalan krb5_error_code krb5int_sendto (krb5_context context, const krb5_data *message,
691159d09a2SMark Phalan                 const struct addrlist *addrs, struct sendto_callback_info* callback_info,
692159d09a2SMark Phalan 				krb5_data *reply, struct sockaddr *localaddr, socklen_t *localaddrlen,
693159d09a2SMark Phalan                 struct sockaddr *remoteaddr, socklen_t *remoteaddrlen, int *addr_used,
694159d09a2SMark Phalan 		int (*msg_handler)(krb5_context, const krb5_data *, void *),
695159d09a2SMark Phalan 		void *msg_handler_data);
69654925bf6Swillf 
6977c478bd9Sstevel@tonic-gate krb5_error_code krb5int_get_fq_local_hostname (char *, size_t);
698*ba7b222eSGlenn Barry 
699*ba7b222eSGlenn Barry krb5_error_code krb5_set_debugging_time
700*ba7b222eSGlenn Barry         (krb5_context, krb5_timestamp, krb5_int32);
701*ba7b222eSGlenn Barry krb5_error_code krb5_use_natural_time
702*ba7b222eSGlenn Barry         (krb5_context);
703*ba7b222eSGlenn Barry krb5_error_code krb5_set_time_offsets
704*ba7b222eSGlenn Barry         (krb5_context, krb5_timestamp, krb5_int32);
705*ba7b222eSGlenn Barry krb5_error_code krb5int_check_clockskew(krb5_context, krb5_timestamp);
70654925bf6Swillf #endif
7077c478bd9Sstevel@tonic-gate 
708fe598cdcSmp /*
709fe598cdcSmp  * Solaris Kerberos
710fe598cdcSmp  * The following two functions are needed for better realm
711fe598cdcSmp  * determination based on the DNS domain name.
712fe598cdcSmp  */
713fe598cdcSmp krb5_error_code krb5int_lookup_host(int , const char *, char **);
714fe598cdcSmp 
715fe598cdcSmp krb5_error_code krb5int_domain_get_realm(krb5_context, const char *,
716fe598cdcSmp     char **);
717fe598cdcSmp krb5_error_code krb5int_fqdn_get_realm(krb5_context, const char *,
718fe598cdcSmp     char **);
719fe598cdcSmp 
72054925bf6Swillf krb5_error_code krb5int_init_context_kdc(krb5_context *);
72154925bf6Swillf 
722159d09a2SMark Phalan krb5_error_code krb5_os_init_context (krb5_context, krb5_boolean);
7237c478bd9Sstevel@tonic-gate 
7247c478bd9Sstevel@tonic-gate void krb5_os_free_context (krb5_context);
7257c478bd9Sstevel@tonic-gate 
726159d09a2SMark Phalan /* This function is needed by KfM's KerberosPreferences API
727159d09a2SMark Phalan  * because it needs to be able to specify "secure" */
728505d05c7Sgtb #ifndef _KERNEL
729159d09a2SMark Phalan krb5_error_code os_get_default_config_files
730159d09a2SMark Phalan     (profile_filespec_t **pfiles, krb5_boolean secure);
731505d05c7Sgtb #endif
732505d05c7Sgtb 
733159d09a2SMark Phalan krb5_error_code krb5_os_hostaddr
734159d09a2SMark Phalan 	(krb5_context, const char *, krb5_address ***);
735505d05c7Sgtb 
7367c478bd9Sstevel@tonic-gate #ifndef _KERNEL
7377c478bd9Sstevel@tonic-gate /* N.B.: You need to include fake-addrinfo.h *before* k5-int.h if you're
738159d09a2SMark Phalan    going to use this structure.  */
7397c478bd9Sstevel@tonic-gate struct addrlist {
740159d09a2SMark Phalan     struct {
741159d09a2SMark Phalan #ifdef FAI_DEFINED
742159d09a2SMark Phalan 	struct addrinfo *ai;
743159d09a2SMark Phalan #else
744159d09a2SMark Phalan 	struct undefined_addrinfo *ai;
745159d09a2SMark Phalan #endif
746159d09a2SMark Phalan 	void (*freefn)(void *);
747159d09a2SMark Phalan 	void *data;
748159d09a2SMark Phalan     } *addrs;
749159d09a2SMark Phalan     int naddrs;
750159d09a2SMark Phalan     int space;
7517c478bd9Sstevel@tonic-gate };
752159d09a2SMark Phalan #define ADDRLIST_INIT { 0, 0, 0 }
7537c478bd9Sstevel@tonic-gate extern void krb5int_free_addrlist (struct addrlist *);
7547c478bd9Sstevel@tonic-gate extern int krb5int_grow_addrlist (struct addrlist *, int);
7557c478bd9Sstevel@tonic-gate extern int krb5int_add_host_to_list (struct addrlist *, const char *,
756159d09a2SMark Phalan 				     int, int, int, int);
7577c478bd9Sstevel@tonic-gate 
758159d09a2SMark Phalan #include <locate_plugin.h>
75910db1377Sgtb krb5_error_code
760159d09a2SMark Phalan krb5int_locate_server (krb5_context, const krb5_data *realm,
761159d09a2SMark Phalan 		       struct addrlist *, enum locate_service_type svc,
762159d09a2SMark Phalan 		       int sockettype, int family);
76310db1377Sgtb 
7647c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
7657c478bd9Sstevel@tonic-gate 
7667c478bd9Sstevel@tonic-gate /* new encryption provider api */
7677c478bd9Sstevel@tonic-gate 
7687c478bd9Sstevel@tonic-gate struct krb5_enc_provider {
769159d09a2SMark Phalan     /* keybytes is the input size to make_key;
7707c478bd9Sstevel@tonic-gate        keylength is the output size */
771505d05c7Sgtb     size_t block_size, keybytes, keylength;
7727c478bd9Sstevel@tonic-gate 
773505d05c7Sgtb     /* cipher-state == 0 fresh state thrown away at end */
7747c478bd9Sstevel@tonic-gate     krb5_error_code (*encrypt) (
7757c478bd9Sstevel@tonic-gate 	krb5_context context,
7767c478bd9Sstevel@tonic-gate 	krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec,
7777c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *input, krb5_data *output);
7787c478bd9Sstevel@tonic-gate 
7797c478bd9Sstevel@tonic-gate     krb5_error_code (*decrypt) (
7807c478bd9Sstevel@tonic-gate 	krb5_context context,
7817c478bd9Sstevel@tonic-gate 	krb5_const krb5_keyblock *key, krb5_const krb5_data *ivec,
7827c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *input, krb5_data *output);
7837c478bd9Sstevel@tonic-gate 
7847c478bd9Sstevel@tonic-gate     krb5_error_code (*make_key)
7857c478bd9Sstevel@tonic-gate     (krb5_context, krb5_const krb5_data *, krb5_keyblock *);
7867c478bd9Sstevel@tonic-gate 
7877c478bd9Sstevel@tonic-gate     krb5_error_code (*init_state) (krb5_context,
7887c478bd9Sstevel@tonic-gate 			const krb5_keyblock *,
7897c478bd9Sstevel@tonic-gate 			krb5_keyusage, krb5_data *);
7907c478bd9Sstevel@tonic-gate     krb5_error_code (*free_state) (krb5_context, krb5_data *);
7917c478bd9Sstevel@tonic-gate 
7927c478bd9Sstevel@tonic-gate };
7937c478bd9Sstevel@tonic-gate 
7947c478bd9Sstevel@tonic-gate struct krb5_hash_provider {
795159d09a2SMark Phalan     size_t hashsize, blocksize;
7967c478bd9Sstevel@tonic-gate 
7977c478bd9Sstevel@tonic-gate     /* this takes multiple inputs to avoid lots of copying. */
7987c478bd9Sstevel@tonic-gate     krb5_error_code (*hash) (krb5_context context,
7997c478bd9Sstevel@tonic-gate 	unsigned int icount, krb5_const krb5_data *input,
8007c478bd9Sstevel@tonic-gate 	krb5_data *output);
8017c478bd9Sstevel@tonic-gate };
8027c478bd9Sstevel@tonic-gate 
8037c478bd9Sstevel@tonic-gate struct krb5_keyhash_provider {
804505d05c7Sgtb     size_t hashsize;
8057c478bd9Sstevel@tonic-gate 
8067c478bd9Sstevel@tonic-gate     krb5_error_code (*hash) (
8077c478bd9Sstevel@tonic-gate 	krb5_context context,
8087c478bd9Sstevel@tonic-gate 	krb5_const krb5_keyblock *key,
8097c478bd9Sstevel@tonic-gate 	krb5_keyusage keyusage,
8107c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *ivec,
8117c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *input, krb5_data *output);
8127c478bd9Sstevel@tonic-gate 
8137c478bd9Sstevel@tonic-gate     krb5_error_code (*verify) (
8147c478bd9Sstevel@tonic-gate 	krb5_context context,
8157c478bd9Sstevel@tonic-gate 	krb5_const krb5_keyblock *key,
8167c478bd9Sstevel@tonic-gate 	krb5_keyusage keyusage,
8177c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *ivec,
8187c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *input,
8197c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *hash,
8207c478bd9Sstevel@tonic-gate 	krb5_boolean *valid);
8217c478bd9Sstevel@tonic-gate 
8227c478bd9Sstevel@tonic-gate };
8237c478bd9Sstevel@tonic-gate 
824159d09a2SMark Phalan typedef void (*krb5_encrypt_length_func) (const struct krb5_enc_provider *enc,
825159d09a2SMark Phalan   const struct krb5_hash_provider *hash,
8267c478bd9Sstevel@tonic-gate   size_t inputlen, size_t *length);
8277c478bd9Sstevel@tonic-gate 
8287c478bd9Sstevel@tonic-gate typedef krb5_error_code (*krb5_crypt_func) (
8297c478bd9Sstevel@tonic-gate   krb5_context context,
8307c478bd9Sstevel@tonic-gate   krb5_const struct krb5_enc_provider *enc,
8317c478bd9Sstevel@tonic-gate   krb5_const struct krb5_hash_provider *hash,
8327c478bd9Sstevel@tonic-gate   krb5_const krb5_keyblock *key, krb5_keyusage usage,
8337c478bd9Sstevel@tonic-gate   krb5_const krb5_data *ivec,
8347c478bd9Sstevel@tonic-gate   krb5_const krb5_data *input, krb5_data *output);
8357c478bd9Sstevel@tonic-gate 
8367c478bd9Sstevel@tonic-gate #ifndef	_KERNEL
8377c478bd9Sstevel@tonic-gate typedef krb5_error_code (*krb5_str2key_func) (
8387c478bd9Sstevel@tonic-gate   krb5_context context,
8397c478bd9Sstevel@tonic-gate   krb5_const struct krb5_enc_provider *enc, krb5_const krb5_data *string,
8407c478bd9Sstevel@tonic-gate   krb5_const krb5_data *salt, krb5_const krb5_data *params,
8417c478bd9Sstevel@tonic-gate   krb5_keyblock *key);
8427c478bd9Sstevel@tonic-gate #endif	/* _KERNEL */
8437c478bd9Sstevel@tonic-gate 
844159d09a2SMark Phalan typedef krb5_error_code (*krb5_prf_func)(
845159d09a2SMark Phalan 					 const struct krb5_enc_provider *enc,
846159d09a2SMark Phalan 					 const struct krb5_hash_provider *hash,
847159d09a2SMark Phalan 					 const krb5_keyblock *key,
848159d09a2SMark Phalan 					 const krb5_data *in, krb5_data *out);
849159d09a2SMark Phalan 
8507c478bd9Sstevel@tonic-gate struct krb5_keytypes {
8517c478bd9Sstevel@tonic-gate     krb5_enctype etype;
8527c478bd9Sstevel@tonic-gate     char *in_string;
8537c478bd9Sstevel@tonic-gate     char *out_string;
8547c478bd9Sstevel@tonic-gate     const struct krb5_enc_provider *enc;
8557c478bd9Sstevel@tonic-gate     const struct krb5_hash_provider *hash;
8567c478bd9Sstevel@tonic-gate     krb5_encrypt_length_func encrypt_len;
8577c478bd9Sstevel@tonic-gate     krb5_crypt_func encrypt;
8587c478bd9Sstevel@tonic-gate     krb5_crypt_func decrypt;
8597c478bd9Sstevel@tonic-gate     krb5_cksumtype required_ctype;
8607c478bd9Sstevel@tonic-gate #ifndef	_KERNEL
8617c478bd9Sstevel@tonic-gate     /* Solaris Kerberos:  strings to key conversion not done in the kernel */
8627c478bd9Sstevel@tonic-gate     krb5_str2key_func str2key;
8637c478bd9Sstevel@tonic-gate #else	/* _KERNEL */
8647c478bd9Sstevel@tonic-gate     char *mt_e_name;
8657c478bd9Sstevel@tonic-gate     char *mt_h_name;
8667c478bd9Sstevel@tonic-gate     crypto_mech_type_t kef_cipher_mt;
8677c478bd9Sstevel@tonic-gate     crypto_mech_type_t kef_hash_mt;
8687c478bd9Sstevel@tonic-gate #endif	/* _KERNEL */
8697c478bd9Sstevel@tonic-gate };
8707c478bd9Sstevel@tonic-gate 
8717c478bd9Sstevel@tonic-gate struct krb5_cksumtypes {
8727c478bd9Sstevel@tonic-gate     krb5_cksumtype ctype;
8737c478bd9Sstevel@tonic-gate     unsigned int flags;
8747c478bd9Sstevel@tonic-gate     char *in_string;
8757c478bd9Sstevel@tonic-gate     char *out_string;
8767c478bd9Sstevel@tonic-gate     /* if the hash is keyed, this is the etype it is keyed with.
8777c478bd9Sstevel@tonic-gate        Actually, it can be keyed by any etype which has the same
8787c478bd9Sstevel@tonic-gate        enc_provider as the specified etype.  DERIVE checksums can
8797c478bd9Sstevel@tonic-gate        be keyed with any valid etype. */
8807c478bd9Sstevel@tonic-gate     krb5_enctype keyed_etype;
8817c478bd9Sstevel@tonic-gate     /* I can't statically initialize a union, so I'm just going to use
8827c478bd9Sstevel@tonic-gate        two pointers here.  The keyhash is used if non-NULL.  If NULL,
8837c478bd9Sstevel@tonic-gate        then HMAC/hash with derived keys is used if the relevant flag
8847c478bd9Sstevel@tonic-gate        is set.  Otherwise, a non-keyed hash is computed.  This is all
8857c478bd9Sstevel@tonic-gate        kind of messy, but so is the krb5 api. */
8867c478bd9Sstevel@tonic-gate     const struct krb5_keyhash_provider *keyhash;
8877c478bd9Sstevel@tonic-gate     const struct krb5_hash_provider *hash;
8887c478bd9Sstevel@tonic-gate     /* This just gets uglier and uglier.  In the key derivation case,
889159d09a2SMark Phalan        we produce an hmac.  To make the hmac code work, we can't hack
890159d09a2SMark Phalan        the output size indicated by the hash provider, but we may want
891159d09a2SMark Phalan        a truncated hmac.  If we want truncation, this is the number of
892159d09a2SMark Phalan        bytes we truncate to; it should be 0 otherwise.  */
8937c478bd9Sstevel@tonic-gate     unsigned int trunc_size;
8947c478bd9Sstevel@tonic-gate #ifdef _KERNEL
8957c478bd9Sstevel@tonic-gate     char *mt_c_name;
8967c478bd9Sstevel@tonic-gate     crypto_mech_type_t kef_cksum_mt;
8977c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
8987c478bd9Sstevel@tonic-gate };
8997c478bd9Sstevel@tonic-gate 
9007c478bd9Sstevel@tonic-gate #define KRB5_CKSUMFLAG_DERIVE		0x0001
9017c478bd9Sstevel@tonic-gate #define KRB5_CKSUMFLAG_NOT_COLL_PROOF	0x0002
9027c478bd9Sstevel@tonic-gate 
903159d09a2SMark Phalan /*
904159d09a2SMark Phalan  * in here to deal with stuff from lib/crypto
905159d09a2SMark Phalan  */
906159d09a2SMark Phalan 
907159d09a2SMark Phalan void krb5_nfold
908159d09a2SMark Phalan (unsigned int inbits, const unsigned char *in,
909159d09a2SMark Phalan 		unsigned int outbits, unsigned char *out);
910159d09a2SMark Phalan 
911159d09a2SMark Phalan krb5_error_code krb5int_pbkdf2_hmac_sha1 (krb5_context,
912159d09a2SMark Phalan 					   const krb5_data *,
913159d09a2SMark Phalan 					   unsigned long,
914159d09a2SMark Phalan 					   krb5_enctype,
915159d09a2SMark Phalan 					   const krb5_data *,
916159d09a2SMark Phalan 					   const krb5_data *);
917159d09a2SMark Phalan 
918159d09a2SMark Phalan /* Make this a function eventually?  */
919159d09a2SMark Phalan #ifdef _WIN32
920159d09a2SMark Phalan # define krb5int_zap_data(ptr, len) SecureZeroMemory(ptr, len)
921159d09a2SMark Phalan #elif defined(__palmos__) && !defined(__GNUC__)
922159d09a2SMark Phalan /* CodeWarrior 8.3 complains about passing a pointer to volatile in to
923159d09a2SMark Phalan    memset.  On the other hand, we probably want it for gcc.  */
924159d09a2SMark Phalan # define krb5int_zap_data(ptr, len) memset(ptr, 0, len)
925159d09a2SMark Phalan #else
926159d09a2SMark Phalan # define krb5int_zap_data(ptr, len) memset((void *)ptr, 0, len)
927159d09a2SMark Phalan # if defined(__GNUC__) && defined(__GLIBC__)
928159d09a2SMark Phalan /* GNU libc generates multiple bogus initialization warnings if we
929159d09a2SMark Phalan    pass memset a volatile pointer.  The compiler should do well enough
930159d09a2SMark Phalan    with memset even without GNU libc's attempt at optimization.  */
931159d09a2SMark Phalan # undef memset
932159d09a2SMark Phalan # endif
933159d09a2SMark Phalan #endif /* WIN32 */
934159d09a2SMark Phalan #define zap(p,l) krb5int_zap_data(p,l)
935159d09a2SMark Phalan 
936159d09a2SMark Phalan 
937159d09a2SMark Phalan krb5_error_code krb5int_des_init_state
938159d09a2SMark Phalan ( krb5_context,
9397c478bd9Sstevel@tonic-gate 	const krb5_keyblock *,
9407c478bd9Sstevel@tonic-gate 	krb5_keyusage, krb5_data *);
9417c478bd9Sstevel@tonic-gate 
9427c478bd9Sstevel@tonic-gate krb5_error_code krb5int_c_mandatory_cksumtype(
9437c478bd9Sstevel@tonic-gate 	krb5_context,
9447c478bd9Sstevel@tonic-gate 	krb5_enctype,
9457c478bd9Sstevel@tonic-gate 	krb5_cksumtype *);
9467c478bd9Sstevel@tonic-gate 
947159d09a2SMark Phalan /*
9487c478bd9Sstevel@tonic-gate  * normally to free a cipher_state you can just memset the length to zero and
9497c478bd9Sstevel@tonic-gate  * free it.
9507c478bd9Sstevel@tonic-gate  */
951159d09a2SMark Phalan krb5_error_code krb5int_default_free_state
952159d09a2SMark Phalan (krb5_context, krb5_data *);
953159d09a2SMark Phalan 
9547c478bd9Sstevel@tonic-gate 
9557c478bd9Sstevel@tonic-gate /*
9567c478bd9Sstevel@tonic-gate  * Combine two keys (normally used by the hardware preauth mechanism)
9577c478bd9Sstevel@tonic-gate  */
9587c478bd9Sstevel@tonic-gate krb5_error_code krb5int_c_combine_keys
9597c478bd9Sstevel@tonic-gate (krb5_context context, krb5_keyblock *key1, krb5_keyblock *key2,
9607c478bd9Sstevel@tonic-gate 		krb5_keyblock *outkey);
9617c478bd9Sstevel@tonic-gate 
9627c478bd9Sstevel@tonic-gate 
9637c478bd9Sstevel@tonic-gate #ifdef _KERNEL
9647c478bd9Sstevel@tonic-gate 
9657c478bd9Sstevel@tonic-gate int k5_ef_crypto(
9667c478bd9Sstevel@tonic-gate 	const char *, char *,
9677c478bd9Sstevel@tonic-gate 	long, krb5_keyblock *,
968c54c769dSwillf 	const krb5_data *, int);
9697c478bd9Sstevel@tonic-gate 
9707c478bd9Sstevel@tonic-gate krb5_error_code
9717c478bd9Sstevel@tonic-gate krb5_hmac(krb5_context, const krb5_keyblock *,
9727c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *, krb5_data *);
9737c478bd9Sstevel@tonic-gate 
9747c478bd9Sstevel@tonic-gate #else
9757c478bd9Sstevel@tonic-gate krb5_error_code krb5_hmac
9767c478bd9Sstevel@tonic-gate 	(krb5_context,
9777c478bd9Sstevel@tonic-gate 	krb5_const struct krb5_hash_provider *,
9787c478bd9Sstevel@tonic-gate 	krb5_const krb5_keyblock *, krb5_const unsigned int,
9797c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *, krb5_data *);
9807c478bd9Sstevel@tonic-gate 
9817c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
9827c478bd9Sstevel@tonic-gate 
983505d05c7Sgtb 
984505d05c7Sgtb /*
985505d05c7Sgtb  * These declarations are here, so both krb5 and k5crypto
986505d05c7Sgtb  * can get to them.
987505d05c7Sgtb  * krb5 needs to get to them so it can  make them available to libgssapi.
988505d05c7Sgtb  */
989505d05c7Sgtb extern const struct krb5_enc_provider krb5int_enc_arcfour;
990505d05c7Sgtb extern const struct krb5_hash_provider krb5int_hash_md5;
991505d05c7Sgtb 
992505d05c7Sgtb 
993505d05c7Sgtb /* #ifdef KRB5_OLD_CRYPTO XXX SUNW14resync */
994505d05c7Sgtb 
9957c478bd9Sstevel@tonic-gate krb5_error_code krb5_crypto_us_timeofday
996159d09a2SMark Phalan 	(krb5_int32 *,
997159d09a2SMark Phalan 		krb5_int32 *);
9987c478bd9Sstevel@tonic-gate 
99954925bf6Swillf #ifndef _KERNEL
100054925bf6Swillf /* Solaris kerberos: for convenience */
1001159d09a2SMark Phalan time_t krb5int_gmt_mktime (struct tm *);
100254925bf6Swillf #endif /* ! _KERNEL */
100354925bf6Swillf 
1004505d05c7Sgtb /* #endif KRB5_OLD_CRYPTO */
1005505d05c7Sgtb 
10067c478bd9Sstevel@tonic-gate /* this helper fct is in libkrb5, but it makes sense declared here. */
10077c478bd9Sstevel@tonic-gate 
10087c478bd9Sstevel@tonic-gate krb5_error_code krb5_encrypt_helper
1009159d09a2SMark Phalan (krb5_context context, const krb5_keyblock *key,
1010159d09a2SMark Phalan 		krb5_keyusage keyusage, const krb5_data *plain,
1011159d09a2SMark Phalan 		krb5_enc_data *cipher);
10127c478bd9Sstevel@tonic-gate 
10137c478bd9Sstevel@tonic-gate /*
10147c478bd9Sstevel@tonic-gate  * End "los-proto.h"
10157c478bd9Sstevel@tonic-gate  */
10167c478bd9Sstevel@tonic-gate 
10177c478bd9Sstevel@tonic-gate /*
10187c478bd9Sstevel@tonic-gate  * Begin "libos.h"
10197c478bd9Sstevel@tonic-gate  */
10207c478bd9Sstevel@tonic-gate #ifndef KRB5_LIBOS__
10217c478bd9Sstevel@tonic-gate #define KRB5_LIBOS__
10227c478bd9Sstevel@tonic-gate 
10237c478bd9Sstevel@tonic-gate typedef struct _krb5_os_context {
1024159d09a2SMark Phalan 	krb5_magic		magic;
1025159d09a2SMark Phalan 	krb5_int32		time_offset;
1026159d09a2SMark Phalan 	krb5_int32		usec_offset;
1027159d09a2SMark Phalan 	krb5_int32		os_flags;
1028159d09a2SMark Phalan 	char *			default_ccname;
10297c478bd9Sstevel@tonic-gate } *krb5_os_context;
10307c478bd9Sstevel@tonic-gate 
10317c478bd9Sstevel@tonic-gate /*
10327c478bd9Sstevel@tonic-gate  * Flags for the os_flags field
10337c478bd9Sstevel@tonic-gate  *
10347c478bd9Sstevel@tonic-gate  * KRB5_OS_TOFFSET_VALID means that the time offset fields are valid.
10357c478bd9Sstevel@tonic-gate  * The intention is that this facility to correct the system clocks so
10367c478bd9Sstevel@tonic-gate  * that they reflect the "real" time, for systems where for some
10377c478bd9Sstevel@tonic-gate  * reason we can't set the system clock.  Instead we calculate the
10387c478bd9Sstevel@tonic-gate  * offset between the system time and real time, and store the offset
10397c478bd9Sstevel@tonic-gate  * in the os context so that we can correct the system clock as necessary.
10407c478bd9Sstevel@tonic-gate  *
10417c478bd9Sstevel@tonic-gate  * KRB5_OS_TOFFSET_TIME means that the time offset fields should be
10427c478bd9Sstevel@tonic-gate  * returned as the time by the krb5 time routines.  This should only
10437c478bd9Sstevel@tonic-gate  * be used for testing purposes (obviously!)
10447c478bd9Sstevel@tonic-gate  */
10457c478bd9Sstevel@tonic-gate #define KRB5_OS_TOFFSET_VALID	1
10467c478bd9Sstevel@tonic-gate #define KRB5_OS_TOFFSET_TIME	2
10477c478bd9Sstevel@tonic-gate 
10487c478bd9Sstevel@tonic-gate /* lock mode flags */
10497c478bd9Sstevel@tonic-gate #define	KRB5_LOCKMODE_SHARED	0x0001
10507c478bd9Sstevel@tonic-gate #define	KRB5_LOCKMODE_EXCLUSIVE	0x0002
10517c478bd9Sstevel@tonic-gate #define	KRB5_LOCKMODE_DONTBLOCK	0x0004
10527c478bd9Sstevel@tonic-gate #define	KRB5_LOCKMODE_UNLOCK	0x0008
10537c478bd9Sstevel@tonic-gate 
10547c478bd9Sstevel@tonic-gate #endif /* KRB5_LIBOS__ */
10557c478bd9Sstevel@tonic-gate /*
10567c478bd9Sstevel@tonic-gate  * End "libos.h"
10577c478bd9Sstevel@tonic-gate  */
10587c478bd9Sstevel@tonic-gate 
10597c478bd9Sstevel@tonic-gate /*
10607c478bd9Sstevel@tonic-gate  * Define our view of the size of a DES key.
10617c478bd9Sstevel@tonic-gate  */
10627c478bd9Sstevel@tonic-gate #define	KRB5_MIT_DES_KEYSIZE		8
10637c478bd9Sstevel@tonic-gate /*
10647c478bd9Sstevel@tonic-gate  * Define a couple of SHA1 constants
10657c478bd9Sstevel@tonic-gate  */
10667c478bd9Sstevel@tonic-gate #define	SHS_DATASIZE	64
10677c478bd9Sstevel@tonic-gate #define	SHS_DIGESTSIZE	20
10687c478bd9Sstevel@tonic-gate 
10697c478bd9Sstevel@tonic-gate /*
10707c478bd9Sstevel@tonic-gate  * Check if des_int.h has been included before us.  If so, then check to see
10717c478bd9Sstevel@tonic-gate  * that our view of the DES key size is the same as des_int.h's.
10727c478bd9Sstevel@tonic-gate  */
10737c478bd9Sstevel@tonic-gate #ifdef	MIT_DES_KEYSIZE
10747c478bd9Sstevel@tonic-gate #if	MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE
10757c478bd9Sstevel@tonic-gate error(MIT_DES_KEYSIZE does not equal KRB5_MIT_DES_KEYSIZE)
10767c478bd9Sstevel@tonic-gate #endif	/* MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE */
10777c478bd9Sstevel@tonic-gate #endif	/* MIT_DES_KEYSIZE */
10787c478bd9Sstevel@tonic-gate 
10797c478bd9Sstevel@tonic-gate #ifndef _KERNEL
10807c478bd9Sstevel@tonic-gate /* Solaris Kerberos: only define PROVIDE_DES3_CBC_SHA if the following are
10817c478bd9Sstevel@tonic-gate  * defined.
10827c478bd9Sstevel@tonic-gate  */
10837c478bd9Sstevel@tonic-gate #define PROVIDE_DES3_CBC_SHA 1
10847c478bd9Sstevel@tonic-gate #define PROVIDE_NIST_SHA 1
10857c478bd9Sstevel@tonic-gate 
10867c478bd9Sstevel@tonic-gate #endif /* !_KERNEL */
10877c478bd9Sstevel@tonic-gate 
10887c478bd9Sstevel@tonic-gate /*
10897c478bd9Sstevel@tonic-gate  * Begin "preauth.h"
10907c478bd9Sstevel@tonic-gate  *
10917c478bd9Sstevel@tonic-gate  * (Originally written by Glen Machin at Sandia Labs.)
10927c478bd9Sstevel@tonic-gate  */
10937c478bd9Sstevel@tonic-gate /*
1094159d09a2SMark Phalan  * Sandia National Laboratories also makes no representations about the
1095159d09a2SMark Phalan  * suitability of the modifications, or additions to this software for
10967c478bd9Sstevel@tonic-gate  * any purpose.  It is provided "as is" without express or implied warranty.
1097159d09a2SMark Phalan  *
10987c478bd9Sstevel@tonic-gate  */
10997c478bd9Sstevel@tonic-gate #ifndef KRB5_PREAUTH__
11007c478bd9Sstevel@tonic-gate #define KRB5_PREAUTH__
11017c478bd9Sstevel@tonic-gate 
1102159d09a2SMark Phalan #include <preauth_plugin.h>
1103159d09a2SMark Phalan 
1104159d09a2SMark Phalan #define CLIENT_ROCK_MAGIC 0x4352434b
1105159d09a2SMark Phalan /* This structure is passed into the client preauth functions and passed
1106159d09a2SMark Phalan  * back to the "get_data_proc" function so that it can locate the
1107159d09a2SMark Phalan  * requested information.  It is opaque to the plugin code and can be
1108159d09a2SMark Phalan  * expanded in the future as new types of requests are defined which
1109159d09a2SMark Phalan  * may require other things to be passed through. */
1110159d09a2SMark Phalan typedef struct _krb5_preauth_client_rock {
1111159d09a2SMark Phalan 	krb5_magic	magic;
1112159d09a2SMark Phalan 	krb5_kdc_rep	*as_reply;
1113159d09a2SMark Phalan } krb5_preauth_client_rock;
1114159d09a2SMark Phalan 
1115159d09a2SMark Phalan /* This structure lets us keep track of all of the modules which are loaded,
1116159d09a2SMark Phalan  * turning the list of modules and their lists of implemented preauth types
1117159d09a2SMark Phalan  * into a single list which we can walk easily. */
1118159d09a2SMark Phalan typedef struct _krb5_preauth_context {
1119159d09a2SMark Phalan     int n_modules;
1120159d09a2SMark Phalan     struct _krb5_preauth_context_module {
1121159d09a2SMark Phalan 	/* Which of the possibly more than one preauth types which the
1122159d09a2SMark Phalan 	 * module supports we're using at this point in the list. */
1123159d09a2SMark Phalan 	krb5_preauthtype pa_type;
1124159d09a2SMark Phalan 	/* Encryption types which the client claims to support -- we
1125159d09a2SMark Phalan 	 * copy them directly into the krb5_kdc_req structure during
1126159d09a2SMark Phalan 	 * krb5_preauth_prepare_request(). */
1127159d09a2SMark Phalan 	krb5_enctype *enctypes;
1128159d09a2SMark Phalan 	/* The plugin's per-plugin context and a function to clear it. */
1129159d09a2SMark Phalan 	void *plugin_context;
1130159d09a2SMark Phalan 	preauth_client_plugin_fini_proc client_fini;
1131159d09a2SMark Phalan 	/* The module's table, and some of its members, copied here for
1132159d09a2SMark Phalan 	 * convenience when we populated the list. */
1133159d09a2SMark Phalan 	struct krb5plugin_preauth_client_ftable_v1 *ftable;
1134159d09a2SMark Phalan 	const char *name;
1135159d09a2SMark Phalan 	int flags, use_count;
1136159d09a2SMark Phalan 	preauth_client_process_proc client_process;
1137159d09a2SMark Phalan 	preauth_client_tryagain_proc client_tryagain;
1138159d09a2SMark Phalan 	preauth_client_supply_gic_opts_proc client_supply_gic_opts;
1139159d09a2SMark Phalan 	preauth_client_request_init_proc client_req_init;
1140159d09a2SMark Phalan 	preauth_client_request_fini_proc client_req_fini;
1141159d09a2SMark Phalan 	/* The per-request context which the client_req_init() function
1142159d09a2SMark Phalan 	 * might allocate, which we'll need to clean up later by
1143159d09a2SMark Phalan 	 * calling the client_req_fini() function. */
1144159d09a2SMark Phalan 	void *request_context;
1145159d09a2SMark Phalan 	/* A pointer to the request_context pointer.  All modules within
1146159d09a2SMark Phalan 	 * a plugin will point at the request_context of the first
1147159d09a2SMark Phalan 	 * module within the plugin. */
1148159d09a2SMark Phalan 	void **request_context_pp;
1149159d09a2SMark Phalan     } *modules;
1150159d09a2SMark Phalan } krb5_preauth_context;
1151159d09a2SMark Phalan 
11527c478bd9Sstevel@tonic-gate typedef struct _krb5_pa_enc_ts {
11537c478bd9Sstevel@tonic-gate     krb5_timestamp	patimestamp;
11547c478bd9Sstevel@tonic-gate     krb5_int32		pausec;
11557c478bd9Sstevel@tonic-gate } krb5_pa_enc_ts;
11567c478bd9Sstevel@tonic-gate 
1157*ba7b222eSGlenn Barry typedef struct _krb5_pa_for_user {
1158*ba7b222eSGlenn Barry     krb5_principal      user;
1159*ba7b222eSGlenn Barry     krb5_checksum       cksum;
1160*ba7b222eSGlenn Barry     krb5_data           auth_package;
1161*ba7b222eSGlenn Barry } krb5_pa_for_user;
1162*ba7b222eSGlenn Barry 
1163*ba7b222eSGlenn Barry enum {
1164*ba7b222eSGlenn Barry   KRB5_FAST_ARMOR_AP_REQUEST = 0x1
1165*ba7b222eSGlenn Barry };
1166*ba7b222eSGlenn Barry 
1167*ba7b222eSGlenn Barry typedef struct _krb5_fast_armor {
1168*ba7b222eSGlenn Barry     krb5_int32 armor_type;
1169*ba7b222eSGlenn Barry     krb5_data armor_value;
1170*ba7b222eSGlenn Barry } krb5_fast_armor;
1171*ba7b222eSGlenn Barry typedef struct _krb5_fast_armored_req {
1172*ba7b222eSGlenn Barry     krb5_magic magic;
1173*ba7b222eSGlenn Barry     krb5_fast_armor *armor;
1174*ba7b222eSGlenn Barry     krb5_checksum req_checksum;
1175*ba7b222eSGlenn Barry     krb5_enc_data enc_part;
1176*ba7b222eSGlenn Barry } krb5_fast_armored_req;
1177*ba7b222eSGlenn Barry 
1178*ba7b222eSGlenn Barry typedef struct _krb5_fast_req {
1179*ba7b222eSGlenn Barry     krb5_magic magic;
1180*ba7b222eSGlenn Barry     krb5_flags fast_options;
1181*ba7b222eSGlenn Barry     /* padata from req_body is used*/
1182*ba7b222eSGlenn Barry    krb5_kdc_req *req_body;
1183*ba7b222eSGlenn Barry } krb5_fast_req;
1184*ba7b222eSGlenn Barry 
1185*ba7b222eSGlenn Barry 
1186*ba7b222eSGlenn Barry /* Bits 0-15 are critical in fast options.*/
1187*ba7b222eSGlenn Barry #define UNSUPPORTED_CRITICAL_FAST_OPTIONS 0x00ff
1188*ba7b222eSGlenn Barry #define KRB5_FAST_OPTION_HIDE_CLIENT_NAMES 0x01
1189*ba7b222eSGlenn Barry 
1190*ba7b222eSGlenn Barry typedef struct _krb5_fast_finished {
1191*ba7b222eSGlenn Barry     krb5_timestamp timestamp;
1192*ba7b222eSGlenn Barry     krb5_int32 usec;
1193*ba7b222eSGlenn Barry     krb5_principal client;
1194*ba7b222eSGlenn Barry     krb5_checksum ticket_checksum;
1195*ba7b222eSGlenn Barry } krb5_fast_finished;
1196*ba7b222eSGlenn Barry 
1197*ba7b222eSGlenn Barry typedef struct _krb5_fast_response {
1198*ba7b222eSGlenn Barry     krb5_magic magic;
1199*ba7b222eSGlenn Barry     krb5_pa_data **padata;
1200*ba7b222eSGlenn Barry     krb5_keyblock *strengthen_key;
1201*ba7b222eSGlenn Barry     krb5_fast_finished *finished;
1202*ba7b222eSGlenn Barry     krb5_int32 nonce;
1203*ba7b222eSGlenn Barry } krb5_fast_response;
1204*ba7b222eSGlenn Barry 
12057c478bd9Sstevel@tonic-gate typedef krb5_error_code (*krb5_preauth_obtain_proc)
12067c478bd9Sstevel@tonic-gate     (krb5_context,
1207159d09a2SMark Phalan 		    krb5_pa_data *,
1208159d09a2SMark Phalan 		    krb5_etype_info,
1209159d09a2SMark Phalan 		    krb5_keyblock *,
1210159d09a2SMark Phalan 		    krb5_error_code ( * )(krb5_context,
1211159d09a2SMark Phalan 					  const krb5_enctype,
1212159d09a2SMark Phalan 					  krb5_data *,
1213159d09a2SMark Phalan 					  krb5_const_pointer,
1214159d09a2SMark Phalan 					  krb5_keyblock **),
1215159d09a2SMark Phalan 		    krb5_const_pointer,
1216159d09a2SMark Phalan 		    krb5_creds *,
1217159d09a2SMark Phalan 		    krb5_kdc_req *,
1218159d09a2SMark Phalan 		    krb5_pa_data **);
12197c478bd9Sstevel@tonic-gate 
12207c478bd9Sstevel@tonic-gate typedef krb5_error_code (*krb5_preauth_process_proc)
12217c478bd9Sstevel@tonic-gate     (krb5_context,
1222159d09a2SMark Phalan 		    krb5_pa_data *,
1223159d09a2SMark Phalan 		    krb5_kdc_req *,
1224159d09a2SMark Phalan 		    krb5_kdc_rep *,
1225159d09a2SMark Phalan 		    krb5_error_code ( * )(krb5_context,
1226159d09a2SMark Phalan 					  const krb5_enctype,
1227159d09a2SMark Phalan 					  krb5_data *,
1228159d09a2SMark Phalan 					  krb5_const_pointer,
1229159d09a2SMark Phalan 					  krb5_keyblock **),
1230159d09a2SMark Phalan 		    krb5_const_pointer,
1231159d09a2SMark Phalan 		    krb5_error_code ( * )(krb5_context,
1232159d09a2SMark Phalan 					  const krb5_keyblock *,
1233159d09a2SMark Phalan 					  krb5_const_pointer,
1234159d09a2SMark Phalan 					  krb5_kdc_rep * ),
1235159d09a2SMark Phalan 		    krb5_keyblock **,
1236159d09a2SMark Phalan 		    krb5_creds *,
1237159d09a2SMark Phalan 		    krb5_int32 *,
1238159d09a2SMark Phalan 		    krb5_int32 *);
12397c478bd9Sstevel@tonic-gate 
12407c478bd9Sstevel@tonic-gate typedef struct _krb5_preauth_ops {
12417c478bd9Sstevel@tonic-gate     krb5_magic magic;
12427c478bd9Sstevel@tonic-gate     int     type;
12437c478bd9Sstevel@tonic-gate     int	flags;
12447c478bd9Sstevel@tonic-gate     krb5_preauth_obtain_proc	obtain;
12457c478bd9Sstevel@tonic-gate     krb5_preauth_process_proc	process;
12467c478bd9Sstevel@tonic-gate } krb5_preauth_ops;
12477c478bd9Sstevel@tonic-gate 
1248159d09a2SMark Phalan 
1249159d09a2SMark Phalan krb5_error_code krb5_obtain_padata
1250159d09a2SMark Phalan     	(krb5_context,
1251159d09a2SMark Phalan 		krb5_pa_data **,
1252159d09a2SMark Phalan 		krb5_error_code ( * )(krb5_context,
1253159d09a2SMark Phalan 						      const krb5_enctype,
1254159d09a2SMark Phalan 						      krb5_data *,
1255159d09a2SMark Phalan 						      krb5_const_pointer,
1256159d09a2SMark Phalan 						      krb5_keyblock **),
1257159d09a2SMark Phalan 		krb5_const_pointer,
1258159d09a2SMark Phalan 		krb5_creds *,
1259159d09a2SMark Phalan 		krb5_kdc_req *);
1260159d09a2SMark Phalan 
1261159d09a2SMark Phalan krb5_error_code krb5_process_padata
1262159d09a2SMark Phalan 	(krb5_context,
1263159d09a2SMark Phalan 		krb5_kdc_req *,
1264159d09a2SMark Phalan 		krb5_kdc_rep *,
1265159d09a2SMark Phalan 		krb5_error_code ( * )(krb5_context,
1266159d09a2SMark Phalan 						      const krb5_enctype,
1267159d09a2SMark Phalan 						      krb5_data *,
1268159d09a2SMark Phalan 						      krb5_const_pointer,
1269159d09a2SMark Phalan 						      krb5_keyblock **),
1270159d09a2SMark Phalan 		krb5_const_pointer,
1271159d09a2SMark Phalan 		krb5_error_code ( * )(krb5_context,
1272159d09a2SMark Phalan 						      const krb5_keyblock *,
1273159d09a2SMark Phalan 						      krb5_const_pointer,
1274159d09a2SMark Phalan 						      krb5_kdc_rep * ),
1275159d09a2SMark Phalan 		krb5_keyblock **,
1276159d09a2SMark Phalan 		krb5_creds *,
1277159d09a2SMark Phalan 		krb5_int32 *);
1278159d09a2SMark Phalan 
12797c478bd9Sstevel@tonic-gate void krb5_free_etype_info (krb5_context, krb5_etype_info);
12807c478bd9Sstevel@tonic-gate 
12817c478bd9Sstevel@tonic-gate /*
12827c478bd9Sstevel@tonic-gate  * Preauthentication property flags
12837c478bd9Sstevel@tonic-gate  */
12847c478bd9Sstevel@tonic-gate #define KRB5_PREAUTH_FLAGS_ENCRYPT	0x00000001
12857c478bd9Sstevel@tonic-gate #define KRB5_PREAUTH_FLAGS_HARDWARE	0x00000002
12867c478bd9Sstevel@tonic-gate 
12877c478bd9Sstevel@tonic-gate #endif /* KRB5_PREAUTH__ */
12887c478bd9Sstevel@tonic-gate /*
12897c478bd9Sstevel@tonic-gate  * End "preauth.h"
12907c478bd9Sstevel@tonic-gate  */
12917c478bd9Sstevel@tonic-gate 
1292159d09a2SMark Phalan /*
1293159d09a2SMark Phalan  * Extending the krb5_get_init_creds_opt structure.  The original
1294159d09a2SMark Phalan  * krb5_get_init_creds_opt structure is defined publicly.  The
1295159d09a2SMark Phalan  * new extended version is private.  The original interface
1296159d09a2SMark Phalan  * assumed a pre-allocated structure which was passed to
1297159d09a2SMark Phalan  * krb5_get_init_creds_init().  The new interface assumes that
1298159d09a2SMark Phalan  * the caller will call krb5_get_init_creds_alloc() and
1299159d09a2SMark Phalan  * krb5_get_init_creds_free().
1300159d09a2SMark Phalan  *
1301159d09a2SMark Phalan  * Callers MUST NOT call krb5_get_init_creds_init() after allocating an
1302159d09a2SMark Phalan  * opts structure using krb5_get_init_creds_alloc().  To do so will
1303159d09a2SMark Phalan  * introduce memory leaks.  Unfortunately, there is no way to enforce
1304159d09a2SMark Phalan  * this behavior.
1305159d09a2SMark Phalan  *
1306159d09a2SMark Phalan  * Two private flags are added for backward compatibility.
1307159d09a2SMark Phalan  * KRB5_GET_INIT_CREDS_OPT_EXTENDED says that the structure was allocated
1308159d09a2SMark Phalan  * with the new krb5_get_init_creds_opt_alloc() function.
1309159d09a2SMark Phalan  * KRB5_GET_INIT_CREDS_OPT_SHADOWED is set to indicate that the extended
1310159d09a2SMark Phalan  * structure is a shadow copy of an original krb5_get_init_creds_opt
1311159d09a2SMark Phalan  * structure.
1312159d09a2SMark Phalan  * If KRB5_GET_INIT_CREDS_OPT_SHADOWED is set after a call to
1313159d09a2SMark Phalan  * krb5int_gic_opt_to_opte(), the resulting extended structure should be
1314159d09a2SMark Phalan  * freed (using krb5_get_init_creds_free).  Otherwise, the original
1315159d09a2SMark Phalan  * structure was already extended and there is no need to free it.
1316159d09a2SMark Phalan  */
1317159d09a2SMark Phalan 
1318159d09a2SMark Phalan #define KRB5_GET_INIT_CREDS_OPT_EXTENDED 0x80000000
1319159d09a2SMark Phalan #define KRB5_GET_INIT_CREDS_OPT_SHADOWED 0x40000000
1320159d09a2SMark Phalan 
1321159d09a2SMark Phalan #define krb5_gic_opt_is_extended(s) \
1322159d09a2SMark Phalan     ((s) && ((s)->flags & KRB5_GET_INIT_CREDS_OPT_EXTENDED) ? 1 : 0)
1323159d09a2SMark Phalan #define krb5_gic_opt_is_shadowed(s) \
1324159d09a2SMark Phalan     ((s) && ((s)->flags & KRB5_GET_INIT_CREDS_OPT_SHADOWED) ? 1 : 0)
1325159d09a2SMark Phalan 
1326159d09a2SMark Phalan 
1327159d09a2SMark Phalan typedef struct _krb5_gic_opt_private {
1328159d09a2SMark Phalan     int num_preauth_data;
1329159d09a2SMark Phalan     krb5_gic_opt_pa_data *preauth_data;
1330159d09a2SMark Phalan } krb5_gic_opt_private;
1331159d09a2SMark Phalan 
1332159d09a2SMark Phalan typedef struct _krb5_gic_opt_ext {
1333159d09a2SMark Phalan     krb5_flags flags;
1334159d09a2SMark Phalan     krb5_deltat tkt_life;
1335159d09a2SMark Phalan     krb5_deltat renew_life;
1336159d09a2SMark Phalan     int forwardable;
1337159d09a2SMark Phalan     int proxiable;
1338159d09a2SMark Phalan     krb5_enctype *etype_list;
1339159d09a2SMark Phalan     int etype_list_length;
1340159d09a2SMark Phalan     krb5_address **address_list;
1341159d09a2SMark Phalan     krb5_preauthtype *preauth_list;
1342159d09a2SMark Phalan     int preauth_list_length;
1343159d09a2SMark Phalan     krb5_data *salt;
1344159d09a2SMark Phalan     /*
1345159d09a2SMark Phalan      * Do not change anything above this point in this structure.
1346159d09a2SMark Phalan      * It is identical to the public krb5_get_init_creds_opt structure.
1347159d09a2SMark Phalan      * New members must be added below.
1348159d09a2SMark Phalan      */
1349159d09a2SMark Phalan     krb5_gic_opt_private *opt_private;
1350159d09a2SMark Phalan } krb5_gic_opt_ext;
1351159d09a2SMark Phalan 
1352159d09a2SMark Phalan krb5_error_code
1353159d09a2SMark Phalan krb5int_gic_opt_to_opte(krb5_context context,
1354159d09a2SMark Phalan                         krb5_get_init_creds_opt *opt,
1355159d09a2SMark Phalan                         krb5_gic_opt_ext **opte,
1356159d09a2SMark Phalan                         unsigned int force,
1357159d09a2SMark Phalan                         const char *where);
1358159d09a2SMark Phalan 
13597c478bd9Sstevel@tonic-gate krb5_error_code
13607c478bd9Sstevel@tonic-gate krb5int_copy_data_contents (krb5_context, const krb5_data *, krb5_data *);
13617c478bd9Sstevel@tonic-gate 
13627c478bd9Sstevel@tonic-gate #ifndef _KERNEL /* needed for lib/krb5/krb/ */
13637c478bd9Sstevel@tonic-gate typedef krb5_error_code (*krb5_gic_get_as_key_fct)
13647c478bd9Sstevel@tonic-gate     (krb5_context,
1365159d09a2SMark Phalan 		     krb5_principal,
1366159d09a2SMark Phalan 		     krb5_enctype,
1367159d09a2SMark Phalan 		     krb5_prompter_fct,
1368159d09a2SMark Phalan 		     void *prompter_data,
1369159d09a2SMark Phalan 		     krb5_data *salt,
13707c478bd9Sstevel@tonic-gate      krb5_data *s2kparams,
1371159d09a2SMark Phalan 		     krb5_keyblock *as_key,
1372159d09a2SMark Phalan 		     void *gak_data);
13737c478bd9Sstevel@tonic-gate 
13747c478bd9Sstevel@tonic-gate krb5_error_code KRB5_CALLCONV
13757c478bd9Sstevel@tonic-gate krb5_get_init_creds
13767c478bd9Sstevel@tonic-gate (krb5_context context,
1377159d09a2SMark Phalan 		krb5_creds *creds,
1378159d09a2SMark Phalan 		krb5_principal client,
1379159d09a2SMark Phalan 		krb5_prompter_fct prompter,
1380159d09a2SMark Phalan 		void *prompter_data,
1381159d09a2SMark Phalan 		krb5_deltat start_time,
1382159d09a2SMark Phalan 		char *in_tkt_service,
1383159d09a2SMark Phalan 		krb5_gic_opt_ext *gic_options,
1384159d09a2SMark Phalan 		krb5_gic_get_as_key_fct gak,
1385159d09a2SMark Phalan 		void *gak_data,
1386159d09a2SMark Phalan 		int *master,
1387159d09a2SMark Phalan 		krb5_kdc_rep **as_reply);
1388159d09a2SMark Phalan 
1389159d09a2SMark Phalan krb5_error_code krb5int_populate_gic_opt (
1390159d09a2SMark Phalan     krb5_context, krb5_gic_opt_ext **,
1391159d09a2SMark Phalan     krb5_flags options, krb5_address * const *addrs, krb5_enctype *ktypes,
1392159d09a2SMark Phalan     krb5_preauthtype *pre_auth_types, krb5_creds *creds);
1393159d09a2SMark Phalan 
1394159d09a2SMark Phalan 
1395159d09a2SMark Phalan krb5_error_code KRB5_CALLCONV krb5_do_preauth
1396159d09a2SMark Phalan 	(krb5_context context,
1397159d09a2SMark Phalan 	 krb5_kdc_req *request,
1398159d09a2SMark Phalan 	 krb5_data *encoded_request_body,
1399159d09a2SMark Phalan 	 krb5_data *encoded_previous_request,
1400159d09a2SMark Phalan 	 krb5_pa_data **in_padata, krb5_pa_data ***out_padata,
1401159d09a2SMark Phalan 	 krb5_data *salt, krb5_data *s2kparams,
1402159d09a2SMark Phalan 	 krb5_enctype *etype, krb5_keyblock *as_key,
1403159d09a2SMark Phalan 	 krb5_prompter_fct prompter, void *prompter_data,
1404159d09a2SMark Phalan 	 krb5_gic_get_as_key_fct gak_fct, void *gak_data,
1405159d09a2SMark Phalan 	 krb5_preauth_client_rock *get_data_rock,
1406159d09a2SMark Phalan 	 krb5_gic_opt_ext *opte);
1407159d09a2SMark Phalan krb5_error_code KRB5_CALLCONV krb5_do_preauth_tryagain
1408159d09a2SMark Phalan 	(krb5_context context,
1409159d09a2SMark Phalan 	 krb5_kdc_req *request,
1410159d09a2SMark Phalan 	 krb5_data *encoded_request_body,
1411159d09a2SMark Phalan 	 krb5_data *encoded_previous_request,
1412159d09a2SMark Phalan 	 krb5_pa_data **in_padata, krb5_pa_data ***out_padata,
1413159d09a2SMark Phalan 	 krb5_error *err_reply,
1414159d09a2SMark Phalan 	 krb5_data *salt, krb5_data *s2kparams,
1415159d09a2SMark Phalan 	 krb5_enctype *etype, krb5_keyblock *as_key,
1416159d09a2SMark Phalan 	 krb5_prompter_fct prompter, void *prompter_data,
1417159d09a2SMark Phalan 	 krb5_gic_get_as_key_fct gak_fct, void *gak_data,
1418159d09a2SMark Phalan 	 krb5_preauth_client_rock *get_data_rock,
1419159d09a2SMark Phalan 	 krb5_gic_opt_ext *opte);
1420159d09a2SMark Phalan void KRB5_CALLCONV krb5_init_preauth_context
1421159d09a2SMark Phalan 	(krb5_context);
1422159d09a2SMark Phalan void KRB5_CALLCONV krb5_free_preauth_context
1423159d09a2SMark Phalan 	(krb5_context);
1424159d09a2SMark Phalan void KRB5_CALLCONV krb5_clear_preauth_context_use_counts
1425159d09a2SMark Phalan 	(krb5_context);
1426159d09a2SMark Phalan void KRB5_CALLCONV krb5_preauth_prepare_request
1427159d09a2SMark Phalan 	(krb5_context, krb5_gic_opt_ext *, krb5_kdc_req *);
1428159d09a2SMark Phalan void KRB5_CALLCONV krb5_preauth_request_context_init
1429159d09a2SMark Phalan 	(krb5_context);
1430159d09a2SMark Phalan void KRB5_CALLCONV krb5_preauth_request_context_fini
1431159d09a2SMark Phalan 	(krb5_context);
14327c478bd9Sstevel@tonic-gate 
1433159d09a2SMark Phalan #endif /* _KERNEL */
14347c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_challenge
14357c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_challenge * );
14367c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_challenge_2
14377c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_challenge_2 * );
14387c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_challenge_2_body
14397c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_challenge_2_body *);
14407c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_response
14417c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_response * );
14427c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_response_2
14437c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_response_2 * );
14447c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_predicted_sam_response
14457c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_predicted_sam_response * );
14467c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_enc_sam_response_enc
14477c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_enc_sam_response_enc * );
14487c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_enc_sam_response_enc_2
14497c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_enc_sam_response_enc_2 * );
14507c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_challenge_contents
14517c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_challenge * );
14527c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_challenge_2_contents
14537c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_challenge_2 * );
14547c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_challenge_2_body_contents
14557c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_challenge_2_body * );
14567c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_response_contents
14577c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_response * );
14587c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_sam_response_2_contents
14597c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_sam_response_2 *);
14607c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_predicted_sam_response_contents
14617c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_predicted_sam_response * );
14627c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_enc_sam_response_enc_contents
14637c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_enc_sam_response_enc * );
14647c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_enc_sam_response_enc_2_contents
14657c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_enc_sam_response_enc_2 * );
1466159d09a2SMark Phalan 
14677c478bd9Sstevel@tonic-gate void KRB5_CALLCONV krb5_free_pa_enc_ts
14687c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_pa_enc_ts *);
14697c478bd9Sstevel@tonic-gate 
14707c478bd9Sstevel@tonic-gate /* #include "krb5/wordsize.h" -- comes in through base-defs.h. */
1471505d05c7Sgtb #ifndef	_KERNEL
1472505d05c7Sgtb #include "com_err.h"
147354925bf6Swillf #include <krb5/k5-plugin.h>
1474505d05c7Sgtb #endif /* _KERNEL */
1475505d05c7Sgtb 
14767c478bd9Sstevel@tonic-gate /*
14777c478bd9Sstevel@tonic-gate  * Solaris Kerberos: moved from sendto_kdc.c so other code can reference
14787c478bd9Sstevel@tonic-gate  */
14797c478bd9Sstevel@tonic-gate #define	DEFAULT_UDP_PREF_LIMIT   1465
14807c478bd9Sstevel@tonic-gate 
14817c478bd9Sstevel@tonic-gate #ifndef	_KERNEL
14827c478bd9Sstevel@tonic-gate #include "profile.h"
14837c478bd9Sstevel@tonic-gate #include <strings.h>
14847c478bd9Sstevel@tonic-gate #endif /* _KERNEL */
14857c478bd9Sstevel@tonic-gate 
14867c478bd9Sstevel@tonic-gate #define KEY_CHANGED(k1, k2) \
14877c478bd9Sstevel@tonic-gate (k1 == NULL || \
14887c478bd9Sstevel@tonic-gate  k1 != k2 || \
14897c478bd9Sstevel@tonic-gate  k1->enctype != k2->enctype || \
14907c478bd9Sstevel@tonic-gate  k1->length != k2->length || \
14917c478bd9Sstevel@tonic-gate  bcmp(k1->contents, k2->contents, k1->length))
14927c478bd9Sstevel@tonic-gate 
14937c478bd9Sstevel@tonic-gate #ifndef _KERNEL
14947c478bd9Sstevel@tonic-gate typedef struct _arcfour_ctx {
14957c478bd9Sstevel@tonic-gate 	CK_SESSION_HANDLE eSession; /* encrypt session handle */
14967c478bd9Sstevel@tonic-gate 	CK_SESSION_HANDLE dSession; /* decrypt session handle */
14977c478bd9Sstevel@tonic-gate 	CK_OBJECT_HANDLE  eKey; /* encrypt key object */
14987c478bd9Sstevel@tonic-gate 	CK_OBJECT_HANDLE  dKey; /* decrype key object */
14997c478bd9Sstevel@tonic-gate 	uchar_t           initialized;
15007c478bd9Sstevel@tonic-gate }arcfour_ctx_rec;
15017c478bd9Sstevel@tonic-gate 
15027c478bd9Sstevel@tonic-gate #endif /* !_KERNEL */
15037c478bd9Sstevel@tonic-gate 
15047c478bd9Sstevel@tonic-gate struct _krb5_context {
15057c478bd9Sstevel@tonic-gate 	krb5_magic	magic;
15067c478bd9Sstevel@tonic-gate 	krb5_enctype	*in_tkt_ktypes;
1507159d09a2SMark Phalan 	unsigned int	in_tkt_ktype_count;
15087c478bd9Sstevel@tonic-gate 	krb5_enctype	*tgs_ktypes;
1509159d09a2SMark Phalan 	unsigned int	tgs_ktype_count;
1510159d09a2SMark Phalan 	/* This used to be a void*, but since we always allocate them
1511159d09a2SMark Phalan 	   together (though in different source files), and the types
1512159d09a2SMark Phalan 	   are declared in the same header, might as well just combine
1513159d09a2SMark Phalan 	   them.
1514159d09a2SMark Phalan 
1515159d09a2SMark Phalan 	   The array[1] is so the existing code treating the field as
1516159d09a2SMark Phalan 	   a pointer will still work.  For cleanliness, it should
1517159d09a2SMark Phalan 	   eventually get changed to a single element instead of an
1518159d09a2SMark Phalan 	   array.  */
1519159d09a2SMark Phalan 	struct _krb5_os_context	os_context[1];
15207c478bd9Sstevel@tonic-gate 	char		*default_realm;
15217c478bd9Sstevel@tonic-gate 	int		ser_ctx_count;
15227c478bd9Sstevel@tonic-gate 	krb5_boolean	profile_secure;
15237c478bd9Sstevel@tonic-gate 	void	      	*ser_ctx;
15247c478bd9Sstevel@tonic-gate #ifndef _KERNEL
15257c478bd9Sstevel@tonic-gate 	profile_t	profile;
15267c478bd9Sstevel@tonic-gate 	void		*db_context;
15277c478bd9Sstevel@tonic-gate 	void		*kdblog_context;
15287c478bd9Sstevel@tonic-gate 	/* allowable clock skew */
15297c478bd9Sstevel@tonic-gate 	krb5_deltat 	clockskew;
15307c478bd9Sstevel@tonic-gate 	krb5_cksumtype	kdc_req_sumtype;
15317c478bd9Sstevel@tonic-gate 	krb5_cksumtype	default_ap_req_sumtype;
15327c478bd9Sstevel@tonic-gate 	krb5_cksumtype	default_safe_sumtype;
15337c478bd9Sstevel@tonic-gate 	krb5_flags 	kdc_default_options;
15347c478bd9Sstevel@tonic-gate 	krb5_flags	library_options;
15357c478bd9Sstevel@tonic-gate 	int		fcc_default_format;
15367c478bd9Sstevel@tonic-gate 	int		scc_default_format;
15377c478bd9Sstevel@tonic-gate 	krb5_prompt_type *prompt_types;
15387c478bd9Sstevel@tonic-gate 	/* Message size above which we'll try TCP first in send-to-kdc
15397c478bd9Sstevel@tonic-gate 	   type code.  Aside from the 2**16 size limit, we put no
15407c478bd9Sstevel@tonic-gate 	   absolute limit on the UDP packet size.  */
15417c478bd9Sstevel@tonic-gate 	int		udp_pref_limit;
15427c478bd9Sstevel@tonic-gate 
15437c478bd9Sstevel@tonic-gate 	/* This is the tgs_ktypes list as read from the profile, or
15447c478bd9Sstevel@tonic-gate 	   set to compiled-in defaults.	 The application code cannot
15457c478bd9Sstevel@tonic-gate 	   override it.	 This is used for session keys for
15467c478bd9Sstevel@tonic-gate 	   intermediate ticket-granting tickets used to acquire the
15477c478bd9Sstevel@tonic-gate 	   requested ticket (the session key of which may be
15487c478bd9Sstevel@tonic-gate 	   constrained by tgs_ktypes above).  */
15497c478bd9Sstevel@tonic-gate 	krb5_enctype	*conf_tgs_ktypes;
15507c478bd9Sstevel@tonic-gate 	int		conf_tgs_ktypes_count;
15517c478bd9Sstevel@tonic-gate 
15527c478bd9Sstevel@tonic-gate 	/* Use the _configured version?	 */
15537c478bd9Sstevel@tonic-gate 	krb5_boolean	use_conf_ktypes;
1554159d09a2SMark Phalan 
15557c478bd9Sstevel@tonic-gate #ifdef KRB5_DNS_LOOKUP
1556159d09a2SMark Phalan         krb5_boolean    profile_in_memory;
15577c478bd9Sstevel@tonic-gate #endif /* KRB5_DNS_LOOKUP */
15587c478bd9Sstevel@tonic-gate 
1559159d09a2SMark Phalan     /* locate_kdc module stuff */
1560159d09a2SMark Phalan     struct plugin_dir_handle libkrb5_plugins;
1561159d09a2SMark Phalan     struct krb5plugin_service_locate_ftable *vtbl;
1562159d09a2SMark Phalan     void (**locate_fptrs)(void);
1563159d09a2SMark Phalan 
15647c478bd9Sstevel@tonic-gate 	pid_t pid;  /* fork safety: PID of process that did last PKCS11 init */
15657c478bd9Sstevel@tonic-gate 
15667c478bd9Sstevel@tonic-gate 	/* Solaris Kerberos: handles for PKCS#11 crypto */
15677c478bd9Sstevel@tonic-gate 	/*
15687c478bd9Sstevel@tonic-gate 	 * Warning, do not access hSession directly as this is not fork() safe.
15697c478bd9Sstevel@tonic-gate 	 * Instead use the krb_ctx_hSession() macro below.
15707c478bd9Sstevel@tonic-gate 	 */
15717c478bd9Sstevel@tonic-gate 	CK_SESSION_HANDLE hSession;
15727c478bd9Sstevel@tonic-gate 	int		cryptoki_initialized;
15737c478bd9Sstevel@tonic-gate 
15747c478bd9Sstevel@tonic-gate 	/* arcfour_ctx: used only for rcmd stuff so no fork safety issues apply */
15757c478bd9Sstevel@tonic-gate 	arcfour_ctx_rec arcfour_ctx;
157654925bf6Swillf 
1577159d09a2SMark Phalan 	/* preauth module stuff */
1578159d09a2SMark Phalan 	struct plugin_dir_handle preauth_plugins;
1579159d09a2SMark Phalan 	krb5_preauth_context *preauth_context;
1580159d09a2SMark Phalan 
158154925bf6Swillf 	/* error detail info */
158254925bf6Swillf 	struct errinfo err;
15837c478bd9Sstevel@tonic-gate #else /* ! KERNEL */
15847c478bd9Sstevel@tonic-gate 	crypto_mech_type_t kef_cipher_mt;
15857c478bd9Sstevel@tonic-gate 	crypto_mech_type_t kef_hash_mt;
15867c478bd9Sstevel@tonic-gate 	crypto_mech_type_t kef_cksum_mt;
15877c478bd9Sstevel@tonic-gate #endif /* ! KERNEL */
15887c478bd9Sstevel@tonic-gate };
15897c478bd9Sstevel@tonic-gate 
15907c478bd9Sstevel@tonic-gate #ifndef  _KERNEL
15917c478bd9Sstevel@tonic-gate extern pid_t __krb5_current_pid;
15927c478bd9Sstevel@tonic-gate 
15937c478bd9Sstevel@tonic-gate CK_SESSION_HANDLE krb5_reinit_ef_handle(krb5_context);
15947c478bd9Sstevel@tonic-gate 
15957c478bd9Sstevel@tonic-gate /*
15967c478bd9Sstevel@tonic-gate  * fork safety: barring the ef_init code, every other function must use the
15977c478bd9Sstevel@tonic-gate  * krb_ctx_hSession() macro to access the hSession field in a krb context.
15987c478bd9Sstevel@tonic-gate  * Note, if the pid of the krb ctx == the current global pid then it is safe to
15997c478bd9Sstevel@tonic-gate  * use the ctx hSession otherwise it needs to be re-inited before it is returned
16007c478bd9Sstevel@tonic-gate  * to the caller.
16017c478bd9Sstevel@tonic-gate  */
16027c478bd9Sstevel@tonic-gate #define krb_ctx_hSession(ctx) \
16037c478bd9Sstevel@tonic-gate     ((ctx)->pid == __krb5_current_pid) ? (ctx)->hSession : krb5_reinit_ef_handle((ctx))
16047c478bd9Sstevel@tonic-gate #endif
16057c478bd9Sstevel@tonic-gate 
16067c478bd9Sstevel@tonic-gate #define MD5_CKSUM_LENGTH 16
16077c478bd9Sstevel@tonic-gate #define RSA_MD5_CKSUM_LENGTH 16
16087c478bd9Sstevel@tonic-gate #define MD5_BLOCKSIZE 64
16097c478bd9Sstevel@tonic-gate 
16107c478bd9Sstevel@tonic-gate 
16117c478bd9Sstevel@tonic-gate /*
16127c478bd9Sstevel@tonic-gate  * Solaris Kerberos:
16137c478bd9Sstevel@tonic-gate  * This next section of prototypes and constants
16147c478bd9Sstevel@tonic-gate  * are all unique to the Solaris Kerberos implementation.
16157c478bd9Sstevel@tonic-gate  * Because Solaris uses the native encryption framework
16167c478bd9Sstevel@tonic-gate  * to provide crypto support, the following routines
16177c478bd9Sstevel@tonic-gate  * are needed to support this system.
16187c478bd9Sstevel@tonic-gate  */
16197c478bd9Sstevel@tonic-gate 
16207c478bd9Sstevel@tonic-gate /*
16217c478bd9Sstevel@tonic-gate  * Begin Solaris Crypto Prototypes
16227c478bd9Sstevel@tonic-gate  */
16237c478bd9Sstevel@tonic-gate 
16247c478bd9Sstevel@tonic-gate /*
16257c478bd9Sstevel@tonic-gate  * define constants that are used for creating the constant
16267c478bd9Sstevel@tonic-gate  * which is used to make derived keys.
16277c478bd9Sstevel@tonic-gate  */
16287c478bd9Sstevel@tonic-gate #define DK_ENCR_KEY_BYTE 0xAA
16297c478bd9Sstevel@tonic-gate #define DK_HASH_KEY_BYTE 0x55
16307c478bd9Sstevel@tonic-gate #define DK_CKSUM_KEY_BYTE 0x99
16317c478bd9Sstevel@tonic-gate 
16327c478bd9Sstevel@tonic-gate int init_derived_keydata(krb5_context, const struct krb5_enc_provider *,
16337c478bd9Sstevel@tonic-gate 			krb5_keyblock *, krb5_keyusage,
16347c478bd9Sstevel@tonic-gate 			krb5_keyblock **, krb5_keyblock **);
16357c478bd9Sstevel@tonic-gate 
16367c478bd9Sstevel@tonic-gate krb5_error_code add_derived_key(krb5_keyblock *, krb5_keyusage, uchar_t,
16377c478bd9Sstevel@tonic-gate 				krb5_keyblock *);
16387c478bd9Sstevel@tonic-gate 
16397c478bd9Sstevel@tonic-gate krb5_keyblock *find_derived_key(krb5_keyusage, uchar_t, krb5_keyblock *);
16407c478bd9Sstevel@tonic-gate krb5_keyblock *krb5_create_derived_keyblock(int);
16417c478bd9Sstevel@tonic-gate 
16427c478bd9Sstevel@tonic-gate #ifdef _KERNEL
16437c478bd9Sstevel@tonic-gate int k5_ef_hash(krb5_context, int, const krb5_data *, krb5_data *);
16447c478bd9Sstevel@tonic-gate 
16457c478bd9Sstevel@tonic-gate int k5_ef_mac(krb5_context, krb5_keyblock *, krb5_data *,
16467c478bd9Sstevel@tonic-gate         const krb5_data *, krb5_data *);
16477c478bd9Sstevel@tonic-gate 
16487c478bd9Sstevel@tonic-gate void make_kef_key(krb5_keyblock *);
16497c478bd9Sstevel@tonic-gate int init_key_kef(crypto_mech_type_t, krb5_keyblock *);
16507c478bd9Sstevel@tonic-gate int update_key_template(krb5_keyblock *);
16517c478bd9Sstevel@tonic-gate void setup_kef_keytypes();
16527c478bd9Sstevel@tonic-gate void setup_kef_cksumtypes();
16537c478bd9Sstevel@tonic-gate crypto_mech_type_t get_cipher_mech_type(krb5_context, krb5_keyblock *);
16547c478bd9Sstevel@tonic-gate crypto_mech_type_t get_hash_mech_type(krb5_context, krb5_keyblock *);
16557c478bd9Sstevel@tonic-gate 
16567c478bd9Sstevel@tonic-gate #else
16577c478bd9Sstevel@tonic-gate /*
16587c478bd9Sstevel@tonic-gate  * This structure is used to map Kerberos supported OID's,
16597c478bd9Sstevel@tonic-gate  * to PKCS11 mechanisms
16607c478bd9Sstevel@tonic-gate  */
16617c478bd9Sstevel@tonic-gate #define USE_ENCR	0x01
16627c478bd9Sstevel@tonic-gate #define	USE_HASH	0x02
16637c478bd9Sstevel@tonic-gate 
16647c478bd9Sstevel@tonic-gate typedef struct krb5_mech_2_pkcs {
16657c478bd9Sstevel@tonic-gate 	uchar_t		flags;
16667c478bd9Sstevel@tonic-gate 	CK_MECHANISM_TYPE enc_algo;
16677c478bd9Sstevel@tonic-gate 	CK_MECHANISM_TYPE hash_algo;
16687c478bd9Sstevel@tonic-gate 	CK_MECHANISM_TYPE str2key_algo;
16697c478bd9Sstevel@tonic-gate } KRB5_MECH_TO_PKCS;
16707c478bd9Sstevel@tonic-gate 
16717c478bd9Sstevel@tonic-gate #define ENC_DEFINED(x)	(((x).flags & USE_ENCR))
16727c478bd9Sstevel@tonic-gate #define HASH_DEFINED(x)	(((x).flags & USE_HASH))
16737c478bd9Sstevel@tonic-gate 
16747c478bd9Sstevel@tonic-gate extern CK_RV get_algo(krb5_enctype etype, KRB5_MECH_TO_PKCS * algos);
16757c478bd9Sstevel@tonic-gate extern CK_RV get_key_type (krb5_enctype etype, CK_KEY_TYPE * keyType);
16767c478bd9Sstevel@tonic-gate extern krb5_error_code slot_supports_krb5 (CK_SLOT_ID_PTR slotid);
16777c478bd9Sstevel@tonic-gate 
16787c478bd9Sstevel@tonic-gate krb5_error_code init_key_uef(CK_SESSION_HANDLE, krb5_keyblock *);
16797c478bd9Sstevel@tonic-gate 
16807c478bd9Sstevel@tonic-gate krb5_error_code k5_ef_hash(krb5_context, CK_MECHANISM *,
16817c478bd9Sstevel@tonic-gate 	unsigned int, const krb5_data *, krb5_data *);
16827c478bd9Sstevel@tonic-gate 
16837c478bd9Sstevel@tonic-gate krb5_error_code k5_ef_mac(krb5_context context,
16847c478bd9Sstevel@tonic-gate 	krb5_keyblock *key, krb5_data *ivec,
16857c478bd9Sstevel@tonic-gate 	krb5_const krb5_data *input, krb5_data *output);
16867c478bd9Sstevel@tonic-gate 
16877c478bd9Sstevel@tonic-gate #endif	/* !_KERNEL */
16887c478bd9Sstevel@tonic-gate 
16897c478bd9Sstevel@tonic-gate krb5_error_code
16907c478bd9Sstevel@tonic-gate derive_3des_keys(krb5_context, struct krb5_enc_provider *,
16917c478bd9Sstevel@tonic-gate                 krb5_keyblock *, krb5_keyusage,
16927c478bd9Sstevel@tonic-gate                 krb5_keyblock *, krb5_keyblock *);
16937c478bd9Sstevel@tonic-gate 
16947c478bd9Sstevel@tonic-gate /*
16957c478bd9Sstevel@tonic-gate  * End Solaris Crypto Prototypes
16967c478bd9Sstevel@tonic-gate  */
16977c478bd9Sstevel@tonic-gate 
16987c478bd9Sstevel@tonic-gate #define KRB5_LIBOPT_SYNC_KDCTIME	0x0001
16997c478bd9Sstevel@tonic-gate 
1700505d05c7Sgtb /* internal message representations */
1701505d05c7Sgtb 
1702505d05c7Sgtb typedef struct _krb5_safe {
1703505d05c7Sgtb     krb5_magic magic;
1704159d09a2SMark Phalan     krb5_data user_data;		/* user data */
1705159d09a2SMark Phalan     krb5_timestamp timestamp;		/* client time, optional */
1706159d09a2SMark Phalan     krb5_int32 usec;			/* microsecond portion of time,
1707159d09a2SMark Phalan 					   optional */
1708159d09a2SMark Phalan     krb5_ui_4 seq_number;		/* sequence #, optional */
1709159d09a2SMark Phalan     krb5_address *s_address;	/* sender address */
1710159d09a2SMark Phalan     krb5_address *r_address;	/* recipient address, optional */
1711159d09a2SMark Phalan     krb5_checksum *checksum;	/* data integrity checksum */
1712505d05c7Sgtb } krb5_safe;
1713505d05c7Sgtb 
1714505d05c7Sgtb typedef struct _krb5_priv {
1715505d05c7Sgtb     krb5_magic magic;
1716159d09a2SMark Phalan     krb5_enc_data enc_part;		/* encrypted part */
1717505d05c7Sgtb } krb5_priv;
1718505d05c7Sgtb 
1719505d05c7Sgtb typedef struct _krb5_priv_enc_part {
1720505d05c7Sgtb     krb5_magic magic;
1721159d09a2SMark Phalan     krb5_data user_data;		/* user data */
1722159d09a2SMark Phalan     krb5_timestamp timestamp;		/* client time, optional */
1723159d09a2SMark Phalan     krb5_int32 usec;			/* microsecond portion of time, opt. */
1724159d09a2SMark Phalan     krb5_ui_4 seq_number;		/* sequence #, optional */
1725159d09a2SMark Phalan     krb5_address *s_address;	/* sender address */
1726159d09a2SMark Phalan     krb5_address *r_address;	/* recipient address, optional */
1727505d05c7Sgtb } krb5_priv_enc_part;
1728505d05c7Sgtb 
1729505d05c7Sgtb void KRB5_CALLCONV krb5_free_safe
1730159d09a2SMark Phalan 	(krb5_context, krb5_safe * );
1731505d05c7Sgtb void KRB5_CALLCONV krb5_free_priv
1732159d09a2SMark Phalan 	(krb5_context, krb5_priv * );
1733505d05c7Sgtb void KRB5_CALLCONV krb5_free_priv_enc_part
1734159d09a2SMark Phalan 	(krb5_context, krb5_priv_enc_part * );
1735505d05c7Sgtb 
17367c478bd9Sstevel@tonic-gate /*
17377c478bd9Sstevel@tonic-gate  * Begin "asn1.h"
17387c478bd9Sstevel@tonic-gate  */
17397c478bd9Sstevel@tonic-gate #ifndef KRB5_ASN1__
17407c478bd9Sstevel@tonic-gate #define KRB5_ASN1__
17417c478bd9Sstevel@tonic-gate 
17427c478bd9Sstevel@tonic-gate /* ASN.1 encoding knowledge; KEEP IN SYNC WITH ASN.1 defs! */
17437c478bd9Sstevel@tonic-gate /* here we use some knowledge of ASN.1 encodings */
1744159d09a2SMark Phalan /*
17457c478bd9Sstevel@tonic-gate   Ticket is APPLICATION 1.
17467c478bd9Sstevel@tonic-gate   Authenticator is APPLICATION 2.
17477c478bd9Sstevel@tonic-gate   AS_REQ is APPLICATION 10.
17487c478bd9Sstevel@tonic-gate   AS_REP is APPLICATION 11.
17497c478bd9Sstevel@tonic-gate   TGS_REQ is APPLICATION 12.
17507c478bd9Sstevel@tonic-gate   TGS_REP is APPLICATION 13.
17517c478bd9Sstevel@tonic-gate   AP_REQ is APPLICATION 14.
17527c478bd9Sstevel@tonic-gate   AP_REP is APPLICATION 15.
17537c478bd9Sstevel@tonic-gate   KRB_SAFE is APPLICATION 20.
17547c478bd9Sstevel@tonic-gate   KRB_PRIV is APPLICATION 21.
17557c478bd9Sstevel@tonic-gate   KRB_CRED is APPLICATION 22.
17567c478bd9Sstevel@tonic-gate   EncASRepPart is APPLICATION 25.
17577c478bd9Sstevel@tonic-gate   EncTGSRepPart is APPLICATION 26.
17587c478bd9Sstevel@tonic-gate   EncAPRepPart is APPLICATION 27.
17597c478bd9Sstevel@tonic-gate   EncKrbPrivPart is APPLICATION 28.
17607c478bd9Sstevel@tonic-gate   EncKrbCredPart is APPLICATION 29.
17617c478bd9Sstevel@tonic-gate   KRB_ERROR is APPLICATION 30.
17627c478bd9Sstevel@tonic-gate  */
17637c478bd9Sstevel@tonic-gate /* allow either constructed or primitive encoding, so check for bit 6
17647c478bd9Sstevel@tonic-gate    set or reset */
17657c478bd9Sstevel@tonic-gate #define krb5_is_krb_ticket(dat)\
17667c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x61 ||\
17677c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x41))
17687c478bd9Sstevel@tonic-gate #define krb5_is_krb_authenticator(dat)\
17697c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x62 ||\
17707c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x42))
17717c478bd9Sstevel@tonic-gate #define krb5_is_as_req(dat)\
17727c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x6a ||\
17737c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x4a))
17747c478bd9Sstevel@tonic-gate #define krb5_is_as_rep(dat)\
17757c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x6b ||\
17767c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x4b))
17777c478bd9Sstevel@tonic-gate #define krb5_is_tgs_req(dat)\
17787c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x6c ||\
17797c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x4c))
17807c478bd9Sstevel@tonic-gate #define krb5_is_tgs_rep(dat)\
17817c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x6d ||\
17827c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x4d))
17837c478bd9Sstevel@tonic-gate #define krb5_is_ap_req(dat)\
17847c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x6e ||\
17857c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x4e))
17867c478bd9Sstevel@tonic-gate #define krb5_is_ap_rep(dat)\
17877c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x6f ||\
17887c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x4f))
17897c478bd9Sstevel@tonic-gate #define krb5_is_krb_safe(dat)\
17907c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x74 ||\
17917c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x54))
17927c478bd9Sstevel@tonic-gate #define krb5_is_krb_priv(dat)\
17937c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x75 ||\
17947c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x55))
17957c478bd9Sstevel@tonic-gate #define krb5_is_krb_cred(dat)\
17967c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x76 ||\
17977c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x56))
17987c478bd9Sstevel@tonic-gate #define krb5_is_krb_enc_as_rep_part(dat)\
17997c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x79 ||\
18007c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x59))
18017c478bd9Sstevel@tonic-gate #define krb5_is_krb_enc_tgs_rep_part(dat)\
18027c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x7a ||\
18037c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x5a))
18047c478bd9Sstevel@tonic-gate #define krb5_is_krb_enc_ap_rep_part(dat)\
18057c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x7b ||\
18067c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x5b))
18077c478bd9Sstevel@tonic-gate #define krb5_is_krb_enc_krb_priv_part(dat)\
18087c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x7c ||\
18097c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x5c))
18107c478bd9Sstevel@tonic-gate #define krb5_is_krb_enc_krb_cred_part(dat)\
18117c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x7d ||\
18127c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x5d))
18137c478bd9Sstevel@tonic-gate #define krb5_is_krb_error(dat)\
18147c478bd9Sstevel@tonic-gate 	((dat) && (dat)->length && ((dat)->data[0] == 0x7e ||\
18157c478bd9Sstevel@tonic-gate 				    (dat)->data[0] == 0x5e))
18167c478bd9Sstevel@tonic-gate 
18177c478bd9Sstevel@tonic-gate /*************************************************************************
18187c478bd9Sstevel@tonic-gate  * Prototypes for krb5_encode.c
18197c478bd9Sstevel@tonic-gate  *************************************************************************/
18207c478bd9Sstevel@tonic-gate 
18217c478bd9Sstevel@tonic-gate /*
18227c478bd9Sstevel@tonic-gate    krb5_error_code encode_krb5_structure(const krb5_structure *rep,
18237c478bd9Sstevel@tonic-gate 					 krb5_data **code);
18247c478bd9Sstevel@tonic-gate    modifies  *code
18257c478bd9Sstevel@tonic-gate    effects   Returns the ASN.1 encoding of *rep in **code.
18267c478bd9Sstevel@tonic-gate              Returns ASN1_MISSING_FIELD if a required field is emtpy in *rep.
18277c478bd9Sstevel@tonic-gate              Returns ENOMEM if memory runs out.
18287c478bd9Sstevel@tonic-gate */
18297c478bd9Sstevel@tonic-gate 
18307c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_authenticator
18317c478bd9Sstevel@tonic-gate 	(const krb5_authenticator *rep, krb5_data **code);
18327c478bd9Sstevel@tonic-gate 
18337c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_ticket
18347c478bd9Sstevel@tonic-gate 	(const krb5_ticket *rep, krb5_data **code);
18357c478bd9Sstevel@tonic-gate 
18367c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_encryption_key
18377c478bd9Sstevel@tonic-gate 	(const krb5_keyblock *rep, krb5_data **code);
18387c478bd9Sstevel@tonic-gate 
18397c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_tkt_part
18407c478bd9Sstevel@tonic-gate 	(const krb5_enc_tkt_part *rep, krb5_data **code);
18417c478bd9Sstevel@tonic-gate 
18427c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_kdc_rep_part
18437c478bd9Sstevel@tonic-gate 	(const krb5_enc_kdc_rep_part *rep, krb5_data **code);
18447c478bd9Sstevel@tonic-gate 
1845159d09a2SMark Phalan /* yes, the translation is identical to that used for KDC__REP */
18467c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_as_rep
18477c478bd9Sstevel@tonic-gate 	(const krb5_kdc_rep *rep, krb5_data **code);
18487c478bd9Sstevel@tonic-gate 
1849159d09a2SMark Phalan /* yes, the translation is identical to that used for KDC__REP */
18507c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_tgs_rep
18517c478bd9Sstevel@tonic-gate 	(const krb5_kdc_rep *rep, krb5_data **code);
18527c478bd9Sstevel@tonic-gate 
18537c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_ap_req
18547c478bd9Sstevel@tonic-gate 	(const krb5_ap_req *rep, krb5_data **code);
18557c478bd9Sstevel@tonic-gate 
18567c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_ap_rep
18577c478bd9Sstevel@tonic-gate 	(const krb5_ap_rep *rep, krb5_data **code);
18587c478bd9Sstevel@tonic-gate 
18597c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_ap_rep_enc_part
18607c478bd9Sstevel@tonic-gate 	(const krb5_ap_rep_enc_part *rep, krb5_data **code);
18617c478bd9Sstevel@tonic-gate 
18627c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_as_req
18637c478bd9Sstevel@tonic-gate 	(const krb5_kdc_req *rep, krb5_data **code);
18647c478bd9Sstevel@tonic-gate 
18657c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_tgs_req
18667c478bd9Sstevel@tonic-gate 	(const krb5_kdc_req *rep, krb5_data **code);
18677c478bd9Sstevel@tonic-gate 
18687c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_kdc_req_body
18697c478bd9Sstevel@tonic-gate 	(const krb5_kdc_req *rep, krb5_data **code);
18707c478bd9Sstevel@tonic-gate 
18717c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_safe
18727c478bd9Sstevel@tonic-gate 	(const krb5_safe *rep, krb5_data **code);
18737c478bd9Sstevel@tonic-gate 
1874*ba7b222eSGlenn Barry struct krb5_safe_with_body {
1875*ba7b222eSGlenn Barry 	krb5_safe *safe;
1876*ba7b222eSGlenn Barry 	krb5_data *body;
1877*ba7b222eSGlenn Barry };
1878*ba7b222eSGlenn Barry 
18797c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_safe_with_body
1880*ba7b222eSGlenn Barry 	(const struct krb5_safe_with_body *rep, krb5_data **code);
18817c478bd9Sstevel@tonic-gate 
18827c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_priv
18837c478bd9Sstevel@tonic-gate 	(const krb5_priv *rep, krb5_data **code);
18847c478bd9Sstevel@tonic-gate 
18857c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_priv_part
18867c478bd9Sstevel@tonic-gate 	(const krb5_priv_enc_part *rep, krb5_data **code);
18877c478bd9Sstevel@tonic-gate 
18887c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_cred
18897c478bd9Sstevel@tonic-gate 	(const krb5_cred *rep, krb5_data **code);
18907c478bd9Sstevel@tonic-gate 
18917c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_cred_part
18927c478bd9Sstevel@tonic-gate 	(const krb5_cred_enc_part *rep, krb5_data **code);
18937c478bd9Sstevel@tonic-gate 
18947c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_error
18957c478bd9Sstevel@tonic-gate 	(const krb5_error *rep, krb5_data **code);
18967c478bd9Sstevel@tonic-gate 
18977c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_authdata
1898*ba7b222eSGlenn Barry 	(krb5_authdata *const *rep, krb5_data **code);
18997c478bd9Sstevel@tonic-gate 
1900159d09a2SMark Phalan krb5_error_code encode_krb5_authdata_elt
1901159d09a2SMark Phalan 	(const krb5_authdata *rep, krb5_data **code);
1902159d09a2SMark Phalan 
19037c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_pwd_sequence
19047c478bd9Sstevel@tonic-gate 	(const passwd_phrase_element *rep, krb5_data **code);
19057c478bd9Sstevel@tonic-gate 
19067c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_pwd_data
19077c478bd9Sstevel@tonic-gate 	(const krb5_pwd_data *rep, krb5_data **code);
19087c478bd9Sstevel@tonic-gate 
19097c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_padata_sequence
1910*ba7b222eSGlenn Barry         (krb5_pa_data *const *rep, krb5_data **code);
19117c478bd9Sstevel@tonic-gate 
19127c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_alt_method
19137c478bd9Sstevel@tonic-gate 	(const krb5_alt_method *, krb5_data **code);
19147c478bd9Sstevel@tonic-gate 
19157c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_etype_info
1916*ba7b222eSGlenn Barry         (krb5_etype_info_entry *const *, krb5_data **code);
19177c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_etype_info2
1918*ba7b222eSGlenn Barry         (krb5_etype_info_entry *const *, krb5_data **code);
19197c478bd9Sstevel@tonic-gate 
19207c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_data
19217c478bd9Sstevel@tonic-gate     	(const krb5_enc_data *, krb5_data **);
19227c478bd9Sstevel@tonic-gate 
19237c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_pa_enc_ts
19247c478bd9Sstevel@tonic-gate     	(const krb5_pa_enc_ts *, krb5_data **);
19257c478bd9Sstevel@tonic-gate 
19267c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_sam_challenge
19277c478bd9Sstevel@tonic-gate 	(const krb5_sam_challenge * , krb5_data **);
19287c478bd9Sstevel@tonic-gate 
19297c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_sam_key
19307c478bd9Sstevel@tonic-gate 	(const krb5_sam_key * , krb5_data **);
19317c478bd9Sstevel@tonic-gate 
19327c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_sam_response_enc
19337c478bd9Sstevel@tonic-gate 	(const krb5_enc_sam_response_enc * , krb5_data **);
19347c478bd9Sstevel@tonic-gate 
19357c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_sam_response
19367c478bd9Sstevel@tonic-gate 	(const krb5_sam_response * , krb5_data **);
19377c478bd9Sstevel@tonic-gate 
19387c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_sam_challenge_2
19397c478bd9Sstevel@tonic-gate 	(const krb5_sam_challenge_2 * , krb5_data **);
19407c478bd9Sstevel@tonic-gate 
19417c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_sam_challenge_2_body
19427c478bd9Sstevel@tonic-gate 	(const krb5_sam_challenge_2_body * , krb5_data **);
19437c478bd9Sstevel@tonic-gate 
19447c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_enc_sam_response_enc_2
19457c478bd9Sstevel@tonic-gate 	(const krb5_enc_sam_response_enc_2 * , krb5_data **);
19467c478bd9Sstevel@tonic-gate 
19477c478bd9Sstevel@tonic-gate krb5_error_code encode_krb5_sam_response_2
19487c478bd9Sstevel@tonic-gate 	(const krb5_sam_response_2 * , krb5_data **);
19497c478bd9Sstevel@tonic-gate 
1950159d09a2SMark Phalan krb5_error_code encode_krb5_predicted_sam_response
1951159d09a2SMark Phalan 	(const krb5_predicted_sam_response * , krb5_data **);
1952159d09a2SMark Phalan 
1953*ba7b222eSGlenn Barry struct krb5_setpw_req {
1954*ba7b222eSGlenn Barry     krb5_principal target;
1955*ba7b222eSGlenn Barry     krb5_data password;
1956*ba7b222eSGlenn Barry };
195710db1377Sgtb krb5_error_code encode_krb5_setpw_req
1958*ba7b222eSGlenn Barry         (const struct krb5_setpw_req *rep, krb5_data **code);
195910db1377Sgtb 
19607c478bd9Sstevel@tonic-gate /*************************************************************************
19617c478bd9Sstevel@tonic-gate  * End of prototypes for krb5_encode.c
19627c478bd9Sstevel@tonic-gate  *************************************************************************/
19637c478bd9Sstevel@tonic-gate 
1964159d09a2SMark Phalan krb5_error_code decode_krb5_sam_challenge
1965159d09a2SMark Phalan        (const krb5_data *, krb5_sam_challenge **);
1966159d09a2SMark Phalan 
1967159d09a2SMark Phalan krb5_error_code decode_krb5_enc_sam_key
1968159d09a2SMark Phalan        (const krb5_data *, krb5_sam_key **);
1969159d09a2SMark Phalan 
1970159d09a2SMark Phalan krb5_error_code decode_krb5_enc_sam_response_enc
1971159d09a2SMark Phalan        (const krb5_data *, krb5_enc_sam_response_enc **);
1972159d09a2SMark Phalan 
1973159d09a2SMark Phalan krb5_error_code decode_krb5_sam_response
1974159d09a2SMark Phalan        (const krb5_data *, krb5_sam_response **);
1975159d09a2SMark Phalan 
1976159d09a2SMark Phalan krb5_error_code decode_krb5_predicted_sam_response
1977159d09a2SMark Phalan        (const krb5_data *, krb5_predicted_sam_response **);
1978159d09a2SMark Phalan 
1979159d09a2SMark Phalan krb5_error_code decode_krb5_sam_challenge_2
1980159d09a2SMark Phalan 	(const krb5_data *, krb5_sam_challenge_2 **);
1981159d09a2SMark Phalan 
1982159d09a2SMark Phalan krb5_error_code decode_krb5_sam_challenge_2_body
1983159d09a2SMark Phalan 	(const krb5_data *, krb5_sam_challenge_2_body **);
1984159d09a2SMark Phalan 
1985159d09a2SMark Phalan krb5_error_code decode_krb5_enc_sam_response_enc_2
1986159d09a2SMark Phalan 	(const krb5_data *, krb5_enc_sam_response_enc_2 **);
1987159d09a2SMark Phalan 
1988159d09a2SMark Phalan krb5_error_code decode_krb5_sam_response_2
1989159d09a2SMark Phalan 	(const krb5_data *, krb5_sam_response_2 **);
1990159d09a2SMark Phalan 
1991159d09a2SMark Phalan 
19927c478bd9Sstevel@tonic-gate /*************************************************************************
19937c478bd9Sstevel@tonic-gate  * Prototypes for krb5_decode.c
19947c478bd9Sstevel@tonic-gate  *************************************************************************/
19957c478bd9Sstevel@tonic-gate 
1996159d09a2SMark Phalan krb5_error_code krb5_validate_times
1997159d09a2SMark Phalan        (krb5_context,
1998159d09a2SMark Phalan 		       krb5_ticket_times *);
1999159d09a2SMark Phalan 
20007c478bd9Sstevel@tonic-gate /*
20017c478bd9Sstevel@tonic-gate    krb5_error_code decode_krb5_structure(const krb5_data *code,
20027c478bd9Sstevel@tonic-gate                                          krb5_structure **rep);
2003159d09a2SMark Phalan 
20047c478bd9Sstevel@tonic-gate    requires  Expects **rep to not have been allocated;
20057c478bd9Sstevel@tonic-gate               a new *rep is allocated regardless of the old value.
20067c478bd9Sstevel@tonic-gate    effects   Decodes *code into **rep.
20077c478bd9Sstevel@tonic-gate 	     Returns ENOMEM if memory is exhausted.
20087c478bd9Sstevel@tonic-gate              Returns asn1 and krb5 errors.
20097c478bd9Sstevel@tonic-gate */
20107c478bd9Sstevel@tonic-gate 
20117c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_authenticator
20127c478bd9Sstevel@tonic-gate 	(const krb5_data *code, krb5_authenticator **rep);
20137c478bd9Sstevel@tonic-gate 
20147c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_ticket
20157c478bd9Sstevel@tonic-gate 	(const krb5_data *code, krb5_ticket **rep);
20167c478bd9Sstevel@tonic-gate 
20177c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_encryption_key
20187c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_keyblock **rep);
20197c478bd9Sstevel@tonic-gate 
20207c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_enc_tkt_part
20217c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_enc_tkt_part **rep);
20227c478bd9Sstevel@tonic-gate 
20237c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_enc_kdc_rep_part
20247c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_enc_kdc_rep_part **rep);
20257c478bd9Sstevel@tonic-gate 
20267c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_as_rep
20277c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_kdc_rep **rep);
20287c478bd9Sstevel@tonic-gate 
20297c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_tgs_rep
20307c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_kdc_rep **rep);
20317c478bd9Sstevel@tonic-gate 
20327c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_ap_req
20337c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_ap_req **rep);
20347c478bd9Sstevel@tonic-gate 
20357c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_ap_rep
20367c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_ap_rep **rep);
20377c478bd9Sstevel@tonic-gate 
20387c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_ap_rep_enc_part
20397c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_ap_rep_enc_part **rep);
20407c478bd9Sstevel@tonic-gate 
20417c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_as_req
20427c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_kdc_req **rep);
20437c478bd9Sstevel@tonic-gate 
20447c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_tgs_req
20457c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_kdc_req **rep);
20467c478bd9Sstevel@tonic-gate 
20477c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_kdc_req_body
20487c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_kdc_req **rep);
20497c478bd9Sstevel@tonic-gate 
20507c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_safe
20517c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_safe **rep);
20527c478bd9Sstevel@tonic-gate 
20537c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_safe_with_body
20547c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_safe **rep, krb5_data *body);
20557c478bd9Sstevel@tonic-gate 
20567c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_priv
20577c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_priv **rep);
20587c478bd9Sstevel@tonic-gate 
20597c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_enc_priv_part
20607c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_priv_enc_part **rep);
20617c478bd9Sstevel@tonic-gate 
20627c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_cred
20637c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_cred **rep);
20647c478bd9Sstevel@tonic-gate 
20657c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_enc_cred_part
20667c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_cred_enc_part **rep);
20677c478bd9Sstevel@tonic-gate 
20687c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_error
20697c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_error **rep);
20707c478bd9Sstevel@tonic-gate 
20717c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_authdata
20727c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_authdata ***rep);
20737c478bd9Sstevel@tonic-gate 
20747c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_pwd_sequence
20757c478bd9Sstevel@tonic-gate 	(const krb5_data *output, passwd_phrase_element **rep);
20767c478bd9Sstevel@tonic-gate 
20777c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_pwd_data
20787c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_pwd_data **rep);
20797c478bd9Sstevel@tonic-gate 
20807c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_padata_sequence
20817c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_pa_data ***rep);
20827c478bd9Sstevel@tonic-gate 
20837c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_alt_method
20847c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_alt_method **rep);
20857c478bd9Sstevel@tonic-gate 
20867c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_etype_info
20877c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_etype_info_entry ***rep);
20887c478bd9Sstevel@tonic-gate 
20897c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_etype_info2
20907c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_etype_info_entry ***rep);
20917c478bd9Sstevel@tonic-gate 
20927c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_enc_data
20937c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_enc_data **rep);
20947c478bd9Sstevel@tonic-gate 
20957c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_pa_enc_ts
20967c478bd9Sstevel@tonic-gate 	(const krb5_data *output, krb5_pa_enc_ts **rep);
20977c478bd9Sstevel@tonic-gate 
20987c478bd9Sstevel@tonic-gate krb5_error_code decode_krb5_sam_key
20997c478bd9Sstevel@tonic-gate 	(const krb5_data *, krb5_sam_key **);
21007c478bd9Sstevel@tonic-gate 
210154925bf6Swillf struct _krb5_key_data;		/* kdb.h */
210254925bf6Swillf krb5_error_code
210354925bf6Swillf krb5int_ldap_encode_sequence_of_keys (struct _krb5_key_data *key_data,
210454925bf6Swillf 				      krb5_int16 n_key_data,
210554925bf6Swillf 				      krb5_int32 mkvno,
210654925bf6Swillf 				      krb5_data **code);
210754925bf6Swillf 
210854925bf6Swillf krb5_error_code
210954925bf6Swillf krb5int_ldap_decode_sequence_of_keys (krb5_data *in,
211054925bf6Swillf 				      struct _krb5_key_data **out,
211154925bf6Swillf 				      krb5_int16 *n_key_data,
211254925bf6Swillf 				      int *mkvno);
21137c478bd9Sstevel@tonic-gate 
21147c478bd9Sstevel@tonic-gate /*************************************************************************
21157c478bd9Sstevel@tonic-gate  * End of prototypes for krb5_decode.c
21167c478bd9Sstevel@tonic-gate  *************************************************************************/
21177c478bd9Sstevel@tonic-gate 
21187c478bd9Sstevel@tonic-gate #endif /* KRB5_ASN1__ */
21197c478bd9Sstevel@tonic-gate /*
21207c478bd9Sstevel@tonic-gate  * End "asn1.h"
21217c478bd9Sstevel@tonic-gate  */
21227c478bd9Sstevel@tonic-gate 
21237c478bd9Sstevel@tonic-gate 
21247c478bd9Sstevel@tonic-gate /*
21257c478bd9Sstevel@tonic-gate  * Internal krb5 library routines
21267c478bd9Sstevel@tonic-gate  */
21277c478bd9Sstevel@tonic-gate krb5_error_code krb5_encrypt_tkt_part
21287c478bd9Sstevel@tonic-gate 	(krb5_context,
2129159d09a2SMark Phalan 		const krb5_keyblock *,
2130159d09a2SMark Phalan 		krb5_ticket * );
21317c478bd9Sstevel@tonic-gate 
21327c478bd9Sstevel@tonic-gate 
21337c478bd9Sstevel@tonic-gate krb5_error_code krb5_encode_kdc_rep
21347c478bd9Sstevel@tonic-gate 	(krb5_context,
2135159d09a2SMark Phalan 		const krb5_msgtype,
2136159d09a2SMark Phalan 		const krb5_enc_kdc_rep_part *,
2137159d09a2SMark Phalan 		int using_subkey,
2138159d09a2SMark Phalan 		const krb5_keyblock *,
2139159d09a2SMark Phalan 		krb5_kdc_rep *,
2140159d09a2SMark Phalan 		krb5_data ** );
21417c478bd9Sstevel@tonic-gate 
2142505d05c7Sgtb krb5_boolean krb5int_auth_con_chkseqnum
2143505d05c7Sgtb 	(krb5_context ctx, krb5_auth_context ac, krb5_ui_4 in_seq);
21447c478bd9Sstevel@tonic-gate /*
21457c478bd9Sstevel@tonic-gate  * [De]Serialization Handle and operations.
21467c478bd9Sstevel@tonic-gate  */
21477c478bd9Sstevel@tonic-gate struct __krb5_serializer {
21487c478bd9Sstevel@tonic-gate     krb5_magic		odtype;
21497c478bd9Sstevel@tonic-gate     krb5_error_code	(*sizer) (krb5_context,
2150159d09a2SMark Phalan 						  krb5_pointer,
2151159d09a2SMark Phalan 						  size_t *);
21527c478bd9Sstevel@tonic-gate     krb5_error_code	(*externalizer) (krb5_context,
2153159d09a2SMark Phalan 							 krb5_pointer,
2154159d09a2SMark Phalan 							 krb5_octet **,
2155159d09a2SMark Phalan 							 size_t *);
21567c478bd9Sstevel@tonic-gate     krb5_error_code	(*internalizer) (krb5_context,
2157159d09a2SMark Phalan 							 krb5_pointer *,
2158159d09a2SMark Phalan 							 krb5_octet **,
2159159d09a2SMark Phalan 							 size_t *);
21607c478bd9Sstevel@tonic-gate };
2161159d09a2SMark Phalan typedef const struct __krb5_serializer * krb5_ser_handle;
21627c478bd9Sstevel@tonic-gate typedef struct __krb5_serializer krb5_ser_entry;
21637c478bd9Sstevel@tonic-gate 
21647c478bd9Sstevel@tonic-gate krb5_ser_handle krb5_find_serializer
2165505d05c7Sgtb 	(krb5_context,
2166505d05c7Sgtb 		krb5_magic);
21677c478bd9Sstevel@tonic-gate krb5_error_code krb5_register_serializer
2168505d05c7Sgtb 	(krb5_context,
2169505d05c7Sgtb 			const krb5_ser_entry *);
21707c478bd9Sstevel@tonic-gate 
21717c478bd9Sstevel@tonic-gate /* Determine the external size of a particular opaque structure */
2172505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_size_opaque
2173505d05c7Sgtb 	(krb5_context,
2174505d05c7Sgtb 		krb5_magic,
2175505d05c7Sgtb 		krb5_pointer,
2176505d05c7Sgtb 		size_t *);
21777c478bd9Sstevel@tonic-gate 
21787c478bd9Sstevel@tonic-gate /* Serialize the structure into a buffer */
2179505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_externalize_opaque
21807c478bd9Sstevel@tonic-gate 	(krb5_context,
2181159d09a2SMark Phalan 		krb5_magic,
2182159d09a2SMark Phalan 		krb5_pointer,
2183159d09a2SMark Phalan 		krb5_octet **,
2184159d09a2SMark Phalan 		size_t *);
21857c478bd9Sstevel@tonic-gate 
21867c478bd9Sstevel@tonic-gate /* Deserialize the structure from a buffer */
2187505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_internalize_opaque
2188505d05c7Sgtb 	(krb5_context,
2189505d05c7Sgtb 		krb5_magic,
2190505d05c7Sgtb 		krb5_pointer *,
2191505d05c7Sgtb 		krb5_octet **,
2192505d05c7Sgtb 		size_t *);
21937c478bd9Sstevel@tonic-gate 
21947c478bd9Sstevel@tonic-gate /* Serialize data into a buffer */
21957c478bd9Sstevel@tonic-gate krb5_error_code krb5_externalize_data
2196505d05c7Sgtb 	(krb5_context,
2197505d05c7Sgtb 		krb5_pointer,
2198505d05c7Sgtb 		krb5_octet **,
2199505d05c7Sgtb 		size_t *);
22007c478bd9Sstevel@tonic-gate /*
22017c478bd9Sstevel@tonic-gate  * Initialization routines.
22027c478bd9Sstevel@tonic-gate  */
22037c478bd9Sstevel@tonic-gate 
22047c478bd9Sstevel@tonic-gate /* Initialize serialization for krb5_[os_]context */
2205505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_context_init
22067c478bd9Sstevel@tonic-gate 	(krb5_context);
22077c478bd9Sstevel@tonic-gate 
22087c478bd9Sstevel@tonic-gate /* Initialize serialization for krb5_auth_context */
2209505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_auth_context_init
22107c478bd9Sstevel@tonic-gate 	(krb5_context);
22117c478bd9Sstevel@tonic-gate 
22127c478bd9Sstevel@tonic-gate /* Initialize serialization for krb5_keytab */
2213505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_keytab_init
22147c478bd9Sstevel@tonic-gate 	(krb5_context);
22157c478bd9Sstevel@tonic-gate 
22167c478bd9Sstevel@tonic-gate /* Initialize serialization for krb5_ccache */
2217505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_ccache_init
22187c478bd9Sstevel@tonic-gate 	(krb5_context);
22197c478bd9Sstevel@tonic-gate 
22207c478bd9Sstevel@tonic-gate /* Initialize serialization for krb5_rcache */
2221505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_rcache_init
22227c478bd9Sstevel@tonic-gate 	(krb5_context);
22237c478bd9Sstevel@tonic-gate 
22247c478bd9Sstevel@tonic-gate /* [De]serialize 4-byte integer */
22257c478bd9Sstevel@tonic-gate krb5_error_code KRB5_CALLCONV krb5_ser_pack_int32
2226505d05c7Sgtb 	(krb5_int32,
2227505d05c7Sgtb 		krb5_octet **,
2228505d05c7Sgtb 		size_t *);
2229505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_unpack_int32
2230505d05c7Sgtb 	(krb5_int32 *,
2231505d05c7Sgtb 		krb5_octet **,
2232505d05c7Sgtb 		size_t *);
2233505d05c7Sgtb /* [De]serialize 8-byte integer */
22347c478bd9Sstevel@tonic-gate krb5_error_code KRB5_CALLCONV krb5_ser_pack_int64
2235159d09a2SMark Phalan 	(krb5_int64, krb5_octet **, size_t *);
22367c478bd9Sstevel@tonic-gate krb5_error_code KRB5_CALLCONV krb5_ser_unpack_int64
22377c478bd9Sstevel@tonic-gate 	(krb5_int64 *, krb5_octet **, size_t *);
22387c478bd9Sstevel@tonic-gate /* [De]serialize byte string */
2239505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_pack_bytes
22407c478bd9Sstevel@tonic-gate 	(krb5_octet *,
2241505d05c7Sgtb 		size_t,
2242505d05c7Sgtb 		krb5_octet **,
2243505d05c7Sgtb 		size_t *);
2244505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_ser_unpack_bytes
22457c478bd9Sstevel@tonic-gate 	(krb5_octet *,
2246505d05c7Sgtb 		size_t,
2247505d05c7Sgtb 		krb5_octet **,
2248505d05c7Sgtb 		size_t *);
22497c478bd9Sstevel@tonic-gate 
2250505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5int_cc_default
22517c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_ccache *);
22527c478bd9Sstevel@tonic-gate 
22537c478bd9Sstevel@tonic-gate krb5_error_code KRB5_CALLCONV krb5_cc_retrieve_cred_default
2254159d09a2SMark Phalan 	(krb5_context, krb5_ccache, krb5_flags,
2255159d09a2SMark Phalan 			krb5_creds *, krb5_creds *);
2256159d09a2SMark Phalan 
2257159d09a2SMark Phalan krb5_boolean KRB5_CALLCONV
2258159d09a2SMark Phalan krb5_creds_compare (krb5_context in_context,
2259159d09a2SMark Phalan                     krb5_creds *in_creds,
2260159d09a2SMark Phalan                     krb5_creds *in_compare_creds);
22617c478bd9Sstevel@tonic-gate 
22627c478bd9Sstevel@tonic-gate void krb5int_set_prompt_types
22637c478bd9Sstevel@tonic-gate 	(krb5_context, krb5_prompt_type *);
22647c478bd9Sstevel@tonic-gate 
22657c478bd9Sstevel@tonic-gate krb5_error_code
22667c478bd9Sstevel@tonic-gate krb5int_generate_and_save_subkey (krb5_context, krb5_auth_context,
2267159d09a2SMark Phalan 				  krb5_keyblock * /* Old keyblock, not new!  */);
22687c478bd9Sstevel@tonic-gate 
2269505d05c7Sgtb /* set and change password helpers */
2270505d05c7Sgtb 
2271505d05c7Sgtb krb5_error_code krb5int_mk_chpw_req
2272159d09a2SMark Phalan 	(krb5_context context, krb5_auth_context auth_context,
2273159d09a2SMark Phalan  			krb5_data *ap_req, char *passwd, krb5_data *packet);
2274505d05c7Sgtb krb5_error_code krb5int_rd_chpw_rep
2275159d09a2SMark Phalan 	(krb5_context context, krb5_auth_context auth_context,
2276159d09a2SMark Phalan 		       krb5_data *packet, int *result_code,
2277159d09a2SMark Phalan 		       krb5_data *result_data);
2278505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_chpw_result_code_string
2279159d09a2SMark Phalan 	(krb5_context context, int result_code,
2280159d09a2SMark Phalan 			char **result_codestr);
2281505d05c7Sgtb krb5_error_code  krb5int_mk_setpw_req
2282159d09a2SMark Phalan 	(krb5_context context, krb5_auth_context auth_context,
2283159d09a2SMark Phalan  			krb5_data *ap_req, krb5_principal targetprinc, char *passwd, krb5_data *packet);
2284505d05c7Sgtb krb5_error_code krb5int_rd_setpw_rep
2285159d09a2SMark Phalan 	(krb5_context context, krb5_auth_context auth_context,
2286159d09a2SMark Phalan 		       krb5_data *packet, int *result_code,
2287159d09a2SMark Phalan 		       krb5_data *result_data);
2288505d05c7Sgtb krb5_error_code krb5int_setpw_result_code_string
2289159d09a2SMark Phalan 	(krb5_context context, int result_code,
2290159d09a2SMark Phalan 			const char **result_codestr);
22917c478bd9Sstevel@tonic-gate 
22927c478bd9Sstevel@tonic-gate struct srv_dns_entry {
2293159d09a2SMark Phalan     struct srv_dns_entry *next;
2294159d09a2SMark Phalan     int priority;
2295159d09a2SMark Phalan     int weight;
2296159d09a2SMark Phalan     unsigned short port;
2297159d09a2SMark Phalan     char *host;
22987c478bd9Sstevel@tonic-gate };
2299159d09a2SMark Phalan #ifdef KRB5_DNS_LOOKUP
23007c478bd9Sstevel@tonic-gate krb5_error_code
23017c478bd9Sstevel@tonic-gate krb5int_make_srv_query_realm(const krb5_data *realm,
2302159d09a2SMark Phalan 			     const char *service,
2303159d09a2SMark Phalan 			     const char *protocol,
2304159d09a2SMark Phalan 			     struct srv_dns_entry **answers);
23057c478bd9Sstevel@tonic-gate void krb5int_free_srv_dns_data(struct srv_dns_entry *);
2306159d09a2SMark Phalan #endif
23077c478bd9Sstevel@tonic-gate 
23087c478bd9Sstevel@tonic-gate /*
23097c478bd9Sstevel@tonic-gate  * Convenience function for structure magic number
23107c478bd9Sstevel@tonic-gate  */
23117c478bd9Sstevel@tonic-gate #define KRB5_VERIFY_MAGIC(structure,magic_number) \
23127c478bd9Sstevel@tonic-gate     if ((structure)->magic != (magic_number)) return (magic_number);
23137c478bd9Sstevel@tonic-gate 
2314505d05c7Sgtb 
2315505d05c7Sgtb /* SUNW14resync XXX - see k5-util.h */
2316505d05c7Sgtb #if 0
23177c478bd9Sstevel@tonic-gate int krb5_seteuid  (int);
2318505d05c7Sgtb #endif
23197c478bd9Sstevel@tonic-gate 
23207c478bd9Sstevel@tonic-gate char * krb5_getenv(const char *);
23217c478bd9Sstevel@tonic-gate int krb5_setenv  (const char *, const char *, int);
23227c478bd9Sstevel@tonic-gate void krb5_unsetenv  (const char *);
23237c478bd9Sstevel@tonic-gate 
2324505d05c7Sgtb 
2325505d05c7Sgtb /* SUNW14resync - (from here to EOF) not sure if we need this but will add it
2326505d05c7Sgtb    for future resync sake */
2327505d05c7Sgtb 
2328505d05c7Sgtb /* To keep happy libraries which are (for now) accessing internal stuff */
2329505d05c7Sgtb 
2330505d05c7Sgtb /* Make sure to increment by one when changing the struct */
2331159d09a2SMark Phalan #define KRB5INT_ACCESS_STRUCT_VERSION 12
2332505d05c7Sgtb 
2333505d05c7Sgtb #ifndef ANAME_SZ
2334159d09a2SMark Phalan struct ktext;			/* from krb.h, for krb524 support */
2335505d05c7Sgtb #endif
2336505d05c7Sgtb typedef struct _krb5int_access {
2337505d05c7Sgtb     /* crypto stuff */
2338505d05c7Sgtb     const struct krb5_hash_provider *md5_hash_provider;
2339505d05c7Sgtb     const struct krb5_enc_provider *arcfour_enc_provider;
2340159d09a2SMark Phalan     krb5_error_code (* krb5_hmac) (krb5_context, const struct krb5_hash_provider *hash,
2341159d09a2SMark Phalan 				   const krb5_keyblock *key,
2342159d09a2SMark Phalan 				   unsigned int icount, const krb5_data *input,
2343159d09a2SMark Phalan 				   krb5_data *output);
2344505d05c7Sgtb     /* service location and communication */
2345505d05c7Sgtb #ifndef _KERNEL
2346505d05c7Sgtb     krb5_error_code (*sendto_udp) (krb5_context, const krb5_data *msg,
2347159d09a2SMark Phalan 				   const struct addrlist *, struct sendto_callback_info*, krb5_data *reply,
2348159d09a2SMark Phalan 				   struct sockaddr *, socklen_t *,struct sockaddr *,
2349159d09a2SMark Phalan 				   socklen_t *, int *,
2350159d09a2SMark Phalan 				   int (*msg_handler)(krb5_context, const krb5_data *, void *),
2351159d09a2SMark Phalan 				   void *msg_handler_data);
2352505d05c7Sgtb     krb5_error_code (*add_host_to_list)(struct addrlist *lp,
2353159d09a2SMark Phalan 					const char *hostname,
2354159d09a2SMark Phalan 					int port, int secport,
2355159d09a2SMark Phalan 					int socktype, int family);
2356505d05c7Sgtb     void (*free_addrlist) (struct addrlist *);
2357505d05c7Sgtb #endif /* _KERNEL */
2358505d05c7Sgtb 
2359505d05c7Sgtb     krb5_error_code (*make_srv_query_realm)(const krb5_data *realm,
2360159d09a2SMark Phalan 					    const char *service,
2361159d09a2SMark Phalan 					    const char *protocol,
2362159d09a2SMark Phalan 					    struct srv_dns_entry **answers);
2363505d05c7Sgtb     void (*free_srv_dns_data)(struct srv_dns_entry *);
2364505d05c7Sgtb     int (*use_dns_kdc)(krb5_context);
2365*ba7b222eSGlenn Barry     krb5_error_code (*clean_hostname)(krb5_context, const char *, char *, size_t);
2366505d05c7Sgtb 
2367505d05c7Sgtb     /* krb4 compatibility stuff -- may be null if not enabled */
2368505d05c7Sgtb     krb5_int32 (*krb_life_to_time)(krb5_int32, int);
2369505d05c7Sgtb     int (*krb_time_to_life)(krb5_int32, krb5_int32);
2370505d05c7Sgtb     int (*krb524_encode_v4tkt)(struct ktext *, char *, unsigned int *);
2371505d05c7Sgtb     krb5_error_code (*krb5int_c_mandatory_cksumtype)
2372505d05c7Sgtb         (krb5_context, krb5_enctype, krb5_cksumtype *);
2373505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *krb5_ser_pack_int64)
2374505d05c7Sgtb         (krb5_int64, krb5_octet **, size_t *);
2375505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *krb5_ser_unpack_int64)
2376505d05c7Sgtb         (krb5_int64 *, krb5_octet **, size_t *);
237754925bf6Swillf 
237854925bf6Swillf     /* Used for KDB LDAP back end.  */
237954925bf6Swillf     krb5_error_code
238054925bf6Swillf     (*asn1_ldap_encode_sequence_of_keys) (struct _krb5_key_data *key_data,
238154925bf6Swillf 					  krb5_int16 n_key_data,
238254925bf6Swillf 					  krb5_int32 mkvno,
238354925bf6Swillf 					  krb5_data **code);
238454925bf6Swillf 
238554925bf6Swillf     krb5_error_code
238654925bf6Swillf     (*asn1_ldap_decode_sequence_of_keys) (krb5_data *in,
238754925bf6Swillf 					  struct _krb5_key_data **out,
238854925bf6Swillf 					  krb5_int16 *n_key_data,
238954925bf6Swillf 					  int *mkvno);
2390159d09a2SMark Phalan 
2391159d09a2SMark Phalan     /*
2392159d09a2SMark Phalan      * pkinit asn.1 encode/decode functions
2393159d09a2SMark Phalan      */
2394159d09a2SMark Phalan     krb5_error_code (*encode_krb5_auth_pack)
2395159d09a2SMark Phalan         (const krb5_auth_pack *rep, krb5_data **code);
2396159d09a2SMark Phalan     krb5_error_code (*encode_krb5_auth_pack_draft9)
2397159d09a2SMark Phalan         (const krb5_auth_pack_draft9 *rep, krb5_data **code);
2398159d09a2SMark Phalan     krb5_error_code (*encode_krb5_kdc_dh_key_info)
2399159d09a2SMark Phalan         (const krb5_kdc_dh_key_info *rep, krb5_data **code);
2400159d09a2SMark Phalan     krb5_error_code (*encode_krb5_pa_pk_as_rep)
2401159d09a2SMark Phalan         (const krb5_pa_pk_as_rep *rep, krb5_data **code);
2402159d09a2SMark Phalan     krb5_error_code (*encode_krb5_pa_pk_as_rep_draft9)
2403159d09a2SMark Phalan         (const krb5_pa_pk_as_rep_draft9 *rep, krb5_data **code);
2404159d09a2SMark Phalan     krb5_error_code (*encode_krb5_pa_pk_as_req)
2405159d09a2SMark Phalan 	(const krb5_pa_pk_as_req *rep, krb5_data **code);
2406159d09a2SMark Phalan     krb5_error_code (*encode_krb5_pa_pk_as_req_draft9)
2407159d09a2SMark Phalan 	(const krb5_pa_pk_as_req_draft9 *rep, krb5_data **code);
2408159d09a2SMark Phalan     krb5_error_code (*encode_krb5_reply_key_pack)
2409159d09a2SMark Phalan         (const krb5_reply_key_pack *, krb5_data **code);
2410159d09a2SMark Phalan     krb5_error_code (*encode_krb5_reply_key_pack_draft9)
2411159d09a2SMark Phalan         (const krb5_reply_key_pack_draft9 *, krb5_data **code);
2412159d09a2SMark Phalan     krb5_error_code (*encode_krb5_td_dh_parameters)
2413159d09a2SMark Phalan         (const krb5_algorithm_identifier **, krb5_data **code);
2414159d09a2SMark Phalan     krb5_error_code (*encode_krb5_td_trusted_certifiers)
2415159d09a2SMark Phalan         (const krb5_external_principal_identifier **, krb5_data **code);
2416159d09a2SMark Phalan     krb5_error_code (*encode_krb5_typed_data)
2417159d09a2SMark Phalan         (const krb5_typed_data **, krb5_data **code);
2418159d09a2SMark Phalan 
2419159d09a2SMark Phalan     krb5_error_code (*decode_krb5_auth_pack)
2420159d09a2SMark Phalan         (const krb5_data *, krb5_auth_pack **);
2421159d09a2SMark Phalan     krb5_error_code (*decode_krb5_auth_pack_draft9)
2422159d09a2SMark Phalan         (const krb5_data *, krb5_auth_pack_draft9 **);
2423159d09a2SMark Phalan     krb5_error_code (*decode_krb5_pa_pk_as_req)
2424159d09a2SMark Phalan         (const krb5_data *, krb5_pa_pk_as_req **);
2425159d09a2SMark Phalan     krb5_error_code (*decode_krb5_pa_pk_as_req_draft9)
2426159d09a2SMark Phalan         (const krb5_data *, krb5_pa_pk_as_req_draft9 **);
2427159d09a2SMark Phalan     krb5_error_code (*decode_krb5_pa_pk_as_rep)
2428159d09a2SMark Phalan         (const krb5_data *, krb5_pa_pk_as_rep **);
2429159d09a2SMark Phalan     krb5_error_code (*decode_krb5_pa_pk_as_rep_draft9)
2430159d09a2SMark Phalan         (const krb5_data *, krb5_pa_pk_as_rep_draft9 **);
2431159d09a2SMark Phalan     krb5_error_code (*decode_krb5_kdc_dh_key_info)
2432159d09a2SMark Phalan         (const krb5_data *, krb5_kdc_dh_key_info **);
2433159d09a2SMark Phalan     krb5_error_code (*decode_krb5_principal_name)
2434159d09a2SMark Phalan         (const krb5_data *, krb5_principal_data **);
2435159d09a2SMark Phalan     krb5_error_code (*decode_krb5_reply_key_pack)
2436159d09a2SMark Phalan         (const krb5_data *, krb5_reply_key_pack **);
2437159d09a2SMark Phalan     krb5_error_code (*decode_krb5_reply_key_pack_draft9)
2438159d09a2SMark Phalan         (const krb5_data *, krb5_reply_key_pack_draft9 **);
2439159d09a2SMark Phalan     krb5_error_code (*decode_krb5_td_dh_parameters)
2440159d09a2SMark Phalan         (const krb5_data *, krb5_algorithm_identifier ***);
2441159d09a2SMark Phalan     krb5_error_code (*decode_krb5_td_trusted_certifiers)
2442159d09a2SMark Phalan         (const krb5_data *, krb5_external_principal_identifier ***);
2443159d09a2SMark Phalan     krb5_error_code (*decode_krb5_typed_data)
2444159d09a2SMark Phalan         (const krb5_data *, krb5_typed_data ***);
2445159d09a2SMark Phalan 
2446159d09a2SMark Phalan     krb5_error_code (*decode_krb5_as_req)
2447159d09a2SMark Phalan 	(const krb5_data *output, krb5_kdc_req **rep);
2448159d09a2SMark Phalan     krb5_error_code (*encode_krb5_kdc_req_body)
2449159d09a2SMark Phalan 	(const krb5_kdc_req *rep, krb5_data **code);
2450159d09a2SMark Phalan     void (KRB5_CALLCONV *krb5_free_kdc_req)
2451159d09a2SMark Phalan 	(krb5_context, krb5_kdc_req * );
2452159d09a2SMark Phalan     void (*krb5int_set_prompt_types)
2453159d09a2SMark Phalan 	(krb5_context, krb5_prompt_type *);
2454159d09a2SMark Phalan     krb5_error_code (*encode_krb5_authdata_elt)
2455159d09a2SMark Phalan 	(const krb5_authdata *rep, krb5_data **code);
2456159d09a2SMark Phalan 
2457505d05c7Sgtb } krb5int_access;
2458505d05c7Sgtb 
2459505d05c7Sgtb #define KRB5INT_ACCESS_VERSION \
2460505d05c7Sgtb     (((krb5_int32)((sizeof(krb5int_access) & 0xFFFF) | \
2461159d09a2SMark Phalan 		   (KRB5INT_ACCESS_STRUCT_VERSION << 16))) & 0xFFFFFFFF)
2462505d05c7Sgtb 
2463505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5int_accessor
2464159d09a2SMark Phalan 	(krb5int_access*, krb5_int32);
2465505d05c7Sgtb 
2466505d05c7Sgtb /* Ick -- some krb524 and krb4 support placed in the krb5 library,
2467505d05c7Sgtb    because AFS (and potentially other applications?) use the krb4
2468505d05c7Sgtb    object as an opaque token, which (in some implementations) is not
2469505d05c7Sgtb    in fact a krb4 ticket, so we don't want to drag in the krb4 support
2470505d05c7Sgtb    just to enable this.  */
2471505d05c7Sgtb 
2472505d05c7Sgtb #define KRB524_SERVICE "krb524"
2473505d05c7Sgtb #define KRB524_PORT 4444
2474505d05c7Sgtb 
2475505d05c7Sgtb /* v4lifetime.c */
2476505d05c7Sgtb extern krb5_int32 krb5int_krb_life_to_time(krb5_int32, int);
2477505d05c7Sgtb extern int krb5int_krb_time_to_life(krb5_int32, krb5_int32);
2478505d05c7Sgtb 
2479505d05c7Sgtb /* conv_creds.c */
2480505d05c7Sgtb int krb5int_encode_v4tkt
2481159d09a2SMark Phalan 	(struct ktext *v4tkt, char *buf, unsigned int *encoded_len);
2482505d05c7Sgtb 
2483505d05c7Sgtb /* send524.c */
2484505d05c7Sgtb int krb5int_524_sendto_kdc
2485505d05c7Sgtb         (krb5_context context, const krb5_data * message,
2486159d09a2SMark Phalan 	 const krb5_data * realm, krb5_data * reply,
2487159d09a2SMark Phalan 	 struct sockaddr *, socklen_t *);
2488505d05c7Sgtb 
2489505d05c7Sgtb /* temporary -- this should be under lib/krb5/ccache somewhere */
2490505d05c7Sgtb 
2491505d05c7Sgtb struct _krb5_ccache {
2492505d05c7Sgtb     krb5_magic magic;
2493505d05c7Sgtb     const struct _krb5_cc_ops *ops;
2494505d05c7Sgtb     krb5_pointer data;
2495505d05c7Sgtb };
2496505d05c7Sgtb 
2497159d09a2SMark Phalan /*
2498159d09a2SMark Phalan  * Per-type ccache cursor.
2499159d09a2SMark Phalan  */
2500159d09a2SMark Phalan struct krb5_cc_ptcursor {
2501159d09a2SMark Phalan     const struct _krb5_cc_ops *ops;
2502159d09a2SMark Phalan     krb5_pointer data;
2503159d09a2SMark Phalan };
2504159d09a2SMark Phalan typedef struct krb5_cc_ptcursor *krb5_cc_ptcursor;
2505159d09a2SMark Phalan 
2506505d05c7Sgtb struct _krb5_cc_ops {
2507505d05c7Sgtb     krb5_magic magic;
2508505d05c7Sgtb     char *prefix;
2509505d05c7Sgtb     const char * (KRB5_CALLCONV *get_name) (krb5_context, krb5_ccache);
2510505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *resolve) (krb5_context, krb5_ccache *,
2511159d09a2SMark Phalan 					    const char *);
2512505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *gen_new) (krb5_context, krb5_ccache *);
2513505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *init) (krb5_context, krb5_ccache,
2514159d09a2SMark Phalan 					    krb5_principal);
2515505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *destroy) (krb5_context, krb5_ccache);
2516505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *close) (krb5_context, krb5_ccache);
2517505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *store) (krb5_context, krb5_ccache,
2518159d09a2SMark Phalan 					    krb5_creds *);
2519505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *retrieve) (krb5_context, krb5_ccache,
2520159d09a2SMark Phalan 					    krb5_flags, krb5_creds *,
2521159d09a2SMark Phalan 					    krb5_creds *);
2522505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *get_princ) (krb5_context, krb5_ccache,
2523159d09a2SMark Phalan 					    krb5_principal *);
2524505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *get_first) (krb5_context, krb5_ccache,
2525159d09a2SMark Phalan 					    krb5_cc_cursor *);
2526505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *get_next) (krb5_context, krb5_ccache,
2527159d09a2SMark Phalan 					    krb5_cc_cursor *, krb5_creds *);
2528505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *end_get) (krb5_context, krb5_ccache,
2529159d09a2SMark Phalan 					    krb5_cc_cursor *);
2530505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *remove_cred) (krb5_context, krb5_ccache,
2531159d09a2SMark Phalan 					    krb5_flags, krb5_creds *);
2532505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *set_flags) (krb5_context, krb5_ccache,
2533159d09a2SMark Phalan 					    krb5_flags);
2534159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *get_flags) (krb5_context, krb5_ccache,
2535159d09a2SMark Phalan 						krb5_flags *);
2536159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *ptcursor_new)(krb5_context,
2537159d09a2SMark Phalan 						  krb5_cc_ptcursor *);
2538159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *ptcursor_next)(krb5_context,
2539159d09a2SMark Phalan 						   krb5_cc_ptcursor,
2540159d09a2SMark Phalan 						   krb5_ccache *);
2541159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *ptcursor_free)(krb5_context,
2542159d09a2SMark Phalan 						   krb5_cc_ptcursor *);
2543159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *move)(krb5_context, krb5_ccache);
2544159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *lastchange)(krb5_context,
2545159d09a2SMark Phalan 						krb5_ccache, krb5_timestamp *);
2546159d09a2SMark Phalan     krb5_error_code (KRB5_CALLCONV *wasdefault)(krb5_context, krb5_ccache,
2547159d09a2SMark Phalan 						krb5_timestamp *);
2548505d05c7Sgtb };
2549505d05c7Sgtb 
2550505d05c7Sgtb extern const krb5_cc_ops *krb5_cc_dfl_ops;
2551505d05c7Sgtb 
2552159d09a2SMark Phalan krb5_error_code
2553159d09a2SMark Phalan krb5int_cc_os_default_name(krb5_context context, char **name);
2554159d09a2SMark Phalan 
2555159d09a2SMark Phalan /*
2556159d09a2SMark Phalan  * Cursor for iterating over ccache types
2557159d09a2SMark Phalan  */
2558159d09a2SMark Phalan struct krb5_cc_typecursor;
2559159d09a2SMark Phalan typedef struct krb5_cc_typecursor *krb5_cc_typecursor;
2560159d09a2SMark Phalan 
2561159d09a2SMark Phalan krb5_error_code
2562159d09a2SMark Phalan krb5int_cc_typecursor_new(krb5_context context, krb5_cc_typecursor *cursor);
2563159d09a2SMark Phalan 
2564159d09a2SMark Phalan krb5_error_code
2565159d09a2SMark Phalan krb5int_cc_typecursor_next(
2566159d09a2SMark Phalan     krb5_context context,
2567159d09a2SMark Phalan     krb5_cc_typecursor cursor,
2568159d09a2SMark Phalan     const struct _krb5_cc_ops **ops);
2569159d09a2SMark Phalan 
2570159d09a2SMark Phalan krb5_error_code
2571159d09a2SMark Phalan krb5int_cc_typecursor_free(
2572159d09a2SMark Phalan     krb5_context context,
2573159d09a2SMark Phalan     krb5_cc_typecursor *cursor);
2574159d09a2SMark Phalan 
2575505d05c7Sgtb typedef struct _krb5_donot_replay {
2576505d05c7Sgtb     krb5_magic magic;
2577505d05c7Sgtb     krb5_ui_4 hash;
2578159d09a2SMark Phalan     char *server;			/* null-terminated */
2579159d09a2SMark Phalan     char *client;			/* null-terminated */
2580*ba7b222eSGlenn Barry     char *msghash;                      /* null-terminated */
2581505d05c7Sgtb     krb5_int32 cusec;
2582505d05c7Sgtb     krb5_timestamp ctime;
2583505d05c7Sgtb } krb5_donot_replay;
2584505d05c7Sgtb 
2585505d05c7Sgtb krb5_error_code krb5_rc_default
2586159d09a2SMark Phalan 	(krb5_context,
2587159d09a2SMark Phalan 		krb5_rcache *);
2588505d05c7Sgtb krb5_error_code krb5_rc_resolve_type
2589159d09a2SMark Phalan 	(krb5_context,
2590159d09a2SMark Phalan 		krb5_rcache *,char *);
2591505d05c7Sgtb krb5_error_code krb5_rc_resolve_full
2592159d09a2SMark Phalan 	(krb5_context,
2593159d09a2SMark Phalan 		krb5_rcache *,char *);
2594505d05c7Sgtb char * krb5_rc_get_type
2595159d09a2SMark Phalan 	(krb5_context,
2596159d09a2SMark Phalan 		krb5_rcache);
2597505d05c7Sgtb char * krb5_rc_default_type
2598159d09a2SMark Phalan 	(krb5_context);
2599505d05c7Sgtb char * krb5_rc_default_name
2600159d09a2SMark Phalan 	(krb5_context);
2601505d05c7Sgtb krb5_error_code krb5_auth_to_rep
2602159d09a2SMark Phalan 	(krb5_context,
2603159d09a2SMark Phalan 		krb5_tkt_authent *,
2604159d09a2SMark Phalan 		krb5_donot_replay *);
2605159d09a2SMark Phalan 
2606505d05c7Sgtb 
2607505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_initialize
2608159d09a2SMark Phalan 	(krb5_context, krb5_rcache,krb5_deltat);
2609505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_recover_or_initialize
2610159d09a2SMark Phalan 	(krb5_context, krb5_rcache,krb5_deltat);
2611505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_recover
2612159d09a2SMark Phalan 	(krb5_context, krb5_rcache);
2613505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_destroy
2614159d09a2SMark Phalan 	(krb5_context, krb5_rcache);
2615505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_close
2616159d09a2SMark Phalan 	(krb5_context, krb5_rcache);
2617505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_store
2618159d09a2SMark Phalan 	(krb5_context, krb5_rcache,krb5_donot_replay *);
2619505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_expunge
2620159d09a2SMark Phalan 	(krb5_context, krb5_rcache);
2621505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_get_lifespan
2622159d09a2SMark Phalan 	(krb5_context, krb5_rcache,krb5_deltat *);
2623505d05c7Sgtb char *KRB5_CALLCONV krb5_rc_get_name
2624159d09a2SMark Phalan 	(krb5_context, krb5_rcache);
2625505d05c7Sgtb krb5_error_code KRB5_CALLCONV krb5_rc_resolve
2626159d09a2SMark Phalan 	(krb5_context, krb5_rcache, char *);
2627505d05c7Sgtb 
2628505d05c7Sgtb typedef struct _krb5_kt_ops {
2629505d05c7Sgtb     krb5_magic magic;
2630505d05c7Sgtb     char *prefix;
2631505d05c7Sgtb     /* routines always present */
2632505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *resolve)
2633159d09a2SMark Phalan 	(krb5_context,
2634159d09a2SMark Phalan 		 const char *,
2635159d09a2SMark Phalan 		 krb5_keytab *);
2636505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *get_name)
2637159d09a2SMark Phalan 	(krb5_context,
2638159d09a2SMark Phalan 		 krb5_keytab,
2639159d09a2SMark Phalan 		 char *,
2640159d09a2SMark Phalan 		 unsigned int);
2641505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *close)
2642159d09a2SMark Phalan 	(krb5_context,
2643159d09a2SMark Phalan 		 krb5_keytab);
2644505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *get)
2645159d09a2SMark Phalan 	(krb5_context,
2646159d09a2SMark Phalan 		 krb5_keytab,
2647159d09a2SMark Phalan 		 krb5_const_principal,
2648159d09a2SMark Phalan 		 krb5_kvno,
2649159d09a2SMark Phalan 		 krb5_enctype,
2650159d09a2SMark Phalan 		 krb5_keytab_entry *);
2651505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *start_seq_get)
2652159d09a2SMark Phalan 	(krb5_context,
2653159d09a2SMark Phalan 		 krb5_keytab,
2654159d09a2SMark Phalan 		 krb5_kt_cursor *);
2655505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *get_next)
2656159d09a2SMark Phalan 	(krb5_context,
2657159d09a2SMark Phalan 		 krb5_keytab,
2658159d09a2SMark Phalan 		 krb5_keytab_entry *,
2659159d09a2SMark Phalan 		 krb5_kt_cursor *);
2660505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *end_get)
2661159d09a2SMark Phalan 	(krb5_context,
2662159d09a2SMark Phalan 		 krb5_keytab,
2663159d09a2SMark Phalan 		 krb5_kt_cursor *);
2664505d05c7Sgtb     /* routines to be included on extended version (write routines) */
2665505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *add)
2666159d09a2SMark Phalan 	(krb5_context,
2667159d09a2SMark Phalan 		 krb5_keytab,
2668159d09a2SMark Phalan 		 krb5_keytab_entry *);
2669505d05c7Sgtb     krb5_error_code (KRB5_CALLCONV *remove)
2670159d09a2SMark Phalan 	(krb5_context,
2671159d09a2SMark Phalan 		 krb5_keytab,
2672159d09a2SMark Phalan 		  krb5_keytab_entry *);
2673505d05c7Sgtb 
2674505d05c7Sgtb     /* Handle for serializer */
2675505d05c7Sgtb     const krb5_ser_entry *serializer;
2676505d05c7Sgtb } krb5_kt_ops;
2677505d05c7Sgtb 
2678505d05c7Sgtb extern const krb5_kt_ops krb5_kt_dfl_ops;
2679505d05c7Sgtb 
2680505d05c7Sgtb extern krb5_error_code krb5int_translate_gai_error (int);
2681505d05c7Sgtb 
2682505d05c7Sgtb /* Not sure it's ready for exposure just yet.  */
2683505d05c7Sgtb extern krb5_error_code
2684505d05c7Sgtb krb5int_c_mandatory_cksumtype (krb5_context, krb5_enctype, krb5_cksumtype *);
2685505d05c7Sgtb 
2686505d05c7Sgtb extern int krb5int_crypto_init (void);
2687505d05c7Sgtb extern int krb5int_prng_init(void);
2688505d05c7Sgtb 
2689505d05c7Sgtb /*
2690505d05c7Sgtb  * SUNW14resync
2691505d05c7Sgtb  * Hack (?) to neuter C99 "inline" which causes warnings w/our build.
2692505d05c7Sgtb  */
2693505d05c7Sgtb #define inline
2694505d05c7Sgtb 
2695505d05c7Sgtb /* Solaris kerberos */
2696505d05c7Sgtb krb5_boolean KRB5_CALLCONV is_in_keytype
2697505d05c7Sgtb 	(krb5_const krb5_enctype *keytype,
2698505d05c7Sgtb 	int numkeytypes, krb5_enctype enctype);
2699505d05c7Sgtb 
270024da5b34Srie /*
270124da5b34Srie  * Solaris Kerberos
270224da5b34Srie  * Use krb5_getuid() to select the mechanism to obtain the uid.
270324da5b34Srie  */
270424da5b34Srie extern uid_t	krb5_getuid();
2705ab9b2e15Sgtb 
2706fe598cdcSmp /*
2707fe598cdcSmp  * Referral definitions, debugging hooks, and subfunctions.
2708fe598cdcSmp  */
2709fe598cdcSmp #define        KRB5_REFERRAL_MAXHOPS	5
2710fe598cdcSmp /* #define DEBUG_REFERRALS */
2711fe598cdcSmp 
2712fe598cdcSmp #ifdef DEBUG_REFERRALS
2713fe598cdcSmp void krb5int_dbgref_dump_principal(char *, krb5_principal);
2714fe598cdcSmp #endif
2715fe598cdcSmp 
2716fe598cdcSmp /* Common hostname-parsing code. */
2717fe598cdcSmp krb5_error_code KRB5_CALLCONV krb5int_clean_hostname
2718fe598cdcSmp 	(krb5_context,
2719fe598cdcSmp 		const char *,
2720fe598cdcSmp 		char *,
2721fe598cdcSmp 		size_t);
2722505d05c7Sgtb 
2723*ba7b222eSGlenn Barry /*
2724*ba7b222eSGlenn Barry  * Solaris Kerberos
2725*ba7b222eSGlenn Barry  * Kernel & user space realloc.
2726*ba7b222eSGlenn Barry  */
2727*ba7b222eSGlenn Barry void *krb5int_realloc
2728*ba7b222eSGlenn Barry 	(void *oldp,
2729*ba7b222eSGlenn Barry 	 size_t new_size,
2730*ba7b222eSGlenn Barry 	 size_t old_size);
27317c478bd9Sstevel@tonic-gate #endif /* _KRB5_INT_H */
2732