2 C K U A T 2 . H -- Kerberos headers for C-Kermit
4 Copyright (C) 1985, 2009,
5 Trustees of Columbia University in the City of New York.
6 All rights reserved. See the C-Kermit COPYING.TXT file or the
7 copyright text in the ckcmai.c module for disclaimer and permissions.
10 Kerberos IV and V intergration.
11 Jeffrey E Altman (jaltman@secure-endpoints.com)
12 Secure Endpoints Inc., New York City
15 * Based on a concatenation of all necessary include files distributed with
16 * the Kerberos 5 NT Alpha 2 Telnet package from MIT.
22 * Copyright (c) 1991, 1993
23 * The Regents of the University of California. All rights reserved.
25 * Redistribution and use in source and binary forms, with or without
26 * modification, are permitted provided that the following conditions
28 * 1. Redistributions of source code must retain the above copyright
29 * notice, this list of conditions and the following disclaimer.
30 * 2. Redistributions in binary form must reproduce the above copyright
31 * notice, this list of conditions and the following disclaimer in the
32 * documentation and/or other materials provided with the distribution.
33 * 3. All advertising materials mentioning features or use of this software
34 * must display the following acknowledgement:
35 * This product includes software developed by the University of
36 * California, Berkeley and its contributors.
37 * 4. Neither the name of the University nor the names of its contributors
38 * may be used to endorse or promote products derived from this software
39 * without specific prior written permission.
41 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53 * @(#)encrypt.h 8.1 (Berkeley) 6/4/93
57 * Copyright (C) 1990 by the Massachusetts Institute of Technology
59 * Export of this software from the United States of America may
60 * require a specific license from the United States Government.
61 * It is the responsibility of any person or organization contemplating
62 * export to obtain such a license before exporting.
64 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
65 * distribute this software and its documentation for any purpose and
66 * without fee is hereby granted, provided that the above copyright
67 * notice appear in all copies and that both that copyright notice and
68 * this permission notice appear in supporting documentation, and that
69 * the name of M.I.T. not be used in advertising or publicity pertaining
70 * to distribution of the software without specific, written prior
71 * permission. M.I.T. makes no representations about the suitability of
72 * this software for any purpose. It is provided "as is" without express
73 * or implied warranty.
78 #ifndef __ENCRYPTION__
79 #define __ENCRYPTION__
86 typedef unsigned char Block[8];
87 #endif /* NOBLOCKDEF */
88 typedef unsigned char *BlockT;
89 #ifndef KRB4 /* already defined in kerberosiv/des.h */
90 typedef struct des_ks_struct { Block _; } Schedule[16];
93 #ifndef NOBLOCKDEF /* already defined in kerberosiv/des.h */
94 typedef struct des_ks_struct { Block _; } Schedule[16];
95 #endif /* NOBLOCKDEF */
99 #define VALIDKEY(key) (key[0]|key[1]|key[2]|key[3]|key[4]|key[5]|key[6]|key[7])
101 #define SAMEKEY(k1, k2) (!memcmp((void *)k1, (void *)k2, sizeof(Block)))
102 #endif /* CK_DES_C */
104 typedef struct _session_key {
114 void (*output)(unsigned char *, int);
117 int (*start)(int, int);
118 int (*is)(unsigned char *, int);
119 int (*reply)(unsigned char *, int);
120 int (*session)(Session_Key *, int);
121 int (*keyid)(int, unsigned char *, int *);
122 void (*printsub)(unsigned char *, int, unsigned char *, int);
146 int encrypt_parse(unsigned char *, int);
149 int printsub(char, unsigned char *, size_t);
152 #define SK_GENERIC 0 /* Just a string of bits */
153 #define SK_DES 1 /* Matched Kerberos v5 ENCTYPE_DES */
155 void encrypt_init P((kstream,int));
156 Encryptions *findencryption P((int));
157 void encrypt_send_support P((void));
158 void encrypt_auto P((int));
159 void decrypt_auto P((int));
160 int encrypt_is P((unsigned char *, int));
161 int encrypt_reply P((unsigned char *, int));
162 void encrypt_start_input P((int));
163 int encrypt_session_key P((Session_Key *, int));
164 int encrypt_dont_support P((int));
165 void encrypt_end_input P((void));
166 void encrypt_start_output P((int));
167 void encrypt_end_output P((void));
168 void encrypt_send_request_start P((void));
169 void encrypt_send_request_end P((void));
170 void encrypt_send_end P((void));
171 void encrypt_wait P((void));
172 int encrypt_is_encrypting P((void));
173 void encrypt_send_support P((void));
174 int encrypt_send_keyid P((int, unsigned char *, int, int));
176 int encrypt_cmd P((int, char **));
177 void encrypt_display P((void));
180 void krbdes_encrypt P((unsigned char *, int));
181 int krbdes_decrypt P((int));
182 int krbdes_is P((unsigned char *, int));
183 int krbdes_reply P((unsigned char *, int));
184 void krbdes_init P((int));
185 int krbdes_start P((int, int));
186 void krbdes_session P((Session_Key *, int));
187 void krbdes_printsub P((unsigned char *, int, unsigned char *, int));
188 #endif /* CK_KERBEROS */
190 void cfb64_encrypt P((unsigned char *, int));
191 int cfb64_decrypt P((int));
192 void cfb64_init P((int));
193 int cfb64_start P((int, int));
194 int cfb64_is P((unsigned char *, int));
195 int cfb64_reply P((unsigned char *, int));
196 int cfb64_session P((Session_Key *, int));
197 int cfb64_keyid P((int, unsigned char *, int *));
198 void cfb64_printsub P((unsigned char *, int, unsigned char *, int));
200 void ofb64_encrypt P((unsigned char *, int));
201 int ofb64_decrypt P((int));
202 void ofb64_init P((int));
203 int ofb64_start P((int, int));
204 int ofb64_is P((unsigned char *, int));
205 int ofb64_reply P((unsigned char *, int));
206 int ofb64_session P((Session_Key *, int));
207 int ofb64_keyid P((int, unsigned char *, int *));
208 void ofb64_printsub P((unsigned char *, int, unsigned char *, int));
210 void des3_cfb64_encrypt P((unsigned char *, int));
211 int des3_cfb64_decrypt P((int));
212 void des3_cfb64_init P((int));
213 int des3_cfb64_start P((int, int));
214 int des3_cfb64_is P((unsigned char *, int));
215 int des3_cfb64_reply P((unsigned char *, int));
216 int des3_cfb64_session P((Session_Key *, int));
217 int des3_cfb64_keyid P((int, unsigned char *, int *));
218 void des3_cfb64_printsub P((unsigned char *, int, unsigned char *, int));
220 void des3_ofb64_encrypt P((unsigned char *, int));
221 int des3_ofb64_decrypt P((int));
222 void des3_ofb64_init P((int));
223 int des3_ofb64_start P((int, int));
224 int des3_ofb64_is P((unsigned char *, int));
225 int des3_ofb64_reply P((unsigned char *, int));
226 int des3_ofb64_session P((Session_Key *, int));
227 int des3_ofb64_keyid P((int, unsigned char *, int *));
228 void des3_ofb64_printsub P((unsigned char *, int, unsigned char *, int));
230 #ifdef CAST_ENCRYPTION
231 void cast_cfb64_encrypt P((unsigned char *, int));
232 int cast_cfb64_decrypt P((int));
233 void cast_cfb64_init P((int));
234 int cast_cfb64_start P((int, int));
235 int cast_cfb64_is P((unsigned char *, int));
236 int cast_cfb64_reply P((unsigned char *, int));
237 int cast_cfb64_session P((Session_Key *, int));
238 int cast_cfb64_keyid P((int, unsigned char *, int *));
239 void cast_cfb64_printsub P((unsigned char *, int, unsigned char *, int));
241 void cast_ofb64_encrypt P((unsigned char *, int));
242 int cast_ofb64_decrypt P((int));
243 void cast_ofb64_init P((int));
244 int cast_ofb64_start P((int, int));
245 int cast_ofb64_is P((unsigned char *, int));
246 int cast_ofb64_reply P((unsigned char *, int));
247 int cast_ofb64_session P((Session_Key *, int));
248 int cast_ofb64_keyid P((int, unsigned char *, int *));
249 void cast_ofb64_printsub P((unsigned char *, int, unsigned char *, int));
251 void castexp_cfb64_encrypt P((unsigned char *, int));
252 int castexp_cfb64_decrypt P((int));
253 void castexp_cfb64_init P((int));
254 int castexp_cfb64_start P((int, int));
255 int castexp_cfb64_is P((unsigned char *, int));
256 int castexp_cfb64_reply P((unsigned char *, int));
257 int castexp_cfb64_session P((Session_Key *, int));
258 int castexp_cfb64_keyid P((int, unsigned char *, int *));
259 void castexp_cfb64_printsub P((unsigned char *, int, unsigned char *, int));
261 void castexp_ofb64_encrypt P((unsigned char *, int));
262 int castexp_ofb64_decrypt P((int));
263 void castexp_ofb64_init P((int));
264 int castexp_ofb64_start P((int, int));
265 int castexp_ofb64_is P((unsigned char *, int));
266 int castexp_ofb64_reply P((unsigned char *, int));
267 int castexp_ofb64_session P((Session_Key *, int));
268 int castexp_ofb64_keyid P((int, unsigned char *, int *));
269 void castexp_ofb64_printsub P((unsigned char *, int, unsigned char *, int));
270 #endif /* CAST_ENCRYPTION */
272 /* int des_string_to_key P((char *, Block)); */
275 extern int encrypt_debug_mode;
278 int decrypt_ks_hack(unsigned char *, int);
280 #endif /* __ENCRYPTION__ */
281 #endif /* ENCRYPTION */
284 struct _crypt_dll_init {
287 /* Version 1 variables */
288 int (*p_ttol)(char *,int);
289 int (*p_dodebug)(int,char *,char *,CK_OFF_T);
290 int (*p_dohexdump)(char *,char *,int);
291 void (*p_tn_debug)(char *);
292 int (*p_vscrnprintf)(char *, ...);
294 /* Version 2 variables */
297 /* Version 3 variables */
298 void (*p_install_funcs)(char *,void *);
300 /* Version 5 variables */
301 unsigned long (*p_reqtelmutex)(unsigned long);
302 unsigned long (*p_reltelmutex)(void);
304 #endif /* CRYPT_DLL */
306 /* per Kerberos v5 protocol spec */
308 #define ENCTYPE_NULL 0x0000
310 #ifndef ENCTYPE_DES_CBC_CRC
311 #define ENCTYPE_DES_CBC_CRC 0x0001 /* DES cbc mode with CRC-32 */
313 #ifndef ENCTYPE_DES_CBC_MD4
314 #define ENCTYPE_DES_CBC_MD4 0x0002 /* DES cbc mode with RSA-MD4 */
316 #ifndef ENCTYPE_DES_CBC_MD5
317 #define ENCTYPE_DES_CBC_MD5 0x0003 /* DES cbc mode with RSA-MD5 */
319 #ifndef ENCTYPE_DES_CBC_RAW
320 #define ENCTYPE_DES_CBC_RAW 0x0004 /* DES cbc mode raw */
322 /* XXX deprecated? */
323 #ifndef ENCTYPE_DES3_CBC_SHA
324 #define ENCTYPE_DES3_CBC_SHA 0x0005 /* DES-3 cbc mode with NIST-SHA */
326 #ifndef ENCTYPE_DES3_CBC_RAW
327 #define ENCTYPE_DES3_CBC_RAW 0x0006 /* DES-3 cbc mode raw */
329 #ifndef ENCTYPE_DES_HMAC_SHA1
330 #define ENCTYPE_DES_HMAC_SHA1 0x0008
332 #ifndef ENCTYPE_DES3_CBC_SHA1
333 #define ENCTYPE_DES3_CBC_SHA1 0x0010
335 #ifndef ENCTYPE_AES128_CTS_HMAC_SHA1_96
336 #define ENCTYPE_AES128_CTS_HMAC_SHA1_96 0x0011
338 #ifndef ENCTYPE_AES256_CTS_HMAC_SHA1_96
339 #define ENCTYPE_AES256_CTS_HMAC_SHA1_96 0x0012
341 #ifndef ENCTYPE_ARCFOUR_HMAC
342 #define ENCTYPE_ARCFOUR_HMAC 0x0017
344 #ifndef ENCTYPE_ARCFOUR_HMAC_EXP
345 #define ENCTYPE_ARCFOUR_HMAC_EXP 0x0018
347 #ifndef ENCTYPE_LOCAL_RC4_MD4
348 #define ENCTYPE_LOCAL_RC4_MD4 0xFFFFFF80
350 #ifndef ENCTYPE_UNKNOWN
351 #define ENCTYPE_UNKNOWN 0x01ff
354 /* marc's DES-3 with 32-bit length */
355 #ifndef ENCTYPE_LOCAL_DES3_HMAC_SHA1
356 #define ENCTYPE_LOCAL_DES3_HMAC_SHA1 0x7007
358 #endif /* KRB5_TELNET_H */