summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/des.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/des/des.h')
-rw-r--r--src/lib/libcrypto/des/des.h303
1 files changed, 147 insertions, 156 deletions
diff --git a/src/lib/libcrypto/des/des.h b/src/lib/libcrypto/des/des.h
index 67f90aaf17..4cb9d84fdf 100644
--- a/src/lib/libcrypto/des/des.h
+++ b/src/lib/libcrypto/des/des.h
@@ -59,43 +59,50 @@
59#ifndef HEADER_DES_H 59#ifndef HEADER_DES_H
60#define HEADER_DES_H 60#define HEADER_DES_H
61 61
62#ifdef __cplusplus 62#ifdef OPENSSL_NO_DES
63extern "C" {
64#endif
65
66#ifdef NO_DES
67#error DES is disabled. 63#error DES is disabled.
68#endif 64#endif
69 65
70#ifdef _KERBEROS_DES_H
71#error <openssl/des.h> replaces <kerberos/des.h>.
72#endif
73
74#include <stdio.h>
75#include <openssl/opensslconf.h> /* DES_LONG */ 66#include <openssl/opensslconf.h> /* DES_LONG */
76#include <openssl/e_os2.h> /* OPENSSL_EXTERN */ 67#include <openssl/e_os2.h> /* OPENSSL_EXTERN */
77 68
78typedef unsigned char des_cblock[8]; 69#ifdef OPENSSL_BUILD_SHLIBCRYPTO
79typedef /* const */ unsigned char const_des_cblock[8]; 70# undef OPENSSL_EXTERN
80/* With "const", gcc 2.8.1 on Solaris thinks that des_cblock * 71# define OPENSSL_EXTERN OPENSSL_EXPORT
81 * and const_des_cblock * are incompatible pointer types. 72#endif
82 * I haven't seen that warning on other systems ... I'll look 73
83 * what the standard says. */ 74#ifdef __cplusplus
75extern "C" {
76#endif
84 77
78typedef unsigned char DES_cblock[8];
79typedef /* const */ unsigned char const_DES_cblock[8];
80/* With "const", gcc 2.8.1 on Solaris thinks that DES_cblock *
81 * and const_DES_cblock * are incompatible pointer types. */
85 82
86typedef struct des_ks_struct 83typedef struct DES_ks
84 {
85 union
87 { 86 {
88 union { 87 DES_cblock cblock;
89 des_cblock cblock; 88 /* make sure things are correct size on machines with
90 /* make sure things are correct size on machines with 89 * 8 byte longs */
91 * 8 byte longs */ 90 DES_LONG deslong[2];
92 DES_LONG deslong[2]; 91 } ks[16];
93 } ks; 92 } DES_key_schedule;
94 int weak_key; 93
95 } des_key_schedule[16]; 94#ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT
96 95# ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT
97#define DES_KEY_SZ (sizeof(des_cblock)) 96# define OPENSSL_ENABLE_OLD_DES_SUPPORT
98#define DES_SCHEDULE_SZ (sizeof(des_key_schedule)) 97# endif
98#endif
99
100#ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT
101# include <openssl/des_old.h>
102#endif
103
104#define DES_KEY_SZ (sizeof(DES_cblock))
105#define DES_SCHEDULE_SZ (sizeof(DES_key_schedule))
99 106
100#define DES_ENCRYPT 1 107#define DES_ENCRYPT 1
101#define DES_DECRYPT 0 108#define DES_DECRYPT 0
@@ -103,144 +110,128 @@ typedef struct des_ks_struct
103#define DES_CBC_MODE 0 110#define DES_CBC_MODE 0
104#define DES_PCBC_MODE 1 111#define DES_PCBC_MODE 1
105 112
106#define des_ecb2_encrypt(i,o,k1,k2,e) \ 113#define DES_ecb2_encrypt(i,o,k1,k2,e) \
107 des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) 114 DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))
108 115
109#define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ 116#define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \
110 des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) 117 DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))
111 118
112#define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ 119#define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \
113 des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) 120 DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))
114 121
115#define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ 122#define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \
116 des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) 123 DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))
117 124
118OPENSSL_EXTERN int des_check_key; /* defaults to false */ 125OPENSSL_DECLARE_GLOBAL(int,DES_check_key); /* defaults to false */
119OPENSSL_EXTERN int des_rw_mode; /* defaults to DES_PCBC_MODE */ 126#define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key)
120OPENSSL_EXTERN int des_set_weak_key_flag; /* set the weak key flag */ 127OPENSSL_DECLARE_GLOBAL(int,DES_rw_mode); /* defaults to DES_PCBC_MODE */
121 128#define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode)
122const char *des_options(void); 129
123void des_ecb3_encrypt(const_des_cblock *input, des_cblock *output, 130const char *DES_options(void);
124 des_key_schedule ks1,des_key_schedule ks2, 131void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
125 des_key_schedule ks3, int enc); 132 DES_key_schedule *ks1,DES_key_schedule *ks2,
126DES_LONG des_cbc_cksum(const unsigned char *input,des_cblock *output, 133 DES_key_schedule *ks3, int enc);
127 long length,des_key_schedule schedule, 134DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output,
128 const_des_cblock *ivec); 135 long length,DES_key_schedule *schedule,
129/* des_cbc_encrypt does not update the IV! Use des_ncbc_encrypt instead. */ 136 const_DES_cblock *ivec);
130void des_cbc_encrypt(const unsigned char *input,unsigned char *output, 137/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */
131 long length,des_key_schedule schedule,des_cblock *ivec, 138void DES_cbc_encrypt(const unsigned char *input,unsigned char *output,
139 long length,DES_key_schedule *schedule,DES_cblock *ivec,
132 int enc); 140 int enc);
133void des_ncbc_encrypt(const unsigned char *input,unsigned char *output, 141void DES_ncbc_encrypt(const unsigned char *input,unsigned char *output,
134 long length,des_key_schedule schedule,des_cblock *ivec, 142 long length,DES_key_schedule *schedule,DES_cblock *ivec,
135 int enc); 143 int enc);
136void des_xcbc_encrypt(const unsigned char *input,unsigned char *output, 144void DES_xcbc_encrypt(const unsigned char *input,unsigned char *output,
137 long length,des_key_schedule schedule,des_cblock *ivec, 145 long length,DES_key_schedule *schedule,DES_cblock *ivec,
138 const_des_cblock *inw,const_des_cblock *outw,int enc); 146 const_DES_cblock *inw,const_DES_cblock *outw,int enc);
139void des_cfb_encrypt(const unsigned char *in,unsigned char *out,int numbits, 147void DES_cfb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
140 long length,des_key_schedule schedule,des_cblock *ivec, 148 long length,DES_key_schedule *schedule,DES_cblock *ivec,
141 int enc); 149 int enc);
142void des_ecb_encrypt(const_des_cblock *input,des_cblock *output, 150void DES_ecb_encrypt(const_DES_cblock *input,DES_cblock *output,
143 des_key_schedule ks,int enc); 151 DES_key_schedule *ks,int enc);
144void des_encrypt(DES_LONG *data,des_key_schedule ks, int enc); 152
145void des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc); 153/* This is the DES encryption function that gets called by just about
146void des_encrypt3(DES_LONG *data, des_key_schedule ks1, 154 every other DES routine in the library. You should not use this
147 des_key_schedule ks2, des_key_schedule ks3); 155 function except to implement 'modes' of DES. I say this because the
148void des_decrypt3(DES_LONG *data, des_key_schedule ks1, 156 functions that call this routine do the conversion from 'char *' to
149 des_key_schedule ks2, des_key_schedule ks3); 157 long, and this needs to be done to make sure 'non-aligned' memory
150void des_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output, 158 access do not occur. The characters are loaded 'little endian'.
159 Data is a pointer to 2 unsigned long's and ks is the
160 DES_key_schedule to use. enc, is non zero specifies encryption,
161 zero if decryption. */
162void DES_encrypt1(DES_LONG *data,DES_key_schedule *ks, int enc);
163
164/* This functions is the same as DES_encrypt1() except that the DES
165 initial permutation (IP) and final permutation (FP) have been left
166 out. As for DES_encrypt1(), you should not use this function.
167 It is used by the routines in the library that implement triple DES.
168 IP() DES_encrypt2() DES_encrypt2() DES_encrypt2() FP() is the same
169 as DES_encrypt1() DES_encrypt1() DES_encrypt1() except faster :-). */
170void DES_encrypt2(DES_LONG *data,DES_key_schedule *ks, int enc);
171
172void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,
173 DES_key_schedule *ks2, DES_key_schedule *ks3);
174void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
175 DES_key_schedule *ks2, DES_key_schedule *ks3);
176void DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,
151 long length, 177 long length,
152 des_key_schedule ks1,des_key_schedule ks2, 178 DES_key_schedule *ks1,DES_key_schedule *ks2,
153 des_key_schedule ks3,des_cblock *ivec,int enc); 179 DES_key_schedule *ks3,DES_cblock *ivec,int enc);
154void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out, 180void DES_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
155 long length, 181 long length,
156 des_key_schedule ks1,des_key_schedule ks2, 182 DES_key_schedule *ks1,DES_key_schedule *ks2,
157 des_key_schedule ks3, 183 DES_key_schedule *ks3,
158 des_cblock *ivec1,des_cblock *ivec2, 184 DES_cblock *ivec1,DES_cblock *ivec2,
159 int enc); 185 int enc);
160void des_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out, 186void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
161 long length,des_key_schedule ks1, 187 long length,DES_key_schedule *ks1,
162 des_key_schedule ks2,des_key_schedule ks3, 188 DES_key_schedule *ks2,DES_key_schedule *ks3,
163 des_cblock *ivec,int *num,int enc); 189 DES_cblock *ivec,int *num,int enc);
164void des_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out, 190void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
165 long length,des_key_schedule ks1, 191 long length,DES_key_schedule *ks1,
166 des_key_schedule ks2,des_key_schedule ks3, 192 DES_key_schedule *ks2,DES_key_schedule *ks3,
167 des_cblock *ivec,int *num); 193 DES_cblock *ivec,int *num);
168 194
169void des_xwhite_in2out(const_des_cblock *des_key,const_des_cblock *in_white, 195void DES_xwhite_in2out(const_DES_cblock *DES_key,const_DES_cblock *in_white,
170 des_cblock *out_white); 196 DES_cblock *out_white);
171 197
172int des_enc_read(int fd,void *buf,int len,des_key_schedule sched, 198int DES_enc_read(int fd,void *buf,int len,DES_key_schedule *sched,
173 des_cblock *iv); 199 DES_cblock *iv);
174int des_enc_write(int fd,const void *buf,int len,des_key_schedule sched, 200int DES_enc_write(int fd,const void *buf,int len,DES_key_schedule *sched,
175 des_cblock *iv); 201 DES_cblock *iv);
176char *des_fcrypt(const char *buf,const char *salt, char *ret); 202char *DES_fcrypt(const char *buf,const char *salt, char *ret);
177char *des_crypt(const char *buf,const char *salt); 203char *DES_crypt(const char *buf,const char *salt);
178#if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) 204void DES_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
179char *crypt(const char *buf,const char *salt); 205 long length,DES_key_schedule *schedule,DES_cblock *ivec);
180#endif 206void DES_pcbc_encrypt(const unsigned char *input,unsigned char *output,
181void des_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits, 207 long length,DES_key_schedule *schedule,DES_cblock *ivec,
182 long length,des_key_schedule schedule,des_cblock *ivec);
183void des_pcbc_encrypt(const unsigned char *input,unsigned char *output,
184 long length,des_key_schedule schedule,des_cblock *ivec,
185 int enc); 208 int enc);
186DES_LONG des_quad_cksum(const unsigned char *input,des_cblock output[], 209DES_LONG DES_quad_cksum(const unsigned char *input,DES_cblock output[],
187 long length,int out_count,des_cblock *seed); 210 long length,int out_count,DES_cblock *seed);
188void des_random_seed(des_cblock *key); 211int DES_random_key(DES_cblock *ret);
189void des_random_key(des_cblock *ret); 212void DES_set_odd_parity(DES_cblock *key);
190int des_read_password(des_cblock *key,const char *prompt,int verify); 213int DES_check_key_parity(const_DES_cblock *key);
191int des_read_2passwords(des_cblock *key1,des_cblock *key2, 214int DES_is_weak_key(const_DES_cblock *key);
192 const char *prompt,int verify); 215/* DES_set_key (= set_key = DES_key_sched = key_sched) calls
193int des_read_pw_string(char *buf,int length,const char *prompt,int verify); 216 * DES_set_key_checked if global variable DES_check_key is set,
194void des_set_odd_parity(des_cblock *key); 217 * DES_set_key_unchecked otherwise. */
195int des_is_weak_key(const_des_cblock *key); 218int DES_set_key(const_DES_cblock *key,DES_key_schedule *schedule);
196int des_set_key(const_des_cblock *key,des_key_schedule schedule); 219int DES_key_sched(const_DES_cblock *key,DES_key_schedule *schedule);
197int des_key_sched(const_des_cblock *key,des_key_schedule schedule); 220int DES_set_key_checked(const_DES_cblock *key,DES_key_schedule *schedule);
198void des_string_to_key(const char *str,des_cblock *key); 221void DES_set_key_unchecked(const_DES_cblock *key,DES_key_schedule *schedule);
199void des_string_to_2keys(const char *str,des_cblock *key1,des_cblock *key2); 222void DES_string_to_key(const char *str,DES_cblock *key);
200void des_cfb64_encrypt(const unsigned char *in,unsigned char *out,long length, 223void DES_string_to_2keys(const char *str,DES_cblock *key1,DES_cblock *key2);
201 des_key_schedule schedule,des_cblock *ivec,int *num, 224void DES_cfb64_encrypt(const unsigned char *in,unsigned char *out,long length,
225 DES_key_schedule *schedule,DES_cblock *ivec,int *num,
202 int enc); 226 int enc);
203void des_ofb64_encrypt(const unsigned char *in,unsigned char *out,long length, 227void DES_ofb64_encrypt(const unsigned char *in,unsigned char *out,long length,
204 des_key_schedule schedule,des_cblock *ivec,int *num); 228 DES_key_schedule *schedule,DES_cblock *ivec,int *num);
205int des_read_pw(char *buf,char *buff,int size,const char *prompt,int verify);
206 229
207/* Extra functions from Mark Murray <mark@grondar.za> */ 230int DES_read_password(DES_cblock *key, const char *prompt, int verify);
208void des_cblock_print_file(const_des_cblock *cb, FILE *fp); 231int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, const char *prompt,
209 232 int verify);
210/* The following definitions provide compatibility with the MIT Kerberos
211 * library. The des_key_schedule structure is not binary compatible. */
212
213#define _KERBEROS_DES_H
214
215#define KRBDES_ENCRYPT DES_ENCRYPT
216#define KRBDES_DECRYPT DES_DECRYPT
217
218#ifdef KERBEROS
219# define ENCRYPT DES_ENCRYPT
220# define DECRYPT DES_DECRYPT
221#endif
222
223#ifndef NCOMPAT
224# define C_Block des_cblock
225# define Key_schedule des_key_schedule
226# define KEY_SZ DES_KEY_SZ
227# define string_to_key des_string_to_key
228# define read_pw_string des_read_pw_string
229# define random_key des_random_key
230# define pcbc_encrypt des_pcbc_encrypt
231# define set_key des_set_key
232# define key_sched des_key_sched
233# define ecb_encrypt des_ecb_encrypt
234# define cbc_encrypt des_cbc_encrypt
235# define ncbc_encrypt des_ncbc_encrypt
236# define xcbc_encrypt des_xcbc_encrypt
237# define cbc_cksum des_cbc_cksum
238# define quad_cksum des_quad_cksum
239#endif
240 233
241typedef des_key_schedule bit_64; 234#define DES_fixup_key_parity DES_set_odd_parity
242#define des_fixup_key_parity des_set_odd_parity
243#define des_check_key_parity check_parity
244 235
245#ifdef __cplusplus 236#ifdef __cplusplus
246} 237}