00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #ifndef HEADER_NEW_DES_H
00060 #define HEADER_NEW_DES_H
00061
00062 #include <openssl/e_os2.h>
00063
00064
00065 #ifdef OPENSSL_NO_DES
00066 #error DES is disabled.
00067 #endif
00068
00069 #ifdef OPENSSL_BUILD_SHLIBCRYPTO
00070 # undef OPENSSL_EXTERN
00071 # define OPENSSL_EXTERN OPENSSL_EXPORT
00072 #endif
00073
00074 #ifdef __cplusplus
00075 extern "C" {
00076 #endif
00077
00078 typedef unsigned char DES_cblock[8];
00079 typedef unsigned char const_DES_cblock[8];
00080
00081
00082
00083 typedef struct DES_ks
00084 {
00085 union
00086 {
00087 DES_cblock cblock;
00088
00089
00090 DES_LONG deslong[2];
00091 } ks[16];
00092 } DES_key_schedule;
00093
00094 #ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT
00095 # ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT
00096 # define OPENSSL_ENABLE_OLD_DES_SUPPORT
00097 # endif
00098 #endif
00099
00100 #ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT
00101 # include <openssl/des_old.h>
00102 #endif
00103
00104 #define DES_KEY_SZ (sizeof(DES_cblock))
00105 #define DES_SCHEDULE_SZ (sizeof(DES_key_schedule))
00106
00107 #define DES_ENCRYPT 1
00108 #define DES_DECRYPT 0
00109
00110 #define DES_CBC_MODE 0
00111 #define DES_PCBC_MODE 1
00112
00113 #define DES_ecb2_encrypt(i,o,k1,k2,e) \
00114 DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))
00115
00116 #define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \
00117 DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))
00118
00119 #define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \
00120 DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))
00121
00122 #define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \
00123 DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))
00124
00125 OPENSSL_DECLARE_GLOBAL(int,DES_check_key);
00126 #define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key)
00127 OPENSSL_DECLARE_GLOBAL(int,DES_rw_mode);
00128 #define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode)
00129
00130 const char *DES_options(void);
00131 void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
00132 DES_key_schedule *ks1,DES_key_schedule *ks2,
00133 DES_key_schedule *ks3, int enc);
00134 DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output,
00135 long length,DES_key_schedule *schedule,
00136 const_DES_cblock *ivec);
00137
00138 void DES_cbc_encrypt(const unsigned char *input,unsigned char *output,
00139 long length,DES_key_schedule *schedule,DES_cblock *ivec,
00140 int enc);
00141 void DES_ncbc_encrypt(const unsigned char *input,unsigned char *output,
00142 long length,DES_key_schedule *schedule,DES_cblock *ivec,
00143 int enc);
00144 void DES_xcbc_encrypt(const unsigned char *input,unsigned char *output,
00145 long length,DES_key_schedule *schedule,DES_cblock *ivec,
00146 const_DES_cblock *inw,const_DES_cblock *outw,int enc);
00147 void DES_cfb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
00148 long length,DES_key_schedule *schedule,DES_cblock *ivec,
00149 int enc);
00150 void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output,
00151 DES_key_schedule *ks,int enc);
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 void DES_encrypt1(DES_LONG *data,DES_key_schedule *ks, int enc);
00163
00164
00165
00166
00167
00168
00169
00170 void DES_encrypt2(DES_LONG *data,DES_key_schedule *ks, int enc);
00171
00172 void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,
00173 DES_key_schedule *ks2, DES_key_schedule *ks3);
00174 void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
00175 DES_key_schedule *ks2, DES_key_schedule *ks3);
00176 void DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,
00177 long length,
00178 DES_key_schedule *ks1,DES_key_schedule *ks2,
00179 DES_key_schedule *ks3,DES_cblock *ivec,int enc);
00180 void DES_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
00181 long length,
00182 DES_key_schedule *ks1,DES_key_schedule *ks2,
00183 DES_key_schedule *ks3,
00184 DES_cblock *ivec1,DES_cblock *ivec2,
00185 int enc);
00186 void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
00187 long length,DES_key_schedule *ks1,
00188 DES_key_schedule *ks2,DES_key_schedule *ks3,
00189 DES_cblock *ivec,int *num,int enc);
00190 void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
00191 int numbits,long length,DES_key_schedule *ks1,
00192 DES_key_schedule *ks2,DES_key_schedule *ks3,
00193 DES_cblock *ivec,int enc);
00194 void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
00195 long length,DES_key_schedule *ks1,
00196 DES_key_schedule *ks2,DES_key_schedule *ks3,
00197 DES_cblock *ivec,int *num);
00198
00199 void DES_xwhite_in2out(const_DES_cblock *DES_key,const_DES_cblock *in_white,
00200 DES_cblock *out_white);
00201
00202 int DES_enc_read(int fd,void *buf,int len,DES_key_schedule *sched,
00203 DES_cblock *iv);
00204 int DES_enc_write(int fd,const void *buf,int len,DES_key_schedule *sched,
00205 DES_cblock *iv);
00206 char *DES_fcrypt(const char *buf,const char *salt, char *ret);
00207 char *DES_crypt(const char *buf,const char *salt);
00208 void DES_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
00209 long length,DES_key_schedule *schedule,DES_cblock *ivec);
00210 void DES_pcbc_encrypt(const unsigned char *input,unsigned char *output,
00211 long length,DES_key_schedule *schedule,DES_cblock *ivec,
00212 int enc);
00213 DES_LONG DES_quad_cksum(const unsigned char *input,DES_cblock output[],
00214 long length,int out_count,DES_cblock *seed);
00215 int DES_random_key(DES_cblock *ret);
00216 void DES_set_odd_parity(DES_cblock *key);
00217 int DES_check_key_parity(const_DES_cblock *key);
00218 int DES_is_weak_key(const_DES_cblock *key);
00219
00220
00221
00222 int DES_set_key(const_DES_cblock *key,DES_key_schedule *schedule);
00223 int DES_key_sched(const_DES_cblock *key,DES_key_schedule *schedule);
00224 int DES_set_key_checked(const_DES_cblock *key,DES_key_schedule *schedule);
00225 void DES_set_key_unchecked(const_DES_cblock *key,DES_key_schedule *schedule);
00226 void DES_string_to_key(const char *str,DES_cblock *key);
00227 void DES_string_to_2keys(const char *str,DES_cblock *key1,DES_cblock *key2);
00228 void DES_cfb64_encrypt(const unsigned char *in,unsigned char *out,long length,
00229 DES_key_schedule *schedule,DES_cblock *ivec,int *num,
00230 int enc);
00231 void DES_ofb64_encrypt(const unsigned char *in,unsigned char *out,long length,
00232 DES_key_schedule *schedule,DES_cblock *ivec,int *num);
00233
00234 int DES_read_password(DES_cblock *key, const char *prompt, int verify);
00235 int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, const char *prompt,
00236 int verify);
00237
00238 #define DES_fixup_key_parity DES_set_odd_parity
00239
00240 #ifdef __cplusplus
00241 }
00242 #endif
00243
00244 #endif