17c478bd9Sstevel@tonic-gate /*
2159d09a2SMark Phalan  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
37c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
47c478bd9Sstevel@tonic-gate  */
57c478bd9Sstevel@tonic-gate 
67c478bd9Sstevel@tonic-gate /*
77c478bd9Sstevel@tonic-gate  * lib/crypto/des/des_int.h
87c478bd9Sstevel@tonic-gate  *
9159d09a2SMark Phalan  * Copyright 1987, 1988, 1990, 2002 by the Massachusetts Institute of
10159d09a2SMark Phalan  * Technology.  All Rights Reserved.
117c478bd9Sstevel@tonic-gate  *
127c478bd9Sstevel@tonic-gate  * Export of this software from the United States of America may
137c478bd9Sstevel@tonic-gate  *   require a specific license from the United States Government.
147c478bd9Sstevel@tonic-gate  *   It is the responsibility of any person or organization contemplating
157c478bd9Sstevel@tonic-gate  *   export to obtain such a license before exporting.
16*55fea89dSDan Cross  *
177c478bd9Sstevel@tonic-gate  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
187c478bd9Sstevel@tonic-gate  * distribute this software and its documentation for any purpose and
197c478bd9Sstevel@tonic-gate  * without fee is hereby granted, provided that the above copyright
207c478bd9Sstevel@tonic-gate  * notice appear in all copies and that both that copyright notice and
217c478bd9Sstevel@tonic-gate  * this permission notice appear in supporting documentation, and that
227c478bd9Sstevel@tonic-gate  * the name of M.I.T. not be used in advertising or publicity pertaining
237c478bd9Sstevel@tonic-gate  * to distribution of the software without specific, written prior
247c478bd9Sstevel@tonic-gate  * permission.  Furthermore if you modify this software you must label
257c478bd9Sstevel@tonic-gate  * your software as modified software and not distribute it in such a
267c478bd9Sstevel@tonic-gate  * fashion that it might be confused with the original M.I.T. software.
277c478bd9Sstevel@tonic-gate  * M.I.T. makes no representations about the suitability of
287c478bd9Sstevel@tonic-gate  * this software for any purpose.  It is provided "as is" without express
297c478bd9Sstevel@tonic-gate  * or implied warranty.
30*55fea89dSDan Cross  *
317c478bd9Sstevel@tonic-gate  *
327c478bd9Sstevel@tonic-gate  * Private include file for the Data Encryption Standard library.
337c478bd9Sstevel@tonic-gate  */
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate /*
367c478bd9Sstevel@tonic-gate  * Copyright (C) 1998 by the FundsXpress, INC.
37*55fea89dSDan Cross  *
387c478bd9Sstevel@tonic-gate  * All rights reserved.
39*55fea89dSDan Cross  *
407c478bd9Sstevel@tonic-gate  * Export of this software from the United States of America may require
417c478bd9Sstevel@tonic-gate  * a specific license from the United States Government.  It is the
427c478bd9Sstevel@tonic-gate  * responsibility of any person or organization contemplating export to
437c478bd9Sstevel@tonic-gate  * obtain such a license before exporting.
44*55fea89dSDan Cross  *
457c478bd9Sstevel@tonic-gate  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
467c478bd9Sstevel@tonic-gate  * distribute this software and its documentation for any purpose and
477c478bd9Sstevel@tonic-gate  * without fee is hereby granted, provided that the above copyright
487c478bd9Sstevel@tonic-gate  * notice appear in all copies and that both that copyright notice and
497c478bd9Sstevel@tonic-gate  * this permission notice appear in supporting documentation, and that
507c478bd9Sstevel@tonic-gate  * the name of FundsXpress. not be used in advertising or publicity pertaining
517c478bd9Sstevel@tonic-gate  * to distribution of the software without specific, written prior
527c478bd9Sstevel@tonic-gate  * permission.  FundsXpress makes no representations about the suitability of
537c478bd9Sstevel@tonic-gate  * this software for any purpose.  It is provided "as is" without express
547c478bd9Sstevel@tonic-gate  * or implied warranty.
55*55fea89dSDan Cross  *
567c478bd9Sstevel@tonic-gate  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
577c478bd9Sstevel@tonic-gate  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
587c478bd9Sstevel@tonic-gate  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
597c478bd9Sstevel@tonic-gate  */
607c478bd9Sstevel@tonic-gate 
617c478bd9Sstevel@tonic-gate /* only do the whole thing once	 */
62159d09a2SMark Phalan #ifndef DES_INTERNAL_DEFS
63159d09a2SMark Phalan #define DES_INTERNAL_DEFS
647c478bd9Sstevel@tonic-gate 
657c478bd9Sstevel@tonic-gate 
66159d09a2SMark Phalan #include "k5-int.h"
677c478bd9Sstevel@tonic-gate /*
687c478bd9Sstevel@tonic-gate  * Begin "mit-des.h"
697c478bd9Sstevel@tonic-gate  */
707c478bd9Sstevel@tonic-gate #ifndef KRB5_MIT_DES__
717c478bd9Sstevel@tonic-gate #define KRB5_MIT_DES__
727c478bd9Sstevel@tonic-gate 
73505d05c7Sgtb #if 0 /* SUNW14resync */
74505d05c7Sgtb #define KRB5INT_CRYPTO_DES_INT  /* skip krb4-specific DES stuff */
75505d05c7Sgtb #include "kerberosIV/des.h"     /* for des_key_schedule, etc. */
76505d05c7Sgtb #undef KRB5INT_CRYPTO_DES_INT   /* don't screw other inclusions of des.h */
777c478bd9Sstevel@tonic-gate #endif
787c478bd9Sstevel@tonic-gate 
79505d05c7Sgtb /*
80505d05c7Sgtb  * SUNW14resync
81505d05c7Sgtb  * Solaris Kerberos does not do krb4 so we don't have its des.h file
82505d05c7Sgtb  * but we need a few symbols from it so we include them here.
83505d05c7Sgtb  */
84505d05c7Sgtb /* begin: from mit kerberosIV/des.h */
85505d05c7Sgtb #if UINT_MAX >= 0xFFFFFFFFUL
867c478bd9Sstevel@tonic-gate #define DES_INT32 int
87505d05c7Sgtb #define DES_UINT32 unsigned int
887c478bd9Sstevel@tonic-gate #else
897c478bd9Sstevel@tonic-gate #define DES_INT32 long
90505d05c7Sgtb #define DES_UINT32 unsigned long
917c478bd9Sstevel@tonic-gate #endif
92505d05c7Sgtb /* end: from mit kerberosIV/des.h */
93505d05c7Sgtb 
94505d05c7Sgtb typedef unsigned char des_cblock[8];    /* crypto-block size */
95505d05c7Sgtb typedef struct des_ks_struct {  DES_INT32 _[2]; } des_key_schedule[16];
96505d05c7Sgtb 
97505d05c7Sgtb 
98505d05c7Sgtb typedef des_cblock mit_des_cblock;
99505d05c7Sgtb typedef des_key_schedule mit_des_key_schedule;
1007c478bd9Sstevel@tonic-gate 
1017c478bd9Sstevel@tonic-gate /* Triple-DES structures */
1027c478bd9Sstevel@tonic-gate typedef mit_des_cblock		mit_des3_cblock[3];
103505d05c7Sgtb typedef mit_des_key_schedule	mit_des3_key_schedule[3];
1047c478bd9Sstevel@tonic-gate 
1057c478bd9Sstevel@tonic-gate #define MIT_DES_ENCRYPT	1
1067c478bd9Sstevel@tonic-gate #define MIT_DES_DECRYPT	0
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate #define K5ROUNDUP(x, align)     (-(-(x) & -(align)))
1097c478bd9Sstevel@tonic-gate 
1107c478bd9Sstevel@tonic-gate /* the first byte of the key is already in the keyblock */
1117c478bd9Sstevel@tonic-gate 
1127c478bd9Sstevel@tonic-gate #define MIT_DES_BLOCK_LENGTH 		(8*sizeof(krb5_octet))
1137c478bd9Sstevel@tonic-gate #define	MIT_DES_CBC_CRC_PAD_MINIMUM	CRC32_CKSUM_LENGTH
1147c478bd9Sstevel@tonic-gate /* This used to be 8*sizeof(krb5_octet) */
1157c478bd9Sstevel@tonic-gate #define MIT_DES_KEYSIZE		 	8
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate #define MIT_DES_CBC_CKSUM_LENGTH	(4*sizeof(krb5_octet))
1187c478bd9Sstevel@tonic-gate 
1197c478bd9Sstevel@tonic-gate /*
1207c478bd9Sstevel@tonic-gate  * Check if k5-int.h has been included before us.  If so, then check to see
1217c478bd9Sstevel@tonic-gate  * that our view of the DES key size is the same as k5-int.h's.
1227c478bd9Sstevel@tonic-gate  */
1237c478bd9Sstevel@tonic-gate #ifdef	KRB5_MIT_DES_KEYSIZE
1247c478bd9Sstevel@tonic-gate #if	MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE
1257c478bd9Sstevel@tonic-gate error(MIT_DES_KEYSIZE does not equal KRB5_MIT_DES_KEYSIZE)
1267c478bd9Sstevel@tonic-gate #endif	/* MIT_DES_KEYSIZE != KRB5_MIT_DES_KEYSIZE */
1277c478bd9Sstevel@tonic-gate #endif	/* KRB5_MIT_DES_KEYSIZE */
1287c478bd9Sstevel@tonic-gate #endif /* KRB5_MIT_DES__ */
1297c478bd9Sstevel@tonic-gate /*
1307c478bd9Sstevel@tonic-gate  * End "mit-des.h"
1317c478bd9Sstevel@tonic-gate  */
1327c478bd9Sstevel@tonic-gate 
1337c478bd9Sstevel@tonic-gate #ifndef _KERNEL
1347c478bd9Sstevel@tonic-gate /* afsstring2key.c */
1357c478bd9Sstevel@tonic-gate extern krb5_error_code mit_afs_string_to_key
136505d05c7Sgtb (krb5_context context,
137505d05c7Sgtb 		krb5_keyblock *keyblock,
138505d05c7Sgtb 		const krb5_data  *data,
139505d05c7Sgtb 		const krb5_data  *salt);
1407c478bd9Sstevel@tonic-gate #endif
1417c478bd9Sstevel@tonic-gate 
1427c478bd9Sstevel@tonic-gate /* f_cksum.c */
1437c478bd9Sstevel@tonic-gate extern unsigned long mit_des_cbc_cksum
144159d09a2SMark Phalan ( krb5_context context,
145159d09a2SMark Phalan 	const krb5_octet  *, krb5_octet  *, unsigned long ,
146159d09a2SMark Phalan 	krb5_keyblock *, const krb5_octet  *);
1477c478bd9Sstevel@tonic-gate 
1487c478bd9Sstevel@tonic-gate /* f_cbc.c */
1497c478bd9Sstevel@tonic-gate extern int mit_des_cbc_encrypt
150505d05c7Sgtb (krb5_context context,
151505d05c7Sgtb 	const mit_des_cblock  *in,
152505d05c7Sgtb 	mit_des_cblock  *out, long length,
1537c478bd9Sstevel@tonic-gate 	krb5_keyblock *key,
1547c478bd9Sstevel@tonic-gate 	mit_des_cblock ivec,
155505d05c7Sgtb 	int encrypt);
156505d05c7Sgtb 
157505d05c7Sgtb #define mit_des_zeroblock krb5int_c_mit_des_zeroblock
158505d05c7Sgtb extern const mit_des_cblock mit_des_zeroblock;
1597c478bd9Sstevel@tonic-gate 
1607c478bd9Sstevel@tonic-gate /* fin_rndkey.c */
1617c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des_finish_random_key
162159d09a2SMark Phalan     ( const krb5_encrypt_block *,
163159d09a2SMark Phalan 		krb5_pointer *);
1647c478bd9Sstevel@tonic-gate 
1657c478bd9Sstevel@tonic-gate /* finish_key.c */
1667c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des_finish_key
167159d09a2SMark Phalan     ( krb5_encrypt_block *);
1687c478bd9Sstevel@tonic-gate 
1697c478bd9Sstevel@tonic-gate /* key_parity.c */
170159d09a2SMark Phalan extern void mit_des_fixup_key_parity (mit_des_cblock );
171505d05c7Sgtb extern int mit_des_check_key_parity (mit_des_cblock );
1727c478bd9Sstevel@tonic-gate 
1737c478bd9Sstevel@tonic-gate /* process_ky.c */
1747c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des_process_key
175159d09a2SMark Phalan     ( krb5_encrypt_block *,  const krb5_keyblock *);
1767c478bd9Sstevel@tonic-gate 
1777c478bd9Sstevel@tonic-gate /* string2key.c */
1787c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des_string_to_key
179*55fea89dSDan Cross     ( const krb5_encrypt_block *,
180159d09a2SMark Phalan 	       krb5_keyblock *, const krb5_data *, const krb5_data *);
1817c478bd9Sstevel@tonic-gate 
1827c478bd9Sstevel@tonic-gate /* weak_key.c */
183159d09a2SMark Phalan extern int mit_des_is_weak_key (mit_des_cblock );
1847c478bd9Sstevel@tonic-gate 
1857c478bd9Sstevel@tonic-gate /* cmb_keys.c */
1867c478bd9Sstevel@tonic-gate krb5_error_code mit_des_combine_subkeys
187159d09a2SMark Phalan     (const krb5_keyblock *, const krb5_keyblock *,
188159d09a2SMark Phalan 	       krb5_keyblock **);
1897c478bd9Sstevel@tonic-gate 
1907c478bd9Sstevel@tonic-gate /* f_pcbc.c */
1917c478bd9Sstevel@tonic-gate int mit_des_pcbc_encrypt ();
1927c478bd9Sstevel@tonic-gate 
193505d05c7Sgtb /* f_sched.c */
194159d09a2SMark Phalan int mit_des_make_key_sched(mit_des_cblock, mit_des_key_schedule);
195159d09a2SMark Phalan 
196505d05c7Sgtb 
1977c478bd9Sstevel@tonic-gate /* misc.c */
198159d09a2SMark Phalan extern void swap_bits (char *);
199159d09a2SMark Phalan extern unsigned long long_swap_bits (unsigned long );
200159d09a2SMark Phalan extern unsigned long swap_six_bits_to_ansi (unsigned long );
201159d09a2SMark Phalan extern unsigned long swap_four_bits_to_ansi (unsigned long );
202159d09a2SMark Phalan extern unsigned long swap_bit_pos_1 (unsigned long );
203505d05c7Sgtb extern unsigned long swap_bit_pos_0 (unsigned long );
204505d05c7Sgtb extern unsigned long swap_bit_pos_0_to_ansi (unsigned long );
205505d05c7Sgtb extern unsigned long rev_swap_bit_pos_0 (unsigned long );
206505d05c7Sgtb extern unsigned long swap_byte_bits (unsigned long );
207505d05c7Sgtb extern unsigned long swap_long_bytes_bit_number (unsigned long );
2087c478bd9Sstevel@tonic-gate #ifdef FILE
2097c478bd9Sstevel@tonic-gate /* XXX depends on FILE being a #define! */
210505d05c7Sgtb extern void test_set (FILE *, const char *, int, const char *, int);
2117c478bd9Sstevel@tonic-gate #endif
2127c478bd9Sstevel@tonic-gate 
2137c478bd9Sstevel@tonic-gate /* d3_cbc.c */
2147c478bd9Sstevel@tonic-gate extern int mit_des3_cbc_encrypt
215159d09a2SMark Phalan 	(krb5_context context,
216159d09a2SMark Phalan 	 const mit_des_cblock  *in,
217159d09a2SMark Phalan 	 mit_des_cblock  *out,
218159d09a2SMark Phalan 	 unsigned long length,
219159d09a2SMark Phalan 	 krb5_keyblock *key,
220159d09a2SMark Phalan 	 const mit_des_cblock ivec,
221159d09a2SMark Phalan 	 int enc);
2227c478bd9Sstevel@tonic-gate 
2237c478bd9Sstevel@tonic-gate /* d3_procky.c */
2247c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des3_process_key
225159d09a2SMark Phalan 	(krb5_encrypt_block * eblock,
226505d05c7Sgtb 		   const krb5_keyblock * keyblock);
2277c478bd9Sstevel@tonic-gate 
2287c478bd9Sstevel@tonic-gate /* d3_str2ky.c */
2297c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des3_string_to_key
230159d09a2SMark Phalan 	(const krb5_encrypt_block * eblock,
231159d09a2SMark Phalan 		   krb5_keyblock * keyblock,
232159d09a2SMark Phalan 		   const krb5_data * data,
233159d09a2SMark Phalan 		   const krb5_data * salt);
2347c478bd9Sstevel@tonic-gate 
2357c478bd9Sstevel@tonic-gate /* u_nfold.c */
2367c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des_n_fold
237159d09a2SMark Phalan 	(const krb5_octet * input,
2387c478bd9Sstevel@tonic-gate 		   const size_t in_len,
2397c478bd9Sstevel@tonic-gate 		   krb5_octet * output,
240505d05c7Sgtb 		   const size_t out_len);
2417c478bd9Sstevel@tonic-gate 
2427c478bd9Sstevel@tonic-gate extern krb5_error_code mit_des_set_random_sequence_number
243159d09a2SMark Phalan 	(const krb5_data * sequence,
244505d05c7Sgtb 		   krb5_pointer random_state);
2457c478bd9Sstevel@tonic-gate 
2467c478bd9Sstevel@tonic-gate #endif	/*DES_INTERNAL_DEFS*/
247