1295016Sjkim/* crypto/des/des_old.c */
2109998Smarkm
3280304Sjkim/*-
4280304Sjkim * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
5109998Smarkm *
6109998Smarkm * The function names in here are deprecated and are only present to
7109998Smarkm * provide an interface compatible with libdes.  OpenSSL now provides
8109998Smarkm * functions where "des_" has been replaced with "DES_" in the names,
9109998Smarkm * to make it possible to make incompatible changes that are needed
10109998Smarkm * for C type security and other stuff.
11109998Smarkm *
12109998Smarkm * Please consider starting to use the DES_ functions rather than the
13109998Smarkm * des_ ones.  The des_ functions will dissapear completely before
14109998Smarkm * OpenSSL 1.0!
15109998Smarkm *
16109998Smarkm * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
17109998Smarkm */
18109998Smarkm
19280304Sjkim/*
20280304Sjkim * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project
21280304Sjkim * 2001.
22109998Smarkm */
23109998Smarkm/* ====================================================================
24109998Smarkm * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
25109998Smarkm *
26109998Smarkm * Redistribution and use in source and binary forms, with or without
27109998Smarkm * modification, are permitted provided that the following conditions
28109998Smarkm * are met:
29109998Smarkm *
30109998Smarkm * 1. Redistributions of source code must retain the above copyright
31280304Sjkim *    notice, this list of conditions and the following disclaimer.
32109998Smarkm *
33109998Smarkm * 2. Redistributions in binary form must reproduce the above copyright
34109998Smarkm *    notice, this list of conditions and the following disclaimer in
35109998Smarkm *    the documentation and/or other materials provided with the
36109998Smarkm *    distribution.
37109998Smarkm *
38109998Smarkm * 3. All advertising materials mentioning features or use of this
39109998Smarkm *    software must display the following acknowledgment:
40109998Smarkm *    "This product includes software developed by the OpenSSL Project
41109998Smarkm *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
42109998Smarkm *
43109998Smarkm * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
44109998Smarkm *    endorse or promote products derived from this software without
45109998Smarkm *    prior written permission. For written permission, please contact
46109998Smarkm *    openssl-core@openssl.org.
47109998Smarkm *
48109998Smarkm * 5. Products derived from this software may not be called "OpenSSL"
49109998Smarkm *    nor may "OpenSSL" appear in their names without prior written
50109998Smarkm *    permission of the OpenSSL Project.
51109998Smarkm *
52109998Smarkm * 6. Redistributions of any form whatsoever must retain the following
53109998Smarkm *    acknowledgment:
54109998Smarkm *    "This product includes software developed by the OpenSSL Project
55109998Smarkm *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
56109998Smarkm *
57109998Smarkm * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
58109998Smarkm * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
59109998Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
60109998Smarkm * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
61109998Smarkm * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
62109998Smarkm * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
63109998Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
64109998Smarkm * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
65109998Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
66109998Smarkm * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
67109998Smarkm * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
68109998Smarkm * OF THE POSSIBILITY OF SUCH DAMAGE.
69109998Smarkm * ====================================================================
70109998Smarkm *
71109998Smarkm * This product includes cryptographic software written by Eric Young
72109998Smarkm * (eay@cryptsoft.com).  This product includes software written by Tim
73109998Smarkm * Hudson (tjh@cryptsoft.com).
74109998Smarkm *
75109998Smarkm */
76109998Smarkm
77109998Smarkm#define OPENSSL_DES_LIBDES_COMPATIBILITY
78109998Smarkm#include <openssl/des.h>
79109998Smarkm#include <openssl/rand.h>
80109998Smarkm
81109998Smarkmconst char *_ossl_old_des_options(void)
82280304Sjkim{
83280304Sjkim    return DES_options();
84280304Sjkim}
85280304Sjkim
86280304Sjkimvoid _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input,
87280304Sjkim                                _ossl_old_des_cblock *output,
88280304Sjkim                                des_key_schedule ks1, des_key_schedule ks2,
89280304Sjkim                                des_key_schedule ks3, int enc)
90280304Sjkim{
91280304Sjkim    DES_ecb3_encrypt((const_DES_cblock *)input, output,
92280304Sjkim                     (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
93280304Sjkim                     (DES_key_schedule *)ks3, enc);
94280304Sjkim}
95280304Sjkim
96280304SjkimDES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input,
97280304Sjkim                                 _ossl_old_des_cblock *output, long length,
98280304Sjkim                                 des_key_schedule schedule,
99280304Sjkim                                 _ossl_old_des_cblock *ivec)
100280304Sjkim{
101280304Sjkim    return DES_cbc_cksum((unsigned char *)input, output, length,
102280304Sjkim                         (DES_key_schedule *)schedule, ivec);
103280304Sjkim}
104280304Sjkim
105280304Sjkimvoid _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input,
106280304Sjkim                               _ossl_old_des_cblock *output, long length,
107280304Sjkim                               des_key_schedule schedule,
108280304Sjkim                               _ossl_old_des_cblock *ivec, int enc)
109280304Sjkim{
110280304Sjkim    DES_cbc_encrypt((unsigned char *)input, (unsigned char *)output,
111280304Sjkim                    length, (DES_key_schedule *)schedule, ivec, enc);
112280304Sjkim}
113280304Sjkim
114280304Sjkimvoid _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input,
115280304Sjkim                                _ossl_old_des_cblock *output, long length,
116280304Sjkim                                des_key_schedule schedule,
117280304Sjkim                                _ossl_old_des_cblock *ivec, int enc)
118280304Sjkim{
119280304Sjkim    DES_ncbc_encrypt((unsigned char *)input, (unsigned char *)output,
120280304Sjkim                     length, (DES_key_schedule *)schedule, ivec, enc);
121280304Sjkim}
122280304Sjkim
123280304Sjkimvoid _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input,
124280304Sjkim                                _ossl_old_des_cblock *output, long length,
125280304Sjkim                                des_key_schedule schedule,
126280304Sjkim                                _ossl_old_des_cblock *ivec,
127280304Sjkim                                _ossl_old_des_cblock *inw,
128280304Sjkim                                _ossl_old_des_cblock *outw, int enc)
129280304Sjkim{
130280304Sjkim    DES_xcbc_encrypt((unsigned char *)input, (unsigned char *)output,
131280304Sjkim                     length, (DES_key_schedule *)schedule, ivec, inw, outw,
132280304Sjkim                     enc);
133280304Sjkim}
134280304Sjkim
135280304Sjkimvoid _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out,
136280304Sjkim                               int numbits, long length,
137280304Sjkim                               des_key_schedule schedule,
138280304Sjkim                               _ossl_old_des_cblock *ivec, int enc)
139280304Sjkim{
140280304Sjkim    DES_cfb_encrypt(in, out, numbits, length,
141280304Sjkim                    (DES_key_schedule *)schedule, ivec, enc);
142280304Sjkim}
143280304Sjkim
144280304Sjkimvoid _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input,
145280304Sjkim                               _ossl_old_des_cblock *output,
146280304Sjkim                               des_key_schedule ks, int enc)
147280304Sjkim{
148280304Sjkim    DES_ecb_encrypt(input, output, (DES_key_schedule *)ks, enc);
149280304Sjkim}
150280304Sjkim
151280304Sjkimvoid _ossl_old_des_encrypt(DES_LONG *data, des_key_schedule ks, int enc)
152280304Sjkim{
153280304Sjkim    DES_encrypt1(data, (DES_key_schedule *)ks, enc);
154280304Sjkim}
155280304Sjkim
156280304Sjkimvoid _ossl_old_des_encrypt2(DES_LONG *data, des_key_schedule ks, int enc)
157280304Sjkim{
158280304Sjkim    DES_encrypt2(data, (DES_key_schedule *)ks, enc);
159280304Sjkim}
160280304Sjkim
161109998Smarkmvoid _ossl_old_des_encrypt3(DES_LONG *data, des_key_schedule ks1,
162280304Sjkim                            des_key_schedule ks2, des_key_schedule ks3)
163280304Sjkim{
164280304Sjkim    DES_encrypt3(data, (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
165280304Sjkim                 (DES_key_schedule *)ks3);
166280304Sjkim}
167280304Sjkim
168109998Smarkmvoid _ossl_old_des_decrypt3(DES_LONG *data, des_key_schedule ks1,
169280304Sjkim                            des_key_schedule ks2, des_key_schedule ks3)
170280304Sjkim{
171280304Sjkim    DES_decrypt3(data, (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
172280304Sjkim                 (DES_key_schedule *)ks3);
173280304Sjkim}
174280304Sjkim
175280304Sjkimvoid _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input,
176280304Sjkim                                    _ossl_old_des_cblock *output, long length,
177280304Sjkim                                    des_key_schedule ks1,
178280304Sjkim                                    des_key_schedule ks2,
179280304Sjkim                                    des_key_schedule ks3,
180280304Sjkim                                    _ossl_old_des_cblock *ivec, int enc)
181280304Sjkim{
182280304Sjkim    DES_ede3_cbc_encrypt((unsigned char *)input, (unsigned char *)output,
183280304Sjkim                         length, (DES_key_schedule *)ks1,
184280304Sjkim                         (DES_key_schedule *)ks2, (DES_key_schedule *)ks3,
185280304Sjkim                         ivec, enc);
186280304Sjkim}
187280304Sjkim
188109998Smarkmvoid _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out,
189280304Sjkim                                      long length, des_key_schedule ks1,
190280304Sjkim                                      des_key_schedule ks2,
191280304Sjkim                                      des_key_schedule ks3,
192280304Sjkim                                      _ossl_old_des_cblock *ivec, int *num,
193280304Sjkim                                      int enc)
194280304Sjkim{
195280304Sjkim    DES_ede3_cfb64_encrypt(in, out, length,
196280304Sjkim                           (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
197280304Sjkim                           (DES_key_schedule *)ks3, ivec, num, enc);
198280304Sjkim}
199280304Sjkim
200109998Smarkmvoid _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out,
201280304Sjkim                                      long length, des_key_schedule ks1,
202280304Sjkim                                      des_key_schedule ks2,
203280304Sjkim                                      des_key_schedule ks3,
204280304Sjkim                                      _ossl_old_des_cblock *ivec, int *num)
205280304Sjkim{
206280304Sjkim    DES_ede3_ofb64_encrypt(in, out, length,
207280304Sjkim                           (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
208280304Sjkim                           (DES_key_schedule *)ks3, ivec, num);
209280304Sjkim}
210109998Smarkm
211280304Sjkim#if 0                           /* broken code, preserved just in case anyone
212280304Sjkim                                 * specifically looks for this */
213280304Sjkimvoid _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key),
214280304Sjkim                                 _ossl_old_des_cblock (*in_white),
215280304Sjkim                                 _ossl_old_des_cblock (*out_white))
216280304Sjkim{
217280304Sjkim    DES_xwhite_in2out(des_key, in_white, out_white);
218280304Sjkim}
219194206Ssimon#endif
220109998Smarkm
221280304Sjkimint _ossl_old_des_enc_read(int fd, char *buf, int len, des_key_schedule sched,
222280304Sjkim                           _ossl_old_des_cblock *iv)
223280304Sjkim{
224280304Sjkim    return DES_enc_read(fd, buf, len, (DES_key_schedule *)sched, iv);
225280304Sjkim}
226280304Sjkim
227280304Sjkimint _ossl_old_des_enc_write(int fd, char *buf, int len,
228280304Sjkim                            des_key_schedule sched, _ossl_old_des_cblock *iv)
229280304Sjkim{
230280304Sjkim    return DES_enc_write(fd, buf, len, (DES_key_schedule *)sched, iv);
231280304Sjkim}
232280304Sjkim
233280304Sjkimchar *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret)
234280304Sjkim{
235280304Sjkim    return DES_fcrypt(buf, salt, ret);
236280304Sjkim}
237280304Sjkim
238280304Sjkimchar *_ossl_old_des_crypt(const char *buf, const char *salt)
239280304Sjkim{
240280304Sjkim    return DES_crypt(buf, salt);
241280304Sjkim}
242280304Sjkim
243280304Sjkimchar *_ossl_old_crypt(const char *buf, const char *salt)
244280304Sjkim{
245280304Sjkim    return DES_crypt(buf, salt);
246280304Sjkim}
247280304Sjkim
248280304Sjkimvoid _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out,
249280304Sjkim                               int numbits, long length,
250280304Sjkim                               des_key_schedule schedule,
251280304Sjkim                               _ossl_old_des_cblock *ivec)
252280304Sjkim{
253280304Sjkim    DES_ofb_encrypt(in, out, numbits, length, (DES_key_schedule *)schedule,
254280304Sjkim                    ivec);
255280304Sjkim}
256280304Sjkim
257280304Sjkimvoid _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input,
258280304Sjkim                                _ossl_old_des_cblock *output, long length,
259280304Sjkim                                des_key_schedule schedule,
260280304Sjkim                                _ossl_old_des_cblock *ivec, int enc)
261280304Sjkim{
262280304Sjkim    DES_pcbc_encrypt((unsigned char *)input, (unsigned char *)output,
263280304Sjkim                     length, (DES_key_schedule *)schedule, ivec, enc);
264280304Sjkim}
265280304Sjkim
266280304SjkimDES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input,
267280304Sjkim                                  _ossl_old_des_cblock *output, long length,
268280304Sjkim                                  int out_count, _ossl_old_des_cblock *seed)
269280304Sjkim{
270280304Sjkim    return DES_quad_cksum((unsigned char *)input, output, length,
271280304Sjkim                          out_count, seed);
272280304Sjkim}
273280304Sjkim
274109998Smarkmvoid _ossl_old_des_random_seed(_ossl_old_des_cblock key)
275280304Sjkim{
276280304Sjkim    RAND_seed(key, sizeof(_ossl_old_des_cblock));
277280304Sjkim}
278280304Sjkim
279109998Smarkmvoid _ossl_old_des_random_key(_ossl_old_des_cblock ret)
280280304Sjkim{
281280304Sjkim    DES_random_key((DES_cblock *)ret);
282280304Sjkim}
283280304Sjkim
284109998Smarkmint _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt,
285280304Sjkim                                int verify)
286280304Sjkim{
287280304Sjkim    return DES_read_password(key, prompt, verify);
288280304Sjkim}
289280304Sjkim
290280304Sjkimint _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1,
291280304Sjkim                                  _ossl_old_des_cblock *key2,
292280304Sjkim                                  const char *prompt, int verify)
293280304Sjkim{
294280304Sjkim    return DES_read_2passwords(key1, key2, prompt, verify);
295280304Sjkim}
296280304Sjkim
297109998Smarkmvoid _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key)
298280304Sjkim{
299280304Sjkim    DES_set_odd_parity(key);
300280304Sjkim}
301280304Sjkim
302109998Smarkmint _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key)
303280304Sjkim{
304280304Sjkim    return DES_is_weak_key(key);
305280304Sjkim}
306280304Sjkim
307280304Sjkimint _ossl_old_des_set_key(_ossl_old_des_cblock *key,
308280304Sjkim                          des_key_schedule schedule)
309280304Sjkim{
310280304Sjkim    return DES_set_key(key, (DES_key_schedule *)schedule);
311280304Sjkim}
312280304Sjkim
313280304Sjkimint _ossl_old_des_key_sched(_ossl_old_des_cblock *key,
314280304Sjkim                            des_key_schedule schedule)
315280304Sjkim{
316280304Sjkim    return DES_key_sched(key, (DES_key_schedule *)schedule);
317280304Sjkim}
318280304Sjkim
319280304Sjkimvoid _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key)
320280304Sjkim{
321280304Sjkim    DES_string_to_key(str, key);
322280304Sjkim}
323280304Sjkim
324280304Sjkimvoid _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1,
325280304Sjkim                                   _ossl_old_des_cblock *key2)
326280304Sjkim{
327280304Sjkim    DES_string_to_2keys(str, key1, key2);
328280304Sjkim}
329280304Sjkim
330280304Sjkimvoid _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out,
331280304Sjkim                                 long length, des_key_schedule schedule,
332280304Sjkim                                 _ossl_old_des_cblock *ivec, int *num,
333280304Sjkim                                 int enc)
334280304Sjkim{
335280304Sjkim    DES_cfb64_encrypt(in, out, length, (DES_key_schedule *)schedule,
336280304Sjkim                      ivec, num, enc);
337280304Sjkim}
338280304Sjkim
339280304Sjkimvoid _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out,
340280304Sjkim                                 long length, des_key_schedule schedule,
341280304Sjkim                                 _ossl_old_des_cblock *ivec, int *num)
342280304Sjkim{
343280304Sjkim    DES_ofb64_encrypt(in, out, length, (DES_key_schedule *)schedule,
344280304Sjkim                      ivec, num);
345280304Sjkim}
346