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