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