|
|
1.1 ! root 1: /* crypto/des/des.org */ ! 2: /* Copyright (C) 1995-1997 Eric Young ([email protected]) ! 3: * All rights reserved. ! 4: * ! 5: * This package is an SSL implementation written ! 6: * by Eric Young ([email protected]). ! 7: * The implementation was written so as to conform with Netscapes SSL. ! 8: * ! 9: * This library is free for commercial and non-commercial use as long as ! 10: * the following conditions are aheared to. The following conditions ! 11: * apply to all code found in this distribution, be it the RC4, RSA, ! 12: * lhash, DES, etc., code; not just the SSL code. The SSL documentation ! 13: * included with this distribution is covered by the same copyright terms ! 14: * except that the holder is Tim Hudson ([email protected]). ! 15: * ! 16: * Copyright remains Eric Young's, and as such any Copyright notices in ! 17: * the code are not to be removed. ! 18: * If this package is used in a product, Eric Young should be given attribution ! 19: * as the author of the parts of the library used. ! 20: * This can be in the form of a textual message at program startup or ! 21: * in documentation (online or textual) provided with the package. ! 22: * ! 23: * Redistribution and use in source and binary forms, with or without ! 24: * modification, are permitted provided that the following conditions ! 25: * are met: ! 26: * 1. Redistributions of source code must retain the copyright ! 27: * notice, this list of conditions and the following disclaimer. ! 28: * 2. Redistributions in binary form must reproduce the above copyright ! 29: * notice, this list of conditions and the following disclaimer in the ! 30: * documentation and/or other materials provided with the distribution. ! 31: * 3. All advertising materials mentioning features or use of this software ! 32: * must display the following acknowledgement: ! 33: * "This product includes cryptographic software written by ! 34: * Eric Young ([email protected])" ! 35: * The word 'cryptographic' can be left out if the rouines from the library ! 36: * being used are not cryptographic related :-). ! 37: * 4. If you include any Windows specific code (or a derivative thereof) from ! 38: * the apps directory (application code) you must include an acknowledgement: ! 39: * "This product includes software written by Tim Hudson ([email protected])" ! 40: * ! 41: * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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 ! 51: * SUCH DAMAGE. ! 52: * ! 53: * The licence and distribution terms for any publically available version or ! 54: * derivative of this code cannot be changed. i.e. this code cannot simply be ! 55: * copied and put under another distribution licence ! 56: * [including the GNU Public Licence.] ! 57: */ ! 58: ! 59: /* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ! 60: * ! 61: * Always modify des.org since des.h is automatically generated from ! 62: * it during SSLeay configuration. ! 63: * ! 64: * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ! 65: */ ! 66: ! 67: #ifndef HEADER_DES_H ! 68: #define HEADER_DES_H ! 69: ! 70: #ifdef __cplusplus ! 71: extern "C" { ! 72: #endif ! 73: ! 74: #include <stdio.h> ! 75: ! 76: /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a ! 77: * %20 speed up (longs are 8 bytes, int's are 4). */ ! 78: #ifndef DES_LONG ! 79: #define DES_LONG unsigned long ! 80: #endif ! 81: ! 82: typedef unsigned char des_cblock[8]; ! 83: typedef struct des_ks_struct ! 84: { ! 85: union { ! 86: des_cblock _; ! 87: /* make sure things are correct size on machines with ! 88: * 8 byte longs */ ! 89: DES_LONG pad[2]; ! 90: } ks; ! 91: #undef _ ! 92: #define _ ks._ ! 93: } des_key_schedule[16]; ! 94: ! 95: #define DES_KEY_SZ (sizeof(des_cblock)) ! 96: #define DES_SCHEDULE_SZ (sizeof(des_key_schedule)) ! 97: ! 98: #define DES_ENCRYPT 1 ! 99: #define DES_DECRYPT 0 ! 100: ! 101: #define DES_CBC_MODE 0 ! 102: #define DES_PCBC_MODE 1 ! 103: ! 104: #define des_ecb2_encrypt(i,o,k1,k2,e) \ ! 105: des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) ! 106: ! 107: #define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ ! 108: des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) ! 109: ! 110: #define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ ! 111: des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) ! 112: ! 113: #define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ ! 114: des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) ! 115: ! 116: #define C_Block des_cblock ! 117: #define Key_schedule des_key_schedule ! 118: #ifdef KERBEROS ! 119: #define ENCRYPT DES_ENCRYPT ! 120: #define DECRYPT DES_DECRYPT ! 121: #endif ! 122: #define KEY_SZ DES_KEY_SZ ! 123: #define string_to_key des_string_to_key ! 124: #define read_pw_string des_read_pw_string ! 125: #define random_key des_random_key ! 126: #define pcbc_encrypt des_pcbc_encrypt ! 127: #define set_key des_set_key ! 128: #define key_sched des_key_sched ! 129: #define ecb_encrypt des_ecb_encrypt ! 130: #define cbc_encrypt des_cbc_encrypt ! 131: #define ncbc_encrypt des_ncbc_encrypt ! 132: #define xcbc_encrypt des_xcbc_encrypt ! 133: #define cbc_cksum des_cbc_cksum ! 134: #define quad_cksum des_quad_cksum ! 135: ! 136: /* For compatibility with the MIT lib - eay 20/05/92 */ ! 137: typedef des_key_schedule bit_64; ! 138: #define des_fixup_key_parity des_set_odd_parity ! 139: #define des_check_key_parity check_parity ! 140: ! 141: extern int des_check_key; /* defaults to false */ ! 142: extern int des_rw_mode; /* defaults to DES_PCBC_MODE */ ! 143: ! 144: /* The next line is used to disable full ANSI prototypes, if your ! 145: * compiler has problems with the prototypes, make sure this line always ! 146: * evaluates to true :-) */ ! 147: #if defined(MSDOS) || defined(__STDC__) ! 148: #undef NOPROTO ! 149: #endif ! 150: #ifndef NOPROTO ! 151: char *des_options(void); ! 152: void _cdecl des_ecb3_encrypt(des_cblock *input,des_cblock *output, ! 153: des_key_schedule ks1,des_key_schedule ks2, ! 154: des_key_schedule ks3, int enc); ! 155: DES_LONG des_cbc_cksum(des_cblock *input,des_cblock *output, ! 156: long length,des_key_schedule schedule,des_cblock *ivec); ! 157: void des_cbc_encrypt(des_cblock *input,des_cblock *output,long length, ! 158: des_key_schedule schedule,des_cblock *ivec,int enc); ! 159: void des_ncbc_encrypt(des_cblock *input,des_cblock *output,long length, ! 160: des_key_schedule schedule,des_cblock *ivec,int enc); ! 161: void des_xcbc_encrypt(des_cblock *input,des_cblock *output,long length, ! 162: des_key_schedule schedule,des_cblock *ivec, ! 163: des_cblock *inw,des_cblock *outw,int enc); ! 164: void des_cfb_encrypt(unsigned char *in,unsigned char *out,int numbits, ! 165: long length,des_key_schedule schedule,des_cblock *ivec,int enc); ! 166: void des_ecb_encrypt(des_cblock *input,des_cblock *output, ! 167: des_key_schedule ks,int enc); ! 168: void _cdecl des_encrypt(DES_LONG *data,des_key_schedule ks, int enc); ! 169: void _cdecl des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc); ! 170: void _cdecl des_encrypt3(DES_LONG *data, des_key_schedule ks1, ! 171: des_key_schedule ks2, des_key_schedule ks3); ! 172: void _cdecl des_decrypt3(DES_LONG *data, des_key_schedule ks1, ! 173: des_key_schedule ks2, des_key_schedule ks3); ! 174: void des_ede3_cbc_encrypt(des_cblock *input, des_cblock *output, ! 175: long length, des_key_schedule ks1, des_key_schedule ks2, ! 176: des_key_schedule ks3, des_cblock *ivec, int enc); ! 177: void des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out, ! 178: long length, des_key_schedule ks1, des_key_schedule ks2, ! 179: des_key_schedule ks3, des_cblock *ivec, int *num, int enc); ! 180: void des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out, ! 181: long length, des_key_schedule ks1, des_key_schedule ks2, ! 182: des_key_schedule ks3, des_cblock *ivec, int *num); ! 183: ! 184: void des_xwhite_in2out(des_cblock (*des_key), des_cblock (*in_white), ! 185: des_cblock (*out_white)); ! 186: ! 187: int des_enc_read(int fd,char *buf,int len,des_key_schedule sched, ! 188: des_cblock *iv); ! 189: int des_enc_write(int fd,char *buf,int len,des_key_schedule sched, ! 190: des_cblock *iv); ! 191: char *des_fcrypt(const char *buf,const char *salt, char *ret); ! 192: #ifdef PERL5 ! 193: char *des_crypt(const char *buf,const char *salt); ! 194: #else ! 195: /* some stupid compilers complain because I have declared char instead ! 196: * of const char */ ! 197: #ifdef HEADER_DES_LOCL_H ! 198: char *crypt(const char *buf,const char *salt); ! 199: #else ! 200: char *crypt(); ! 201: #endif ! 202: #endif ! 203: void des_ofb_encrypt(unsigned char *in,unsigned char *out, ! 204: int numbits,long length,des_key_schedule schedule,des_cblock *ivec); ! 205: void des_pcbc_encrypt(des_cblock *input,des_cblock *output,long length, ! 206: des_key_schedule schedule,des_cblock *ivec,int enc); ! 207: DES_LONG des_quad_cksum(des_cblock *input,des_cblock *output, ! 208: long length,int out_count,des_cblock *seed); ! 209: void des_random_seed(des_cblock key); ! 210: void des_random_key(des_cblock ret); ! 211: int des_read_password(des_cblock *key,char *prompt,int verify); ! 212: int des_read_2passwords(des_cblock *key1,des_cblock *key2, ! 213: char *prompt,int verify); ! 214: int des_read_pw_string(char *buf,int length,char *prompt,int verify); ! 215: void des_set_odd_parity(des_cblock *key); ! 216: int des_is_weak_key(des_cblock *key); ! 217: int des_set_key(des_cblock *key,des_key_schedule schedule); ! 218: int _cdecl des_key_sched(des_cblock *key,des_key_schedule schedule); ! 219: void des_string_to_key(char *str,des_cblock *key); ! 220: void des_string_to_2keys(char *str,des_cblock *key1,des_cblock *key2); ! 221: void des_cfb64_encrypt(unsigned char *in, unsigned char *out, long length, ! 222: des_key_schedule schedule, des_cblock *ivec, int *num, int enc); ! 223: void des_ofb64_encrypt(unsigned char *in, unsigned char *out, long length, ! 224: des_key_schedule schedule, des_cblock *ivec, int *num); ! 225: int des_read_pw(char *buf, char *buff, int size, char *prompt, int verify); ! 226: ! 227: /* Extra functions from Mark Murray <[email protected]> */ ! 228: void des_cblock_print_file(des_cblock *cb, FILE *fp); ! 229: /* The following functions are not in the normal unix build or the ! 230: * SSLeay build. When using the SSLeay build, use RAND_seed() ! 231: * and RAND_bytes() instead. */ ! 232: int des_new_random_key(des_cblock *key); ! 233: void des_init_random_number_generator(des_cblock *key); ! 234: void des_set_random_generator_seed(des_cblock *key); ! 235: void des_set_sequence_number(des_cblock new_sequence_number); ! 236: void des_generate_random_block(des_cblock *block); ! 237: ! 238: #else ! 239: ! 240: char *des_options(); ! 241: void des_ecb3_encrypt(); ! 242: DES_LONG des_cbc_cksum(); ! 243: void des_cbc_encrypt(); ! 244: void des_ncbc_encrypt(); ! 245: void des_xcbc_encrypt(); ! 246: void des_cfb_encrypt(); ! 247: void des_ede3_cfb64_encrypt(); ! 248: void des_ede3_ofb64_encrypt(); ! 249: void des_ecb_encrypt(); ! 250: void _cdecl des_encrypt(); ! 251: void _cdecl des_encrypt2(); ! 252: void _cdecl des_encrypt3(); ! 253: void _cdecl des_decrypt3(); ! 254: void des_ede3_cbc_encrypt(); ! 255: int des_enc_read(); ! 256: int des_enc_write(); ! 257: char *des_fcrypt(); ! 258: #ifdef PERL5 ! 259: char *des_crypt(); ! 260: #else ! 261: char *crypt(); ! 262: #endif ! 263: void des_ofb_encrypt(); ! 264: void des_pcbc_encrypt(); ! 265: DES_LONG des_quad_cksum(); ! 266: void des_random_seed(); ! 267: void des_random_key(); ! 268: int des_read_password(); ! 269: int des_read_2passwords(); ! 270: int des_read_pw_string(); ! 271: void des_set_odd_parity(); ! 272: int des_is_weak_key(); ! 273: int des_set_key(); ! 274: int des_key_sched(); ! 275: void des_string_to_key(); ! 276: void des_string_to_2keys(); ! 277: void des_cfb64_encrypt(); ! 278: void des_ofb64_encrypt(); ! 279: int des_read_pw(); ! 280: void des_xwhite_in2out(); ! 281: ! 282: /* Extra functions from Mark Murray <[email protected]> */ ! 283: void des_cblock_print_file(); ! 284: /* The following functions are not in the normal unix build or the ! 285: * SSLeay build. When using the SSLeay build, use RAND_seed() ! 286: * and RAND_bytes() instead. */ ! 287: #ifdef FreeBSD ! 288: int des_new_random_key(); ! 289: void des_init_random_number_generator(); ! 290: void des_set_random_generator_seed(); ! 291: void des_set_sequence_number(); ! 292: void des_generate_random_block(); ! 293: #endif ! 294: ! 295: #endif ! 296: ! 297: #ifdef __cplusplus ! 298: } ! 299: #endif ! 300: ! 301: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.