]>
Commit | Line | Data |
---|---|---|
d02b48c6 RE |
1 | /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) |
2 | * All rights reserved. | |
3 | * | |
4 | * This package is an SSL implementation written | |
5 | * by Eric Young (eay@cryptsoft.com). | |
6 | * The implementation was written so as to conform with Netscapes SSL. | |
0f113f3e | 7 | * |
d02b48c6 RE |
8 | * This library is free for commercial and non-commercial use as long as |
9 | * the following conditions are aheared to. The following conditions | |
10 | * apply to all code found in this distribution, be it the RC4, RSA, | |
11 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | |
12 | * included with this distribution is covered by the same copyright terms | |
13 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | |
0f113f3e | 14 | * |
d02b48c6 RE |
15 | * Copyright remains Eric Young's, and as such any Copyright notices in |
16 | * the code are not to be removed. | |
17 | * If this package is used in a product, Eric Young should be given attribution | |
18 | * as the author of the parts of the library used. | |
19 | * This can be in the form of a textual message at program startup or | |
20 | * in documentation (online or textual) provided with the package. | |
0f113f3e | 21 | * |
d02b48c6 RE |
22 | * Redistribution and use in source and binary forms, with or without |
23 | * modification, are permitted provided that the following conditions | |
24 | * are met: | |
25 | * 1. Redistributions of source code must retain the copyright | |
26 | * notice, this list of conditions and the following disclaimer. | |
27 | * 2. Redistributions in binary form must reproduce the above copyright | |
28 | * notice, this list of conditions and the following disclaimer in the | |
29 | * documentation and/or other materials provided with the distribution. | |
30 | * 3. All advertising materials mentioning features or use of this software | |
31 | * must display the following acknowledgement: | |
32 | * "This product includes cryptographic software written by | |
33 | * Eric Young (eay@cryptsoft.com)" | |
34 | * The word 'cryptographic' can be left out if the rouines from the library | |
35 | * being used are not cryptographic related :-). | |
0f113f3e | 36 | * 4. If you include any Windows specific code (or a derivative thereof) from |
d02b48c6 RE |
37 | * the apps directory (application code) you must include an acknowledgement: |
38 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | |
0f113f3e | 39 | * |
d02b48c6 RE |
40 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
41 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
42 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
43 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |
44 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
45 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
46 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
48 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
49 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
50 | * SUCH DAMAGE. | |
0f113f3e | 51 | * |
d02b48c6 RE |
52 | * The licence and distribution terms for any publically available version or |
53 | * derivative of this code cannot be changed. i.e. this code cannot simply be | |
54 | * copied and put under another distribution licence | |
55 | * [including the GNU Public Licence.] | |
56 | */ | |
57 | ||
005ef84c | 58 | #ifndef HEADER_NEW_DES_H |
0f113f3e | 59 | # define HEADER_NEW_DES_H |
d02b48c6 | 60 | |
3e9e810f | 61 | # include <openssl/e_os2.h> |
0f387945 | 62 | |
0f113f3e MC |
63 | # ifdef OPENSSL_NO_DES |
64 | # error DES is disabled. | |
65 | # endif | |
f5d7a031 | 66 | |
3e9e810f | 67 | typedef unsigned int DES_LONG; |
bdb1d0c2 | 68 | |
0f113f3e MC |
69 | # ifdef OPENSSL_BUILD_SHLIBCRYPTO |
70 | # undef OPENSSL_EXTERN | |
71 | # define OPENSSL_EXTERN OPENSSL_EXPORT | |
72 | # endif | |
26da3e65 | 73 | |
82271cee RL |
74 | #ifdef __cplusplus |
75 | extern "C" { | |
76 | #endif | |
77 | ||
c2e4f17c RL |
78 | typedef unsigned char DES_cblock[8]; |
79 | typedef /* const */ unsigned char const_DES_cblock[8]; | |
0f113f3e MC |
80 | /* |
81 | * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and | |
82 | * const_DES_cblock * are incompatible pointer types. | |
83 | */ | |
84 | ||
85 | typedef struct DES_ks { | |
86 | union { | |
87 | DES_cblock cblock; | |
88 | /* | |
89 | * make sure things are correct size on machines with 8 byte longs | |
90 | */ | |
91 | DES_LONG deslong[2]; | |
92 | } ks[16]; | |
93 | } DES_key_schedule; | |
94 | ||
0f113f3e MC |
95 | # define DES_KEY_SZ (sizeof(DES_cblock)) |
96 | # define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) | |
d02b48c6 | 97 | |
0f113f3e MC |
98 | # define DES_ENCRYPT 1 |
99 | # define DES_DECRYPT 0 | |
d02b48c6 | 100 | |
0f113f3e MC |
101 | # define DES_CBC_MODE 0 |
102 | # define DES_PCBC_MODE 1 | |
d02b48c6 | 103 | |
0f113f3e MC |
104 | # define DES_ecb2_encrypt(i,o,k1,k2,e) \ |
105 | DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) | |
c2e4f17c | 106 | |
0f113f3e MC |
107 | # define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ |
108 | DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) | |
c2e4f17c | 109 | |
0f113f3e MC |
110 | # define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ |
111 | DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) | |
c2e4f17c | 112 | |
0f113f3e MC |
113 | # define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ |
114 | DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) | |
c2e4f17c | 115 | |
0f113f3e MC |
116 | OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ |
117 | # define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) | |
118 | OPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */ | |
119 | # define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) | |
c2e4f17c RL |
120 | |
121 | const char *DES_options(void); | |
122 | void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, | |
0f113f3e MC |
123 | DES_key_schedule *ks1, DES_key_schedule *ks2, |
124 | DES_key_schedule *ks3, int enc); | |
125 | DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, | |
126 | long length, DES_key_schedule *schedule, | |
127 | const_DES_cblock *ivec); | |
c2e4f17c | 128 | /* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ |
0f113f3e MC |
129 | void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, |
130 | long length, DES_key_schedule *schedule, | |
131 | DES_cblock *ivec, int enc); | |
132 | void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, | |
133 | long length, DES_key_schedule *schedule, | |
134 | DES_cblock *ivec, int enc); | |
135 | void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, | |
136 | long length, DES_key_schedule *schedule, | |
137 | DES_cblock *ivec, const_DES_cblock *inw, | |
138 | const_DES_cblock *outw, int enc); | |
139 | void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, | |
140 | long length, DES_key_schedule *schedule, | |
141 | DES_cblock *ivec, int enc); | |
142 | void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, | |
143 | DES_key_schedule *ks, int enc); | |
144 | ||
145 | /* | |
146 | * This is the DES encryption function that gets called by just about every | |
147 | * other DES routine in the library. You should not use this function except | |
148 | * to implement 'modes' of DES. I say this because the functions that call | |
149 | * this routine do the conversion from 'char *' to long, and this needs to be | |
150 | * done to make sure 'non-aligned' memory access do not occur. The | |
151 | * characters are loaded 'little endian'. Data is a pointer to 2 unsigned | |
152 | * long's and ks is the DES_key_schedule to use. enc, is non zero specifies | |
153 | * encryption, zero if decryption. | |
154 | */ | |
155 | void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); | |
156 | ||
157 | /* | |
158 | * This functions is the same as DES_encrypt1() except that the DES initial | |
159 | * permutation (IP) and final permutation (FP) have been left out. As for | |
160 | * DES_encrypt1(), you should not use this function. It is used by the | |
161 | * routines in the library that implement triple DES. IP() DES_encrypt2() | |
162 | * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() | |
163 | * DES_encrypt1() DES_encrypt1() except faster :-). | |
164 | */ | |
165 | void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); | |
c2e4f17c RL |
166 | |
167 | void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, | |
0f113f3e | 168 | DES_key_schedule *ks2, DES_key_schedule *ks3); |
c2e4f17c | 169 | void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, |
0f113f3e MC |
170 | DES_key_schedule *ks2, DES_key_schedule *ks3); |
171 | void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, | |
172 | long length, | |
173 | DES_key_schedule *ks1, DES_key_schedule *ks2, | |
174 | DES_key_schedule *ks3, DES_cblock *ivec, int enc); | |
0f113f3e MC |
175 | void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, |
176 | long length, DES_key_schedule *ks1, | |
177 | DES_key_schedule *ks2, DES_key_schedule *ks3, | |
178 | DES_cblock *ivec, int *num, int enc); | |
179 | void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, | |
180 | int numbits, long length, DES_key_schedule *ks1, | |
181 | DES_key_schedule *ks2, DES_key_schedule *ks3, | |
182 | DES_cblock *ivec, int enc); | |
183 | void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, | |
184 | long length, DES_key_schedule *ks1, | |
185 | DES_key_schedule *ks2, DES_key_schedule *ks3, | |
186 | DES_cblock *ivec, int *num); | |
0f113f3e MC |
187 | int DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched, |
188 | DES_cblock *iv); | |
189 | int DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched, | |
190 | DES_cblock *iv); | |
191 | char *DES_fcrypt(const char *buf, const char *salt, char *ret); | |
192 | char *DES_crypt(const char *buf, const char *salt); | |
193 | void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, | |
194 | long length, DES_key_schedule *schedule, | |
195 | DES_cblock *ivec); | |
196 | void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, | |
197 | long length, DES_key_schedule *schedule, | |
198 | DES_cblock *ivec, int enc); | |
199 | DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], | |
200 | long length, int out_count, DES_cblock *seed); | |
c2e4f17c RL |
201 | int DES_random_key(DES_cblock *ret); |
202 | void DES_set_odd_parity(DES_cblock *key); | |
203 | int DES_check_key_parity(const_DES_cblock *key); | |
204 | int DES_is_weak_key(const_DES_cblock *key); | |
0f113f3e MC |
205 | /* |
206 | * DES_set_key (= set_key = DES_key_sched = key_sched) calls | |
c2e4f17c | 207 | * DES_set_key_checked if global variable DES_check_key is set, |
0f113f3e MC |
208 | * DES_set_key_unchecked otherwise. |
209 | */ | |
210 | int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); | |
211 | int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); | |
212 | int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); | |
213 | void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); | |
214 | void DES_string_to_key(const char *str, DES_cblock *key); | |
215 | void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); | |
216 | void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, | |
217 | long length, DES_key_schedule *schedule, | |
218 | DES_cblock *ivec, int *num, int enc); | |
219 | void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, | |
220 | long length, DES_key_schedule *schedule, | |
221 | DES_cblock *ivec, int *num); | |
d02b48c6 | 222 | |
b9bd7b06 | 223 | #ifndef OPENSSL_NO_UI |
44bdb056 | 224 | int DES_read_password(DES_cblock *key, const char *prompt, int verify); |
0f113f3e MC |
225 | int DES_read_2passwords(DES_cblock *key1, DES_cblock *key2, |
226 | const char *prompt, int verify); | |
b9bd7b06 | 227 | #endif |
44bdb056 | 228 | |
0f113f3e | 229 | # define DES_fixup_key_parity DES_set_odd_parity |
37b7185b | 230 | |
d02b48c6 RE |
231 | #ifdef __cplusplus |
232 | } | |
233 | #endif | |
234 | ||
235 | #endif |