1 /* crypto/des/des_comp.c -*- mode:C; c-file-style: "eay" -*- */
2 /* Written by Richard Levitte (richard@levitte.org) for the OpenSSL
5 /* ====================================================================
6 * Copyright (c) 1998-2001 The OpenSSL Project. All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
20 * 3. All advertising materials mentioning features or use of this
21 * software must display the following acknowledgment:
22 * "This product includes software developed by the OpenSSL Project
23 * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
25 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26 * endorse or promote products derived from this software without
27 * prior written permission. For written permission, please contact
28 * openssl-core@openssl.org.
30 * 5. Products derived from this software may not be called "OpenSSL"
31 * nor may "OpenSSL" appear in their names without prior written
32 * permission of the OpenSSL Project.
34 * 6. Redistributions of any form whatsoever must retain the following
36 * "This product includes software developed by the OpenSSL Project
37 * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
39 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
43 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
49 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50 * OF THE POSSIBILITY OF SUCH DAMAGE.
51 * ====================================================================
53 * This product includes cryptographic software written by Eric Young
54 * (eay@cryptsoft.com). This product includes software written by Tim
55 * Hudson (tjh@cryptsoft.com).
59 #include <openssl/des_old.h>
61 const char *des_options(void)
65 void des_ecb3_encrypt(des_cblock *input,des_cblock *output,
66 des_key_schedule ks1,des_key_schedule ks2,
67 des_key_schedule ks3, int enc)
69 DES_ecb3_encrypt((const_DES_cblock *)input, output,
70 (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
71 (DES_key_schedule *)ks3, enc);
73 DES_LONG des_cbc_cksum(des_cblock *input,des_cblock *output,
74 long length,des_key_schedule schedule,des_cblock *ivec)
76 return DES_cbc_cksum((unsigned char *)input, output, length,
77 (DES_key_schedule *)schedule, ivec);
79 void des_cbc_encrypt(des_cblock *input,des_cblock *output,long length,
80 des_key_schedule schedule,des_cblock *ivec,int enc)
82 DES_cbc_encrypt((unsigned char *)input, (unsigned char *)output,
83 length, (DES_key_schedule *)schedule, ivec, enc);
85 void des_ncbc_encrypt(des_cblock *input,des_cblock *output,long length,
86 des_key_schedule schedule,des_cblock *ivec,int enc)
88 DES_ncbc_encrypt((unsigned char *)input, (unsigned char *)output,
89 length, (DES_key_schedule *)schedule, ivec, enc);
91 void des_xcbc_encrypt(des_cblock *input,des_cblock *output,long length,
92 des_key_schedule schedule,des_cblock *ivec,
93 des_cblock *inw,des_cblock *outw,int enc)
95 DES_xcbc_encrypt((unsigned char *)input, (unsigned char *)output,
96 length, (DES_key_schedule *)schedule, ivec, inw, outw, enc);
98 void des_cfb_encrypt(unsigned char *in,unsigned char *out,int numbits,
99 long length,des_key_schedule schedule,des_cblock *ivec,int enc)
101 DES_cfb_encrypt(in, out, numbits, length,
102 (DES_key_schedule *)schedule, ivec, enc);
104 void des_ecb_encrypt(des_cblock *input,des_cblock *output,
105 des_key_schedule ks,int enc)
107 DES_ecb_encrypt(input, output, (DES_key_schedule *)ks, enc);
109 void des_encrypt(DES_LONG *data,des_key_schedule ks, int enc)
111 DES_encrypt1(data, (DES_key_schedule *)ks, enc);
113 void des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc)
115 DES_encrypt2(data, (DES_key_schedule *)ks, enc);
117 void des_encrypt3(DES_LONG *data, des_key_schedule ks1,
118 des_key_schedule ks2, des_key_schedule ks3)
120 DES_encrypt3(data, (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
121 (DES_key_schedule *)ks3);
123 void des_decrypt3(DES_LONG *data, des_key_schedule ks1,
124 des_key_schedule ks2, des_key_schedule ks3)
126 DES_decrypt3(data, (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
127 (DES_key_schedule *)ks3);
129 void des_ede3_cbc_encrypt(des_cblock *input, des_cblock *output,
130 long length, des_key_schedule ks1, des_key_schedule ks2,
131 des_key_schedule ks3, des_cblock *ivec, int enc)
133 DES_ede3_cbc_encrypt((unsigned char *)input, (unsigned char *)output,
134 length, (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
135 (DES_key_schedule *)ks3, ivec, enc);
137 void des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out,
138 long length, des_key_schedule ks1, des_key_schedule ks2,
139 des_key_schedule ks3, des_cblock *ivec, int *num, int enc)
141 DES_ede3_cfb64_encrypt(in, out, length,
142 (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
143 (DES_key_schedule *)ks3, ivec, num, enc);
145 void des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out,
146 long length, des_key_schedule ks1, des_key_schedule ks2,
147 des_key_schedule ks3, des_cblock *ivec, int *num)
149 DES_ede3_ofb64_encrypt(in, out, length,
150 (DES_key_schedule *)ks1, (DES_key_schedule *)ks2,
151 (DES_key_schedule *)ks3, ivec, num);
154 void des_xwhite_in2out(des_cblock (*des_key), des_cblock (*in_white),
155 des_cblock (*out_white))
157 DES_xwhite_in2out(des_key, in_white, out_white);
160 int des_enc_read(int fd,char *buf,int len,des_key_schedule sched,
163 return DES_enc_read(fd, buf, len, (DES_key_schedule *)sched, iv);
165 int des_enc_write(int fd,char *buf,int len,des_key_schedule sched,
168 return DES_enc_write(fd, buf, len, (DES_key_schedule *)sched, iv);
170 char *des_fcrypt(const char *buf,const char *salt, char *ret)
172 return DES_fcrypt(buf, salt, ret);
174 char *des_crypt(const char *buf,const char *salt)
176 return DES_crypt(buf, salt);
178 #if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT)
179 char *crypt(const char *buf,const char *salt)
181 return DES_crypt(buf, salt);
184 void des_ofb_encrypt(unsigned char *in,unsigned char *out,
185 int numbits,long length,des_key_schedule schedule,des_cblock *ivec)
187 DES_ofb_encrypt(in, out, numbits, length, (DES_key_schedule *)schedule,
190 void des_pcbc_encrypt(des_cblock *input,des_cblock *output,long length,
191 des_key_schedule schedule,des_cblock *ivec,int enc)
193 DES_pcbc_encrypt((unsigned char *)input, (unsigned char *)output,
194 length, (DES_key_schedule *)schedule, ivec, enc);
196 DES_LONG des_quad_cksum(des_cblock *input,des_cblock *output,
197 long length,int out_count,des_cblock *seed)
199 return DES_quad_cksum((unsigned char *)input, output, length,
202 void des_random_seed(des_cblock key)
204 DES_random_seed((DES_cblock *)key);
206 void des_random_key(des_cblock ret)
208 DES_random_key((DES_cblock *)ret);
210 void des_set_odd_parity(des_cblock *key)
212 DES_set_odd_parity(key);
214 int des_is_weak_key(des_cblock *key)
216 return DES_is_weak_key(key);
218 int des_set_key(des_cblock *key,des_key_schedule schedule)
220 return DES_set_key(key, (DES_key_schedule *)schedule);
222 int des_key_sched(des_cblock *key,des_key_schedule schedule)
224 return DES_key_sched(key, (DES_key_schedule *)schedule);
226 void des_string_to_key(char *str,des_cblock *key)
228 DES_string_to_key(str, key);
230 void des_string_to_2keys(char *str,des_cblock *key1,des_cblock *key2)
232 DES_string_to_2keys(str, key1, key2);
234 void des_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,
235 des_key_schedule schedule, des_cblock *ivec, int *num, int enc)
237 DES_cfb64_encrypt(in, out, length, (DES_key_schedule *)schedule,
240 void des_ofb64_encrypt(unsigned char *in, unsigned char *out, long length,
241 des_key_schedule schedule, des_cblock *ivec, int *num)
243 DES_ofb64_encrypt(in, out, length, (DES_key_schedule *)schedule,