00001
00002
00003
00004
00005
00006
00007 #ifndef HEADER_DES_H
00008 #define HEADER_DES_H
00009
00010 typedef unsigned char des_cblock[8];
00011 typedef struct des_ks_struct
00012 {
00013 union {
00014 des_cblock _;
00015
00016 unsigned long pad[2];
00017 } ks;
00018 #undef _
00019 #define _ ks._
00020 } des_key_schedule[16];
00021
00022 #define DES_KEY_SZ (sizeof(des_cblock))
00023 #define DES_SCHEDULE_SZ (sizeof(des_key_schedule))
00024
00025 #define DES_ENCRYPT 1
00026 #define DES_DECRYPT 0
00027
00028 #define DES_CBC_MODE 0
00029 #define DES_PCBC_MODE 1
00030
00031 #define C_Block des_cblock
00032 #define Key_schedule des_key_schedule
00033 #define ENCRYPT DES_ENCRYPT
00034 #define DECRYPT DES_DECRYPT
00035 #define KEY_SZ DES_KEY_SZ
00036 #define string_to_key des_string_to_key
00037 #define read_pw_string des_read_pw_string
00038 #define random_key des_random_key
00039 #define pcbc_encrypt des_pcbc_encrypt
00040 #define set_key des_set_key
00041 #define key_sched des_key_sched
00042 #define ecb_encrypt des_ecb_encrypt
00043 #define cbc_encrypt des_cbc_encrypt
00044 #define cbc_cksum des_cbc_cksum
00045 #define quad_cksum des_quad_cksum
00046
00047 typedef struct des_ks_struct bit_64;
00048
00049 extern int des_check_key;
00050 extern int des_rw_mode;
00051
00052 int des_3ecb_encrypt(des_cblock *input,des_cblock *output,\
00053 des_key_schedule ks1,des_key_schedule ks2,int encrypt);
00054 unsigned long des_cbc_cksum(des_cblock *input,des_cblock *output,\
00055 long length,des_key_schedule schedule,des_cblock *ivec);
00056 int des_cbc_encrypt(des_cblock *input,des_cblock *output,long length,\
00057 des_key_schedule schedule,des_cblock *ivec,int encrypt);
00058 int des_3cbc_encrypt(des_cblock *input,des_cblock *output,long length,\
00059 des_key_schedule sk1,des_key_schedule sk2,\
00060 des_cblock *ivec1,des_cblock *ivec2,int encrypt);
00061 int des_cfb_encrypt(unsigned char *in,unsigned char *out,int numbits,\
00062 long length,des_key_schedule schedule,des_cblock *ivec,int encrypt);
00063 int des_ecb_encrypt(des_cblock *input,des_cblock *output,\
00064 des_key_schedule ks,int encrypt);
00065 int des_encrypt(unsigned long *input,unsigned long *output,
00066 des_key_schedule ks, int encrypt);
00067 int des_enc_read(int fd,char *buf,int len,des_key_schedule sched,\
00068 des_cblock *iv);
00069 int des_enc_write(int fd,char *buf,int len,des_key_schedule sched,\
00070 des_cblock *iv);
00071 #ifdef PERL5
00072 char *des_crypt(const char *buf,const char *salt);
00073 #else
00074 char *crypt(char *buf,char *salt);
00075 #endif
00076 int des_ofb_encrypt(unsigned char *in,unsigned char *out,\
00077 int numbits,long length,des_key_schedule schedule,des_cblock *ivec);
00078 int des_pcbc_encrypt(des_cblock *input,des_cblock *output,long length,\
00079 des_key_schedule schedule,des_cblock *ivec,int encrypt);
00080 unsigned long des_quad_cksum(des_cblock *input,des_cblock *output,\
00081 long length,int out_count,des_cblock *seed);
00082 void des_random_seed(des_cblock key);
00083 int des_random_key(des_cblock ret);
00084 int des_read_password(des_cblock *key,char *prompt,int verify);
00085 int des_read_2passwords(des_cblock *key1,des_cblock *key2, \
00086 char *prompt,int verify);
00087 int des_read_pw_string(char *buf,int length,char *prompt,int verify);
00088 void des_set_odd_parity(des_cblock *key);
00089 int des_is_weak_key(des_cblock *key);
00090 int des_set_key(des_cblock *key,des_key_schedule schedule);
00091 int des_key_sched(des_cblock *key,des_key_schedule schedule);
00092 int des_string_to_key(char *str,des_cblock *key);
00093 int des_string_to_2keys(char *str,des_cblock *key1,des_cblock *key2);
00094 #endif