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