import cyrus-sasl-2.1.23
[cyrus-sasl.git] / mac / libdes / src / des.org
1 /* crypto/des/des.h */\r/* Copyright (C) 1995-1997 Eric Young (eay@mincom.oz.au)\r * All rights reserved.\r *\r * This package is an SSL implementation written\r * by Eric Young (eay@mincom.oz.au).\r * The implementation was written so as to conform with Netscapes SSL.\r * \r * This library is free for commercial and non-commercial use as long as\r * the following conditions are aheared to.  The following conditions\r * apply to all code found in this distribution, be it the RC4, RSA,\r * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\r * included with this distribution is covered by the same copyright terms\r * except that the holder is Tim Hudson (tjh@mincom.oz.au).\r * \r * Copyright remains Eric Young's, and as such any Copyright notices in\r * the code are not to be removed.\r * If this package is used in a product, Eric Young should be given attribution\r * as the author of the parts of the library used.\r * This can be in the form of a textual message at program startup or\r * in documentation (online or textual) provided with the package.\r * \r * Redistribution and use in source and binary forms, with or without\r * modification, are permitted provided that the following conditions\r * are met:\r * 1. Redistributions of source code must retain the copyright\r *    notice, this list of conditions and the following disclaimer.\r * 2. Redistributions in binary form must reproduce the above copyright\r *    notice, this list of conditions and the following disclaimer in the\r *    documentation and/or other materials provided with the distribution.\r * 3. All advertising materials mentioning features or use of this software\r *    must display the following acknowledgement:\r *    "This product includes cryptographic software written by\r *     Eric Young (eay@mincom.oz.au)"\r *    The word 'cryptographic' can be left out if the rouines from the library\r *    being used are not cryptographic related :-).\r * 4. If you include any Windows specific code (or a derivative thereof) from \r *    the apps directory (application code) you must include an acknowledgement:\r *    "This product includes software written by Tim Hudson (tjh@mincom.oz.au)"\r * \r * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\r * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r * SUCH DAMAGE.\r * \r * The licence and distribution terms for any publically available version or\r * derivative of this code cannot be changed.  i.e. this code cannot simply be\r * copied and put under another distribution licence\r * [including the GNU Public Licence.]\r */\r\r#ifndef HEADER_DES_H\r#define HEADER_DES_H\r\r#ifdef  __cplusplus\rextern "C" {\r#endif\r\r#include <stdio.h>\r\r/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a\r * %20 speed up (longs are 8 bytes, int's are 4). */\r#ifndef DES_LONG\r#define DES_LONG unsigned long\r#endif\r\rtypedef unsigned char des_cblock[8];\rtypedef struct des_ks_struct\r      {\r      union   {\r              des_cblock _;\r          /* make sure things are correct size on machines with\r           * 8 byte longs */\r             DES_LONG pad[2];\r               } ks;\r#undef _\r#define _        ks._\r   } des_key_schedule[16];\r\r#define DES_KEY_SZ     (sizeof(des_cblock))\r#define DES_SCHEDULE_SZ (sizeof(des_key_schedule))\r\r#define DES_ENCRYPT    1\r#define DES_DECRYPT   0\r\r#define DES_CBC_MODE 0\r#define DES_PCBC_MODE 1\r\r#define des_ecb2_encrypt(i,o,k1,k2,e) \\r     des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))\r\r#define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \\r des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))\r\r#define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \\r        des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))\r\r#define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \\r    des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))\r\r#define C_Block des_cblock\r#define Key_schedule des_key_schedule\r#ifdef KERBEROS\r#define ENCRYPT DES_ENCRYPT\r#define DECRYPT DES_DECRYPT\r#endif\r#define KEY_SZ DES_KEY_SZ\r#define string_to_key des_string_to_key\r#define read_pw_string des_read_pw_string\r#define random_key des_random_key\r#define pcbc_encrypt des_pcbc_encrypt\r#define set_key des_set_key\r#define key_sched des_key_sched\r#define ecb_encrypt des_ecb_encrypt\r#define cbc_encrypt des_cbc_encrypt\r#define ncbc_encrypt des_ncbc_encrypt\r#define xcbc_encrypt des_xcbc_encrypt\r#define cbc_cksum des_cbc_cksum\r#define quad_cksum des_quad_cksum\r\r/* For compatibility with the MIT lib - eay 20/05/92 */\rtypedef des_key_schedule bit_64;\r#define des_fixup_key_parity des_set_odd_parity\r#define des_check_key_parity check_parity\r\rextern int des_check_key;       /* defaults to false */\rextern int des_rw_mode;         /* defaults to DES_PCBC_MODE */\r\r/* The next line is used to disable full ANSI prototypes, if your\r * compiler has problems with the prototypes, make sure this line always\r * evaluates to true :-) */\r#if defined(MSDOS) || defined(__STDC__)\r#undef NOPROTO\r#endif\r#ifndef NOPROTO\rchar *des_options(void);\rvoid des_ecb3_encrypt(des_cblock *input,des_cblock *output,\r     des_key_schedule ks1,des_key_schedule ks2,\r     des_key_schedule ks3, int enc);\rDES_LONG des_cbc_cksum(des_cblock *input,des_cblock *output,\r   long length,des_key_schedule schedule,des_cblock *ivec);\rvoid des_cbc_encrypt(des_cblock *input,des_cblock *output,long length,\r        des_key_schedule schedule,des_cblock *ivec,int enc);\rvoid des_ncbc_encrypt(des_cblock *input,des_cblock *output,long length,\r   des_key_schedule schedule,des_cblock *ivec,int enc);\rvoid des_xcbc_encrypt(des_cblock *input,des_cblock *output,long length,\r   des_key_schedule schedule,des_cblock *ivec,\r    des_cblock *inw,des_cblock *outw,int enc);\rvoid des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length,\r     des_key_schedule sk1,des_key_schedule sk2,\r     des_cblock *ivec1,des_cblock *ivec2,int enc);\rvoid des_cfb_encrypt(unsigned char *in,unsigned char *out,int numbits,\r   long length,des_key_schedule schedule,des_cblock *ivec,int enc);\rvoid des_ecb_encrypt(des_cblock *input,des_cblock *output,\r    des_key_schedule ks,int enc);\rvoid des_encrypt(DES_LONG *data,des_key_schedule ks, int enc);\rvoid des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc);\rvoid des_encrypt3(DES_LONG *data, des_key_schedule ks1,\r   des_key_schedule ks2, des_key_schedule ks3);\rvoid des_decrypt3(DES_LONG *data, des_key_schedule ks1,\r   des_key_schedule ks2, des_key_schedule ks3);\rvoid des_ede3_cbc_encrypt(des_cblock *input, des_cblock *output, \r long length, des_key_schedule ks1, des_key_schedule ks2, \r      des_key_schedule ks3, des_cblock *ivec, int enc);\rvoid des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out,\r   long length, des_key_schedule ks1, des_key_schedule ks2,\r       des_key_schedule ks3, des_cblock *ivec, int *num, int encrypt);\rvoid des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out,\r     long length, des_key_schedule ks1, des_key_schedule ks2,\r       des_key_schedule ks3, des_cblock *ivec, int *num);\r\rint des_enc_read(int fd,char *buf,int len,des_key_schedule sched,\r  des_cblock *iv);\rint des_enc_write(int fd,char *buf,int len,des_key_schedule sched,\r    des_cblock *iv);\rchar *des_fcrypt(const char *buf,const char *salt, char *ret);\r#ifdef PERL5\rchar *des_crypt(const char *buf,const char *salt);\r#else\r/* some stupid compilers complain because I have declared char instead\r * of const char */\r#ifdef HEADER_DES_LOCL_H\rchar *crypt(const char *buf,const char *salt);\r#else\rchar *crypt();\r#endif\r#endif\rvoid des_ofb_encrypt(unsigned char *in,unsigned char *out,\r int numbits,long length,des_key_schedule schedule,des_cblock *ivec);\rvoid des_pcbc_encrypt(des_cblock *input,des_cblock *output,long length,\r   des_key_schedule schedule,des_cblock *ivec,int enc);\rDES_LONG des_quad_cksum(des_cblock *input,des_cblock *output,\r     long length,int out_count,des_cblock *seed);\rvoid des_random_seed(des_cblock key);\rvoid des_random_key(des_cblock ret);\rint des_read_password(des_cblock *key,char *prompt,int verify);\rint des_read_2passwords(des_cblock *key1,des_cblock *key2,\r     char *prompt,int verify);\rint des_read_pw_string(char *buf,int length,char *prompt,int verify);\rvoid des_set_odd_parity(des_cblock *key);\rint des_is_weak_key(des_cblock *key);\rint des_set_key(des_cblock *key,des_key_schedule schedule);\rint des_key_sched(des_cblock *key,des_key_schedule schedule);\rvoid des_string_to_key(char *str,des_cblock *key);\rvoid des_string_to_2keys(char *str,des_cblock *key1,des_cblock *key2);\rvoid des_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,\r des_key_schedule schedule, des_cblock *ivec, int *num, int enc);\rvoid des_ofb64_encrypt(unsigned char *in, unsigned char *out, long length,\r    des_key_schedule schedule, des_cblock *ivec, int *num);\r\r/* Extra functions from Mark Murray <mark@grondar.za> */\rvoid des_cblock_print_file(des_cblock *cb, FILE *fp);\r/* The following functions are not in the normal unix build or the\r * SSLeay build.  When using the SSLeay build, use RAND_seed()\r * and RAND_bytes() instead. */\rint des_new_random_key(des_cblock *key);\rvoid des_init_random_number_generator(des_cblock *key);\rvoid des_set_random_generator_seed(des_cblock *key);\rvoid des_set_sequence_number(des_cblock new_sequence_number);\rvoid des_generate_random_block(des_cblock *block);\r\r#else\r\rchar *des_options();\rvoid des_ecb3_encrypt();\rDES_LONG des_cbc_cksum();\rvoid des_cbc_encrypt();\rvoid des_ncbc_encrypt();\rvoid des_xcbc_encrypt();\rvoid des_3cbc_encrypt();\rvoid des_cfb_encrypt();\rvoid des_ede3_cfb64_encrypt();\rvoid des_ede3_ofb64_encrypt();\rvoid des_ecb_encrypt();\rvoid des_encrypt();\rvoid des_encrypt2();\rvoid des_encrypt3();\rvoid des_decrypt3();\rvoid des_ede3_cbc_encrypt();\rint des_enc_read();\rint des_enc_write();\rchar *des_fcrypt();\r#ifdef PERL5\rchar *des_crypt();\r#else\rchar *crypt();\r#endif\rvoid des_ofb_encrypt();\rvoid des_pcbc_encrypt();\rDES_LONG des_quad_cksum();\rvoid des_random_seed();\rvoid des_random_key();\rint des_read_password();\rint des_read_2passwords();\rint des_read_pw_string();\rvoid des_set_odd_parity();\rint des_is_weak_key();\rint des_set_key();\rint des_key_sched();\rvoid des_string_to_key();\rvoid des_string_to_2keys();\rvoid des_cfb64_encrypt();\rvoid des_ofb64_encrypt();\r\r/* Extra functions from Mark Murray <mark@grondar.za> */\rvoid des_cblock_print_file();\r/* The following functions are not in the normal unix build or the\r * SSLeay build.  When using the SSLeay build, use RAND_seed()\r * and RAND_bytes() instead. */\r#ifdef FreeBSD\rint des_new_random_key();\rvoid des_init_random_number_generator();\rvoid des_set_random_generator_seed();\rvoid des_set_sequence_number();\rvoid des_generate_random_block();\r#endif\r\r#endif\r\r#ifdef  __cplusplus\r}\r#endif\r\r#endif\r