Combine DES code into a smaller set of files.
authorjsing <jsing@openbsd.org>
Sat, 31 Aug 2024 15:56:09 +0000 (15:56 +0000)
committerjsing <jsing@openbsd.org>
Sat, 31 Aug 2024 15:56:09 +0000 (15:56 +0000)
Discussed with tb@

22 files changed:
lib/libcrypto/Makefile
lib/libcrypto/des/cbc_cksm.c [deleted file]
lib/libcrypto/des/cbc_enc.c [deleted file]
lib/libcrypto/des/cfb64ede.c [deleted file]
lib/libcrypto/des/cfb64enc.c [deleted file]
lib/libcrypto/des/cfb_enc.c [deleted file]
lib/libcrypto/des/des.c [new file with mode: 0644]
lib/libcrypto/des/des_cksum.c [new file with mode: 0644]
lib/libcrypto/des/des_fcrypt.c [new file with mode: 0644]
lib/libcrypto/des/des_key.c [new file with mode: 0644]
lib/libcrypto/des/ecb3_enc.c [deleted file]
lib/libcrypto/des/ecb_enc.c [deleted file]
lib/libcrypto/des/ede_cbcm_enc.c [deleted file]
lib/libcrypto/des/fcrypt.c [deleted file]
lib/libcrypto/des/ofb64ede.c [deleted file]
lib/libcrypto/des/ofb64enc.c [deleted file]
lib/libcrypto/des/ofb_enc.c [deleted file]
lib/libcrypto/des/pcbc_enc.c [deleted file]
lib/libcrypto/des/qud_cksm.c [deleted file]
lib/libcrypto/des/set_key.c [deleted file]
lib/libcrypto/des/str2key.c [deleted file]
lib/libcrypto/des/xcbc_enc.c [deleted file]

index 2b8fe88..dfbb38b 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.210 2024/08/31 15:39:33 jsing Exp $
+# $OpenBSD: Makefile,v 1.211 2024/08/31 15:56:09 jsing Exp $
 
 LIB=   crypto
 LIBREBUILD=y
@@ -251,24 +251,11 @@ SRCS+= curve25519-generic.c
 SRCS+= curve25519.c
 
 # des/
-SRCS+= cbc_cksm.c
-SRCS+= cbc_enc.c
-SRCS+= cfb64ede.c
-SRCS+= cfb64enc.c
-SRCS+= cfb_enc.c
+SRCS+= des.c
+SRCS+= des_cksum.c
 SRCS+= des_enc.c
-SRCS+= ecb3_enc.c
-SRCS+= ecb_enc.c
-SRCS+= ede_cbcm_enc.c
-SRCS+= fcrypt.c
-SRCS+= ofb64ede.c
-SRCS+= ofb64enc.c
-SRCS+= ofb_enc.c
-SRCS+= pcbc_enc.c
-SRCS+= qud_cksm.c
-SRCS+= set_key.c
-SRCS+= str2key.c
-SRCS+= xcbc_enc.c
+SRCS+= des_fcrypt.c
+SRCS+= des_key.c
 
 # dh/
 SRCS+= dh_ameth.c
diff --git a/lib/libcrypto/des/cbc_cksm.c b/lib/libcrypto/des/cbc_cksm.c
deleted file mode 100644 (file)
index acb0bac..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* $OpenBSD: cbc_cksm.c,v 1.11 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-DES_LONG
-DES_cbc_cksum(const unsigned char *in, DES_cblock *output,
-    long length, DES_key_schedule *schedule,
-    const_DES_cblock *ivec)
-{
-       DES_LONG tout0, tout1, tin0, tin1;
-       long l = length;
-       DES_LONG tin[2];
-       unsigned char *out = &(*output)[0];
-       const unsigned char *iv = &(*ivec)[0];
-
-       c2l(iv, tout0);
-       c2l(iv, tout1);
-       for (; l > 0; l -= 8) {
-               if (l >= 8) {
-                       c2l(in, tin0);
-                       c2l(in, tin1);
-               } else
-                       c2ln(in, tin0, tin1, l);
-
-               tin0 ^= tout0;
-               tin[0] = tin0;
-               tin1 ^= tout1;
-               tin[1] = tin1;
-               DES_encrypt1((DES_LONG *)tin, schedule, DES_ENCRYPT);
-               /* fix 15/10/91 eay - thanks to keithr@sco.COM */
-               tout0 = tin[0];
-               tout1 = tin[1];
-       }
-       if (out != NULL) {
-               l2c(tout0, out);
-               l2c(tout1, out);
-       }
-       tout0 = tin0 = tin1 = tin[0] = tin[1] = 0;
-       /*
-         Transform the data in tout1 so that it will
-         match the return value that the MIT Kerberos
-         mit_des_cbc_cksum API returns.
-       */
-       tout1 = ((tout1 >> 24L) & 0x000000FF) |
-           ((tout1 >> 8L) & 0x0000FF00) |
-           ((tout1 << 8L) & 0x00FF0000) |
-           ((tout1 << 24L) & 0xFF000000);
-       return (tout1);
-}
-LCRYPTO_ALIAS(DES_cbc_cksum);
diff --git a/lib/libcrypto/des/cbc_enc.c b/lib/libcrypto/des/cbc_enc.c
deleted file mode 100644 (file)
index 1f11cc3..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/* $OpenBSD: cbc_enc.c,v 1.5 2024/08/31 14:25:04 jsing Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-void
-DES_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
-    DES_key_schedule *_schedule, DES_cblock *ivec, int enc)
-{
-       DES_LONG tin0, tin1;
-       DES_LONG tout0, tout1, xor0, xor1;
-       long l = length;
-       DES_LONG tin[2];
-       unsigned char *iv;
-
-       iv = &(*ivec)[0];
-
-       if (enc) {
-               c2l(iv, tout0);
-               c2l(iv, tout1);
-               for (l -= 8; l >= 0; l -= 8) {
-                       c2l(in, tin0);
-                       c2l(in, tin1);
-                       tin0 ^= tout0;
-                       tin[0] = tin0;
-                       tin1 ^= tout1;
-                       tin[1] = tin1;
-                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_ENCRYPT);
-                       tout0 = tin[0];
-                       l2c(tout0, out);
-                       tout1 = tin[1];
-                       l2c(tout1, out);
-               }
-               if (l != -8) {
-                       c2ln(in, tin0, tin1, l + 8);
-                       tin0 ^= tout0;
-                       tin[0] = tin0;
-                       tin1 ^= tout1;
-                       tin[1] = tin1;
-                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_ENCRYPT);
-                       tout0 = tin[0];
-                       l2c(tout0, out);
-                       tout1 = tin[1];
-                       l2c(tout1, out);
-               }
-       } else {
-               c2l(iv, xor0);
-               c2l(iv, xor1);
-               for (l -= 8; l >= 0; l -= 8) {
-                       c2l(in, tin0);
-                       tin[0] = tin0;
-                       c2l(in, tin1);
-                       tin[1] = tin1;
-                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_DECRYPT);
-                       tout0 = tin[0] ^ xor0;
-                       tout1 = tin[1] ^ xor1;
-                       l2c(tout0, out);
-                       l2c(tout1, out);
-                       xor0 = tin0;
-                       xor1 = tin1;
-               }
-               if (l != -8) {
-                       c2l(in, tin0);
-                       tin[0] = tin0;
-                       c2l(in, tin1);
-                       tin[1] = tin1;
-                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_DECRYPT);
-                       tout0 = tin[0] ^ xor0;
-                       tout1 = tin[1] ^ xor1;
-                       l2cn(tout0, tout1, out, l + 8);
-               }
-       }
-       tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
-       tin[0] = tin[1] = 0;
-}
-LCRYPTO_ALIAS(DES_cbc_encrypt);
diff --git a/lib/libcrypto/des/cfb64ede.c b/lib/libcrypto/des/cfb64ede.c
deleted file mode 100644 (file)
index 69a6c25..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/* $OpenBSD: cfb64ede.c,v 1.13 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-/* The input and output encrypted as though 64bit cfb mode is being
- * used.  The extra state information to record how much of the
- * 64bit block we have used is contained in *num;
- */
-
-void
-DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
-    long length, DES_key_schedule *ks1,
-    DES_key_schedule *ks2, DES_key_schedule *ks3,
-    DES_cblock *ivec, int *num, int enc)
-{
-       DES_LONG v0, v1;
-       long l = length;
-       int n = *num;
-       DES_LONG ti[2];
-       unsigned char *iv, c, cc;
-
-       iv = &(*ivec)[0];
-       if (enc) {
-               while (l--) {
-                       if (n == 0) {
-                               c2l(iv, v0);
-                               c2l(iv, v1);
-
-                               ti[0] = v0;
-                               ti[1] = v1;
-                               DES_encrypt3(ti, ks1, ks2, ks3);
-                               v0 = ti[0];
-                               v1 = ti[1];
-
-                               iv = &(*ivec)[0];
-                               l2c(v0, iv);
-                               l2c(v1, iv);
-                               iv = &(*ivec)[0];
-                       }
-                       c = *(in++) ^ iv[n];
-                       *(out++) = c;
-                       iv[n] = c;
-                       n = (n + 1) & 0x07;
-               }
-       } else {
-               while (l--) {
-                       if (n == 0) {
-                               c2l(iv, v0);
-                               c2l(iv, v1);
-
-                               ti[0] = v0;
-                               ti[1] = v1;
-                               DES_encrypt3(ti, ks1, ks2, ks3);
-                               v0 = ti[0];
-                               v1 = ti[1];
-
-                               iv = &(*ivec)[0];
-                               l2c(v0, iv);
-                               l2c(v1, iv);
-                               iv = &(*ivec)[0];
-                       }
-                       cc = *(in++);
-                       c = iv[n];
-                       iv[n] = cc;
-                       *(out++) = c ^ cc;
-                       n = (n + 1) & 0x07;
-               }
-       }
-       v0 = v1 = ti[0] = ti[1] = c = cc = 0;
-       *num = n;
-}
-LCRYPTO_ALIAS(DES_ede3_cfb64_encrypt);
-
-/* This is compatible with the single key CFB-r for DES, even thought that's
- * not what EVP needs.
- */
-
-void
-DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out,
-    int numbits, long length, DES_key_schedule *ks1,
-    DES_key_schedule *ks2, DES_key_schedule *ks3,
-    DES_cblock *ivec, int enc)
-{
-       DES_LONG d0, d1, v0, v1;
-       unsigned long l = length, n = ((unsigned int)numbits + 7)/8;
-       int num = numbits, i;
-       DES_LONG ti[2];
-       unsigned char *iv;
-       unsigned char ovec[16];
-
-       if (num > 64)
-               return;
-       iv = &(*ivec)[0];
-       c2l(iv, v0);
-       c2l(iv, v1);
-       if (enc) {
-               while (l >= n) {
-                       l -= n;
-                       ti[0] = v0;
-                       ti[1] = v1;
-                       DES_encrypt3(ti, ks1, ks2, ks3);
-                       c2ln(in, d0, d1, n);
-                       in += n;
-                       d0 ^= ti[0];
-                       d1 ^= ti[1];
-                       l2cn(d0, d1, out, n);
-                       out += n;
-                       /* 30-08-94 - eay - changed because l>>32 and
-                        * l<<32 are bad under gcc :-( */
-                       if (num == 32) {
-                               v0 = v1;
-                               v1 = d0;
-                       } else if (num == 64) {
-                               v0 = d0;
-                               v1 = d1;
-                       } else {
-                               iv = &ovec[0];
-                               l2c(v0, iv);
-                               l2c(v1, iv);
-                               l2c(d0, iv);
-                               l2c(d1, iv);
-                               /* shift ovec left most of the bits... */
-                               memmove(ovec, ovec + num/8,
-                                   8 + (num % 8 ? 1 : 0));
-                               /* now the remaining bits */
-                               if (num % 8 != 0) {
-                                       for (i = 0; i < 8; ++i) {
-                                               ovec[i] <<= num % 8;
-                                               ovec[i] |= ovec[i + 1] >>
-                                                   (8 - num % 8);
-                                       }
-                               }
-                               iv = &ovec[0];
-                               c2l(iv, v0);
-                               c2l(iv, v1);
-                       }
-               }
-       } else {
-               while (l >= n) {
-                       l -= n;
-                       ti[0] = v0;
-                       ti[1] = v1;
-                       DES_encrypt3(ti, ks1, ks2, ks3);
-                       c2ln(in, d0, d1, n);
-                       in += n;
-                       /* 30-08-94 - eay - changed because l>>32 and
-                        * l<<32 are bad under gcc :-( */
-                       if (num == 32) {
-                               v0 = v1;
-                               v1 = d0;
-                       } else if (num == 64) {
-                               v0 = d0;
-                               v1 = d1;
-                       } else {
-                               iv = &ovec[0];
-                               l2c(v0, iv);
-                               l2c(v1, iv);
-                               l2c(d0, iv);
-                               l2c(d1, iv);
-                               /* shift ovec left most of the bits... */
-                               memmove(ovec, ovec + num/8,
-                                   8 + (num % 8 ? 1 : 0));
-                               /* now the remaining bits */
-                               if (num % 8 != 0) {
-                                       for (i = 0; i < 8; ++i) {
-                                               ovec[i] <<= num % 8;
-                                               ovec[i] |= ovec[i + 1] >>
-                                                   (8 - num % 8);
-                                       }
-                               }
-                               iv = &ovec[0];
-                               c2l(iv, v0);
-                               c2l(iv, v1);
-                       }
-                       d0 ^= ti[0];
-                       d1 ^= ti[1];
-                       l2cn(d0, d1, out, n);
-                       out += n;
-               }
-       }
-       iv = &(*ivec)[0];
-       l2c(v0, iv);
-       l2c(v1, iv);
-       v0 = v1 = d0 = d1 = ti[0] = ti[1] = 0;
-}
-LCRYPTO_ALIAS(DES_ede3_cfb_encrypt);
diff --git a/lib/libcrypto/des/cfb64enc.c b/lib/libcrypto/des/cfb64enc.c
deleted file mode 100644 (file)
index d2d0dad..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/* $OpenBSD: cfb64enc.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-/* The input and output encrypted as though 64bit cfb mode is being
- * used.  The extra state information to record how much of the
- * 64bit block we have used is contained in *num;
- */
-
-void
-DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,
-    long length, DES_key_schedule *schedule,
-    DES_cblock *ivec, int *num, int enc)
-{
-       DES_LONG v0, v1;
-       long l = length;
-       int n = *num;
-       DES_LONG ti[2];
-       unsigned char *iv, c, cc;
-
-       iv = &(*ivec)[0];
-       if (enc) {
-               while (l--) {
-                       if (n == 0) {
-                               c2l(iv, v0);
-                               ti[0] = v0;
-                               c2l(iv, v1);
-                               ti[1] = v1;
-                               DES_encrypt1(ti, schedule, DES_ENCRYPT);
-                               iv = &(*ivec)[0];
-                               v0 = ti[0];
-                               l2c(v0, iv);
-                               v0 = ti[1];
-                               l2c(v0, iv);
-                               iv = &(*ivec)[0];
-                       }
-                       c = *(in++) ^ iv[n];
-                       *(out++) = c;
-                       iv[n] = c;
-                       n = (n + 1) & 0x07;
-               }
-       } else {
-               while (l--) {
-                       if (n == 0) {
-                               c2l(iv, v0);
-                               ti[0] = v0;
-                               c2l(iv, v1);
-                               ti[1] = v1;
-                               DES_encrypt1(ti, schedule, DES_ENCRYPT);
-                               iv = &(*ivec)[0];
-                               v0 = ti[0];
-                               l2c(v0, iv);
-                               v0 = ti[1];
-                               l2c(v0, iv);
-                               iv = &(*ivec)[0];
-                       }
-                       cc = *(in++);
-                       c = iv[n];
-                       iv[n] = cc;
-                       *(out++) = c ^ cc;
-                       n = (n + 1) & 0x07;
-               }
-       }
-       v0 = v1 = ti[0] = ti[1] = c = cc = 0;
-       *num = n;
-}
-LCRYPTO_ALIAS(DES_cfb64_encrypt);
diff --git a/lib/libcrypto/des/cfb_enc.c b/lib/libcrypto/des/cfb_enc.c
deleted file mode 100644 (file)
index ae41c9d..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/* $OpenBSD: cfb_enc.c,v 1.17 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-#include <endian.h>
-
-/* The input and output are loaded in multiples of 8 bits.
- * What this means is that if you hame numbits=12 and length=2
- * the first 12 bits will be retrieved from the first byte and half
- * the second.  The second 12 bits will come from the 3rd and half the 4th
- * byte.
- */
-/* Until Aug 1 2003 this function did not correctly implement CFB-r, so it
- * will not be compatible with any encryption prior to that date. Ben. */
-void
-DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
-    long length, DES_key_schedule *schedule, DES_cblock *ivec,
-    int enc)
-{
-       DES_LONG d0, d1, v0, v1;
-       unsigned long l = length;
-       int num = numbits/8, n = (numbits + 7)/8, i, rem = numbits % 8;
-       DES_LONG ti[2];
-       unsigned char *iv;
-#if BYTE_ORDER != LITTLE_ENDIAN
-       unsigned char ovec[16];
-#else
-       unsigned int sh[4];
-       unsigned char *ovec = (unsigned char *)sh;
-#endif
-
-       if (numbits <= 0 || numbits > 64)
-               return;
-       iv = &(*ivec)[0];
-       c2l(iv, v0);
-       c2l(iv, v1);
-       if (enc) {
-               while (l >= (unsigned long)n) {
-                       l -= n;
-                       ti[0] = v0;
-                       ti[1] = v1;
-                       DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT);
-                       c2ln(in, d0, d1, n);
-                       in += n;
-                       d0 ^= ti[0];
-                       d1 ^= ti[1];
-                       l2cn(d0, d1, out, n);
-                       out += n;
-                       /* 30-08-94 - eay - changed because l>>32 and
-                        * l<<32 are bad under gcc :-( */
-                       if (numbits == 32) {
-                               v0 = v1;
-                               v1 = d0;
-                       } else if (numbits == 64) {
-                               v0 = d0;
-                               v1 = d1;
-                       } else {
-#if BYTE_ORDER != LITTLE_ENDIAN
-                               iv = &ovec[0];
-                               l2c(v0, iv);
-                               l2c(v1, iv);
-                               l2c(d0, iv);
-                               l2c(d1, iv);
-#else
-                               sh[0] = v0, sh[1] = v1, sh[2] = d0, sh[3] = d1;
-#endif
-                               if (rem == 0)
-                                       memmove(ovec, ovec + num, 8);
-                               else
-                                       for (i = 0; i < 8; ++i)
-                                               ovec[i] = ovec[i + num] << rem |
-                                                   ovec[i + num + 1] >> (8 -
-                                                   rem);
-#if BYTE_ORDER == LITTLE_ENDIAN
-                               v0 = sh[0], v1 = sh[1];
-#else
-                               iv = &ovec[0];
-                               c2l(iv, v0);
-                               c2l(iv, v1);
-#endif
-                       }
-               }
-       } else {
-               while (l >= (unsigned long)n) {
-                       l -= n;
-                       ti[0] = v0;
-                       ti[1] = v1;
-                       DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT);
-                       c2ln(in, d0, d1, n);
-                       in += n;
-                       /* 30-08-94 - eay - changed because l>>32 and
-                        * l<<32 are bad under gcc :-( */
-                       if (numbits == 32) {
-                               v0 = v1;
-                               v1 = d0;
-                       } else if (numbits == 64) {
-                               v0 = d0;
-                               v1 = d1;
-                       } else {
-#if BYTE_ORDER != LITTLE_ENDIAN
-                               iv = &ovec[0];
-                               l2c(v0, iv);
-                               l2c(v1, iv);
-                               l2c(d0, iv);
-                               l2c(d1, iv);
-#else
-                               sh[0] = v0, sh[1] = v1, sh[2] = d0, sh[3] = d1;
-#endif
-                               if (rem == 0)
-                                       memmove(ovec, ovec + num, 8);
-                               else
-                                       for (i = 0; i < 8; ++i)
-                                               ovec[i] = ovec[i + num] << rem |
-                                                   ovec[i + num + 1] >> (8 -
-                                                   rem);
-#if BYTE_ORDER == LITTLE_ENDIAN
-                               v0 = sh[0], v1 = sh[1];
-#else
-                               iv = &ovec[0];
-                               c2l(iv, v0);
-                               c2l(iv, v1);
-#endif
-                       }
-                       d0 ^= ti[0];
-                       d1 ^= ti[1];
-                       l2cn(d0, d1, out, n);
-                       out += n;
-               }
-       }
-       iv = &(*ivec)[0];
-       l2c(v0, iv);
-       l2c(v1, iv);
-       v0 = v1 = d0 = d1 = ti[0] = ti[1] = 0;
-}
-LCRYPTO_ALIAS(DES_cfb_encrypt);
diff --git a/lib/libcrypto/des/des.c b/lib/libcrypto/des/des.c
new file mode 100644 (file)
index 0000000..113fc4b
--- /dev/null
@@ -0,0 +1,1022 @@
+/* $OpenBSD: des.c,v 1.9 2024/08/31 15:56:09 jsing Exp $ */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <endian.h>
+
+#include <openssl/opensslconf.h>
+
+#include "des_local.h"
+
+void
+DES_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+    DES_key_schedule *_schedule, DES_cblock *ivec, int enc)
+{
+       DES_LONG tin0, tin1;
+       DES_LONG tout0, tout1, xor0, xor1;
+       long l = length;
+       DES_LONG tin[2];
+       unsigned char *iv;
+
+       iv = &(*ivec)[0];
+
+       if (enc) {
+               c2l(iv, tout0);
+               c2l(iv, tout1);
+               for (l -= 8; l >= 0; l -= 8) {
+                       c2l(in, tin0);
+                       c2l(in, tin1);
+                       tin0 ^= tout0;
+                       tin[0] = tin0;
+                       tin1 ^= tout1;
+                       tin[1] = tin1;
+                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_ENCRYPT);
+                       tout0 = tin[0];
+                       l2c(tout0, out);
+                       tout1 = tin[1];
+                       l2c(tout1, out);
+               }
+               if (l != -8) {
+                       c2ln(in, tin0, tin1, l + 8);
+                       tin0 ^= tout0;
+                       tin[0] = tin0;
+                       tin1 ^= tout1;
+                       tin[1] = tin1;
+                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_ENCRYPT);
+                       tout0 = tin[0];
+                       l2c(tout0, out);
+                       tout1 = tin[1];
+                       l2c(tout1, out);
+               }
+       } else {
+               c2l(iv, xor0);
+               c2l(iv, xor1);
+               for (l -= 8; l >= 0; l -= 8) {
+                       c2l(in, tin0);
+                       tin[0] = tin0;
+                       c2l(in, tin1);
+                       tin[1] = tin1;
+                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_DECRYPT);
+                       tout0 = tin[0] ^ xor0;
+                       tout1 = tin[1] ^ xor1;
+                       l2c(tout0, out);
+                       l2c(tout1, out);
+                       xor0 = tin0;
+                       xor1 = tin1;
+               }
+               if (l != -8) {
+                       c2l(in, tin0);
+                       tin[0] = tin0;
+                       c2l(in, tin1);
+                       tin[1] = tin1;
+                       DES_encrypt1((DES_LONG *)tin, _schedule, DES_DECRYPT);
+                       tout0 = tin[0] ^ xor0;
+                       tout1 = tin[1] ^ xor1;
+                       l2cn(tout0, tout1, out, l + 8);
+               }
+       }
+       tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
+       tin[0] = tin[1] = 0;
+}
+LCRYPTO_ALIAS(DES_cbc_encrypt);
+
+/* The input and output encrypted as though 64bit cfb mode is being
+ * used.  The extra state information to record how much of the
+ * 64bit block we have used is contained in *num;
+ */
+
+void
+DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
+    long length, DES_key_schedule *ks1,
+    DES_key_schedule *ks2, DES_key_schedule *ks3,
+    DES_cblock *ivec, int *num, int enc)
+{
+       DES_LONG v0, v1;
+       long l = length;
+       int n = *num;
+       DES_LONG ti[2];
+       unsigned char *iv, c, cc;
+
+       iv = &(*ivec)[0];
+       if (enc) {
+               while (l--) {
+                       if (n == 0) {
+                               c2l(iv, v0);
+                               c2l(iv, v1);
+
+                               ti[0] = v0;
+                               ti[1] = v1;
+                               DES_encrypt3(ti, ks1, ks2, ks3);
+                               v0 = ti[0];
+                               v1 = ti[1];
+
+                               iv = &(*ivec)[0];
+                               l2c(v0, iv);
+                               l2c(v1, iv);
+                               iv = &(*ivec)[0];
+                       }
+                       c = *(in++) ^ iv[n];
+                       *(out++) = c;
+                       iv[n] = c;
+                       n = (n + 1) & 0x07;
+               }
+       } else {
+               while (l--) {
+                       if (n == 0) {
+                               c2l(iv, v0);
+                               c2l(iv, v1);
+
+                               ti[0] = v0;
+                               ti[1] = v1;
+                               DES_encrypt3(ti, ks1, ks2, ks3);
+                               v0 = ti[0];
+                               v1 = ti[1];
+
+                               iv = &(*ivec)[0];
+                               l2c(v0, iv);
+                               l2c(v1, iv);
+                               iv = &(*ivec)[0];
+                       }
+                       cc = *(in++);
+                       c = iv[n];
+                       iv[n] = cc;
+                       *(out++) = c ^ cc;
+                       n = (n + 1) & 0x07;
+               }
+       }
+       v0 = v1 = ti[0] = ti[1] = c = cc = 0;
+       *num = n;
+}
+LCRYPTO_ALIAS(DES_ede3_cfb64_encrypt);
+
+/* This is compatible with the single key CFB-r for DES, even thought that's
+ * not what EVP needs.
+ */
+
+void
+DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out,
+    int numbits, long length, DES_key_schedule *ks1,
+    DES_key_schedule *ks2, DES_key_schedule *ks3,
+    DES_cblock *ivec, int enc)
+{
+       DES_LONG d0, d1, v0, v1;
+       unsigned long l = length, n = ((unsigned int)numbits + 7)/8;
+       int num = numbits, i;
+       DES_LONG ti[2];
+       unsigned char *iv;
+       unsigned char ovec[16];
+
+       if (num > 64)
+               return;
+       iv = &(*ivec)[0];
+       c2l(iv, v0);
+       c2l(iv, v1);
+       if (enc) {
+               while (l >= n) {
+                       l -= n;
+                       ti[0] = v0;
+                       ti[1] = v1;
+                       DES_encrypt3(ti, ks1, ks2, ks3);
+                       c2ln(in, d0, d1, n);
+                       in += n;
+                       d0 ^= ti[0];
+                       d1 ^= ti[1];
+                       l2cn(d0, d1, out, n);
+                       out += n;
+                       /* 30-08-94 - eay - changed because l>>32 and
+                        * l<<32 are bad under gcc :-( */
+                       if (num == 32) {
+                               v0 = v1;
+                               v1 = d0;
+                       } else if (num == 64) {
+                               v0 = d0;
+                               v1 = d1;
+                       } else {
+                               iv = &ovec[0];
+                               l2c(v0, iv);
+                               l2c(v1, iv);
+                               l2c(d0, iv);
+                               l2c(d1, iv);
+                               /* shift ovec left most of the bits... */
+                               memmove(ovec, ovec + num/8,
+                                   8 + (num % 8 ? 1 : 0));
+                               /* now the remaining bits */
+                               if (num % 8 != 0) {
+                                       for (i = 0; i < 8; ++i) {
+                                               ovec[i] <<= num % 8;
+                                               ovec[i] |= ovec[i + 1] >>
+                                                   (8 - num % 8);
+                                       }
+                               }
+                               iv = &ovec[0];
+                               c2l(iv, v0);
+                               c2l(iv, v1);
+                       }
+               }
+       } else {
+               while (l >= n) {
+                       l -= n;
+                       ti[0] = v0;
+                       ti[1] = v1;
+                       DES_encrypt3(ti, ks1, ks2, ks3);
+                       c2ln(in, d0, d1, n);
+                       in += n;
+                       /* 30-08-94 - eay - changed because l>>32 and
+                        * l<<32 are bad under gcc :-( */
+                       if (num == 32) {
+                               v0 = v1;
+                               v1 = d0;
+                       } else if (num == 64) {
+                               v0 = d0;
+                               v1 = d1;
+                       } else {
+                               iv = &ovec[0];
+                               l2c(v0, iv);
+                               l2c(v1, iv);
+                               l2c(d0, iv);
+                               l2c(d1, iv);
+                               /* shift ovec left most of the bits... */
+                               memmove(ovec, ovec + num/8,
+                                   8 + (num % 8 ? 1 : 0));
+                               /* now the remaining bits */
+                               if (num % 8 != 0) {
+                                       for (i = 0; i < 8; ++i) {
+                                               ovec[i] <<= num % 8;
+                                               ovec[i] |= ovec[i + 1] >>
+                                                   (8 - num % 8);
+                                       }
+                               }
+                               iv = &ovec[0];
+                               c2l(iv, v0);
+                               c2l(iv, v1);
+                       }
+                       d0 ^= ti[0];
+                       d1 ^= ti[1];
+                       l2cn(d0, d1, out, n);
+                       out += n;
+               }
+       }
+       iv = &(*ivec)[0];
+       l2c(v0, iv);
+       l2c(v1, iv);
+       v0 = v1 = d0 = d1 = ti[0] = ti[1] = 0;
+}
+LCRYPTO_ALIAS(DES_ede3_cfb_encrypt);
+
+/* The input and output encrypted as though 64bit cfb mode is being
+ * used.  The extra state information to record how much of the
+ * 64bit block we have used is contained in *num;
+ */
+
+void
+DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,
+    long length, DES_key_schedule *schedule,
+    DES_cblock *ivec, int *num, int enc)
+{
+       DES_LONG v0, v1;
+       long l = length;
+       int n = *num;
+       DES_LONG ti[2];
+       unsigned char *iv, c, cc;
+
+       iv = &(*ivec)[0];
+       if (enc) {
+               while (l--) {
+                       if (n == 0) {
+                               c2l(iv, v0);
+                               ti[0] = v0;
+                               c2l(iv, v1);
+                               ti[1] = v1;
+                               DES_encrypt1(ti, schedule, DES_ENCRYPT);
+                               iv = &(*ivec)[0];
+                               v0 = ti[0];
+                               l2c(v0, iv);
+                               v0 = ti[1];
+                               l2c(v0, iv);
+                               iv = &(*ivec)[0];
+                       }
+                       c = *(in++) ^ iv[n];
+                       *(out++) = c;
+                       iv[n] = c;
+                       n = (n + 1) & 0x07;
+               }
+       } else {
+               while (l--) {
+                       if (n == 0) {
+                               c2l(iv, v0);
+                               ti[0] = v0;
+                               c2l(iv, v1);
+                               ti[1] = v1;
+                               DES_encrypt1(ti, schedule, DES_ENCRYPT);
+                               iv = &(*ivec)[0];
+                               v0 = ti[0];
+                               l2c(v0, iv);
+                               v0 = ti[1];
+                               l2c(v0, iv);
+                               iv = &(*ivec)[0];
+                       }
+                       cc = *(in++);
+                       c = iv[n];
+                       iv[n] = cc;
+                       *(out++) = c ^ cc;
+                       n = (n + 1) & 0x07;
+               }
+       }
+       v0 = v1 = ti[0] = ti[1] = c = cc = 0;
+       *num = n;
+}
+LCRYPTO_ALIAS(DES_cfb64_encrypt);
+
+/* The input and output are loaded in multiples of 8 bits.
+ * What this means is that if you hame numbits=12 and length=2
+ * the first 12 bits will be retrieved from the first byte and half
+ * the second.  The second 12 bits will come from the 3rd and half the 4th
+ * byte.
+ */
+/* Until Aug 1 2003 this function did not correctly implement CFB-r, so it
+ * will not be compatible with any encryption prior to that date. Ben. */
+void
+DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
+    long length, DES_key_schedule *schedule, DES_cblock *ivec,
+    int enc)
+{
+       DES_LONG d0, d1, v0, v1;
+       unsigned long l = length;
+       int num = numbits/8, n = (numbits + 7)/8, i, rem = numbits % 8;
+       DES_LONG ti[2];
+       unsigned char *iv;
+#if BYTE_ORDER != LITTLE_ENDIAN
+       unsigned char ovec[16];
+#else
+       unsigned int sh[4];
+       unsigned char *ovec = (unsigned char *)sh;
+#endif
+
+       if (numbits <= 0 || numbits > 64)
+               return;
+       iv = &(*ivec)[0];
+       c2l(iv, v0);
+       c2l(iv, v1);
+       if (enc) {
+               while (l >= (unsigned long)n) {
+                       l -= n;
+                       ti[0] = v0;
+                       ti[1] = v1;
+                       DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT);
+                       c2ln(in, d0, d1, n);
+                       in += n;
+                       d0 ^= ti[0];
+                       d1 ^= ti[1];
+                       l2cn(d0, d1, out, n);
+                       out += n;
+                       /* 30-08-94 - eay - changed because l>>32 and
+                        * l<<32 are bad under gcc :-( */
+                       if (numbits == 32) {
+                               v0 = v1;
+                               v1 = d0;
+                       } else if (numbits == 64) {
+                               v0 = d0;
+                               v1 = d1;
+                       } else {
+#if BYTE_ORDER != LITTLE_ENDIAN
+                               iv = &ovec[0];
+                               l2c(v0, iv);
+                               l2c(v1, iv);
+                               l2c(d0, iv);
+                               l2c(d1, iv);
+#else
+                               sh[0] = v0, sh[1] = v1, sh[2] = d0, sh[3] = d1;
+#endif
+                               if (rem == 0)
+                                       memmove(ovec, ovec + num, 8);
+                               else
+                                       for (i = 0; i < 8; ++i)
+                                               ovec[i] = ovec[i + num] << rem |
+                                                   ovec[i + num + 1] >> (8 -
+                                                   rem);
+#if BYTE_ORDER == LITTLE_ENDIAN
+                               v0 = sh[0], v1 = sh[1];
+#else
+                               iv = &ovec[0];
+                               c2l(iv, v0);
+                               c2l(iv, v1);
+#endif
+                       }
+               }
+       } else {
+               while (l >= (unsigned long)n) {
+                       l -= n;
+                       ti[0] = v0;
+                       ti[1] = v1;
+                       DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT);
+                       c2ln(in, d0, d1, n);
+                       in += n;
+                       /* 30-08-94 - eay - changed because l>>32 and
+                        * l<<32 are bad under gcc :-( */
+                       if (numbits == 32) {
+                               v0 = v1;
+                               v1 = d0;
+                       } else if (numbits == 64) {
+                               v0 = d0;
+                               v1 = d1;
+                       } else {
+#if BYTE_ORDER != LITTLE_ENDIAN
+                               iv = &ovec[0];
+                               l2c(v0, iv);
+                               l2c(v1, iv);
+                               l2c(d0, iv);
+                               l2c(d1, iv);
+#else
+                               sh[0] = v0, sh[1] = v1, sh[2] = d0, sh[3] = d1;
+#endif
+                               if (rem == 0)
+                                       memmove(ovec, ovec + num, 8);
+                               else
+                                       for (i = 0; i < 8; ++i)
+                                               ovec[i] = ovec[i + num] << rem |
+                                                   ovec[i + num + 1] >> (8 -
+                                                   rem);
+#if BYTE_ORDER == LITTLE_ENDIAN
+                               v0 = sh[0], v1 = sh[1];
+#else
+                               iv = &ovec[0];
+                               c2l(iv, v0);
+                               c2l(iv, v1);
+#endif
+                       }
+                       d0 ^= ti[0];
+                       d1 ^= ti[1];
+                       l2cn(d0, d1, out, n);
+                       out += n;
+               }
+       }
+       iv = &(*ivec)[0];
+       l2c(v0, iv);
+       l2c(v1, iv);
+       v0 = v1 = d0 = d1 = ti[0] = ti[1] = 0;
+}
+LCRYPTO_ALIAS(DES_cfb_encrypt);
+
+void
+DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
+    DES_key_schedule *ks1, DES_key_schedule *ks2,
+    DES_key_schedule *ks3,
+    int enc)
+{
+       DES_LONG l0, l1;
+       DES_LONG ll[2];
+       const unsigned char *in = &(*input)[0];
+       unsigned char *out = &(*output)[0];
+
+       c2l(in, l0);
+       c2l(in, l1);
+       ll[0] = l0;
+       ll[1] = l1;
+       if (enc)
+               DES_encrypt3(ll, ks1, ks2, ks3);
+       else
+               DES_decrypt3(ll, ks1, ks2, ks3);
+       l0 = ll[0];
+       l1 = ll[1];
+       l2c(l0, out);
+       l2c(l1, out);
+}
+LCRYPTO_ALIAS(DES_ecb3_encrypt);
+
+void
+DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
+    DES_key_schedule *ks, int enc)
+{
+       DES_LONG l;
+       DES_LONG ll[2];
+       const unsigned char *in = &(*input)[0];
+       unsigned char *out = &(*output)[0];
+
+       c2l(in, l);
+       ll[0] = l;
+       c2l(in, l);
+       ll[1] = l;
+       DES_encrypt1(ll, ks, enc);
+       l = ll[0];
+       l2c(l, out);
+       l = ll[1];
+       l2c(l, out);
+       l = ll[0] = ll[1] = 0;
+}
+LCRYPTO_ALIAS(DES_ecb_encrypt);
+
+/*
+
+This is an implementation of Triple DES Cipher Block Chaining with Output
+Feedback Masking, by Coppersmith, Johnson and Matyas, (IBM and Certicom).
+
+Note that there is a known attack on this by Biham and Knudsen but it takes
+a lot of work:
+
+http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-get.cgi/1998/CS/CS0928.ps.gz
+
+*/
+
+#ifndef OPENSSL_NO_DESCBCM
+void
+DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
+    long length, DES_key_schedule *ks1, DES_key_schedule *ks2,
+    DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2,
+    int enc)
+{
+       DES_LONG tin0, tin1;
+       DES_LONG tout0, tout1, xor0, xor1, m0, m1;
+       long l = length;
+       DES_LONG tin[2];
+       unsigned char *iv1, *iv2;
+
+       iv1 = &(*ivec1)[0];
+       iv2 = &(*ivec2)[0];
+
+       if (enc) {
+               c2l(iv1, m0);
+               c2l(iv1, m1);
+               c2l(iv2, tout0);
+               c2l(iv2, tout1);
+               for (l -= 8; l >= -7; l -= 8) {
+                       tin[0] = m0;
+                       tin[1] = m1;
+                       DES_encrypt1(tin, ks3, 1);
+                       m0 = tin[0];
+                       m1 = tin[1];
+
+                       if (l < 0) {
+                               c2ln(in, tin0, tin1, l + 8);
+                       } else {
+                               c2l(in, tin0);
+                               c2l(in, tin1);
+                       }
+                       tin0 ^= tout0;
+                       tin1 ^= tout1;
+
+                       tin[0] = tin0;
+                       tin[1] = tin1;
+                       DES_encrypt1(tin, ks1, 1);
+                       tin[0] ^= m0;
+                       tin[1] ^= m1;
+                       DES_encrypt1(tin, ks2, 0);
+                       tin[0] ^= m0;
+                       tin[1] ^= m1;
+                       DES_encrypt1(tin, ks1, 1);
+                       tout0 = tin[0];
+                       tout1 = tin[1];
+
+                       l2c(tout0, out);
+                       l2c(tout1, out);
+               }
+               iv1 = &(*ivec1)[0];
+               l2c(m0, iv1);
+               l2c(m1, iv1);
+
+               iv2 = &(*ivec2)[0];
+               l2c(tout0, iv2);
+               l2c(tout1, iv2);
+       } else {
+               DES_LONG t0, t1;
+
+               c2l(iv1, m0);
+               c2l(iv1, m1);
+               c2l(iv2, xor0);
+               c2l(iv2, xor1);
+               for (l -= 8; l >= -7; l -= 8) {
+                       tin[0] = m0;
+                       tin[1] = m1;
+                       DES_encrypt1(tin, ks3, 1);
+                       m0 = tin[0];
+                       m1 = tin[1];
+
+                       c2l(in, tin0);
+                       c2l(in, tin1);
+
+                       t0 = tin0;
+                       t1 = tin1;
+
+                       tin[0] = tin0;
+                       tin[1] = tin1;
+                       DES_encrypt1(tin, ks1, 0);
+                       tin[0] ^= m0;
+                       tin[1] ^= m1;
+                       DES_encrypt1(tin, ks2, 1);
+                       tin[0] ^= m0;
+                       tin[1] ^= m1;
+                       DES_encrypt1(tin, ks1, 0);
+                       tout0 = tin[0];
+                       tout1 = tin[1];
+
+                       tout0 ^= xor0;
+                       tout1 ^= xor1;
+                       if (l < 0) {
+                               l2cn(tout0, tout1, out, l + 8);
+                       } else {
+                               l2c(tout0, out);
+                               l2c(tout1, out);
+                       }
+                       xor0 = t0;
+                       xor1 = t1;
+               }
+
+               iv1 = &(*ivec1)[0];
+               l2c(m0, iv1);
+               l2c(m1, iv1);
+
+               iv2 = &(*ivec2)[0];
+               l2c(xor0, iv2);
+               l2c(xor1, iv2);
+       }
+       tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
+       tin[0] = tin[1] = 0;
+}
+LCRYPTO_ALIAS(DES_ede3_cbcm_encrypt);
+#endif
+
+/* The input and output encrypted as though 64bit ofb mode is being
+ * used.  The extra state information to record how much of the
+ * 64bit block we have used is contained in *num;
+ */
+void
+DES_ede3_ofb64_encrypt(const unsigned char *in,
+    unsigned char *out, long length,
+    DES_key_schedule *k1, DES_key_schedule *k2,
+    DES_key_schedule *k3, DES_cblock *ivec,
+    int *num)
+{
+       DES_LONG v0, v1;
+       int n = *num;
+       long l = length;
+       DES_cblock d;
+       char *dp;
+       DES_LONG ti[2];
+       unsigned char *iv;
+       int save = 0;
+
+       iv = &(*ivec)[0];
+       c2l(iv, v0);
+       c2l(iv, v1);
+       ti[0] = v0;
+       ti[1] = v1;
+       dp = (char *)d;
+       l2c(v0, dp);
+       l2c(v1, dp);
+       while (l--) {
+               if (n == 0) {
+                       /* ti[0]=v0; */
+                       /* ti[1]=v1; */
+                       DES_encrypt3(ti, k1, k2, k3);
+                       v0 = ti[0];
+                       v1 = ti[1];
+
+                       dp = (char *)d;
+                       l2c(v0, dp);
+                       l2c(v1, dp);
+                       save++;
+               }
+               *(out++) = *(in++) ^ d[n];
+               n = (n + 1) & 0x07;
+       }
+       if (save) {
+               iv = &(*ivec)[0];
+               l2c(v0, iv);
+               l2c(v1, iv);
+       }
+       v0 = v1 = ti[0] = ti[1] = 0;
+       *num = n;
+}
+LCRYPTO_ALIAS(DES_ede3_ofb64_encrypt);
+
+/* The input and output encrypted as though 64bit ofb mode is being
+ * used.  The extra state information to record how much of the
+ * 64bit block we have used is contained in *num;
+ */
+void
+DES_ofb64_encrypt(const unsigned char *in,
+    unsigned char *out, long length,
+    DES_key_schedule *schedule, DES_cblock *ivec, int *num)
+{
+       DES_LONG v0, v1, t;
+       int n = *num;
+       long l = length;
+       DES_cblock d;
+       unsigned char *dp;
+       DES_LONG ti[2];
+       unsigned char *iv;
+       int save = 0;
+
+       iv = &(*ivec)[0];
+       c2l(iv, v0);
+       c2l(iv, v1);
+       ti[0] = v0;
+       ti[1] = v1;
+       dp = d;
+       l2c(v0, dp);
+       l2c(v1, dp);
+       while (l--) {
+               if (n == 0) {
+                       DES_encrypt1(ti, schedule, DES_ENCRYPT);
+                       dp = d;
+                       t = ti[0];
+                       l2c(t, dp);
+                       t = ti[1];
+                       l2c(t, dp);
+                       save++;
+               }
+               *(out++) = *(in++) ^ d[n];
+               n = (n + 1) & 0x07;
+       }
+       if (save) {
+               v0 = ti[0];
+               v1 = ti[1];
+               iv = &(*ivec)[0];
+               l2c(v0, iv);
+               l2c(v1, iv);
+       }
+       t = v0 = v1 = ti[0] = ti[1] = 0;
+       *num = n;
+}
+LCRYPTO_ALIAS(DES_ofb64_encrypt);
+
+/* The input and output are loaded in multiples of 8 bits.
+ * What this means is that if you hame numbits=12 and length=2
+ * the first 12 bits will be retrieved from the first byte and half
+ * the second.  The second 12 bits will come from the 3rd and half the 4th
+ * byte.
+ */
+void
+DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
+    long length, DES_key_schedule *schedule,
+    DES_cblock *ivec)
+{
+       DES_LONG d0, d1, vv0, vv1, v0, v1, n = (numbits + 7)/8;
+       DES_LONG mask0, mask1;
+       long l = length;
+       int num = numbits;
+       DES_LONG ti[2];
+       unsigned char *iv;
+
+       if (num > 64)
+               return;
+       if (num > 32) {
+               mask0 = 0xffffffffL;
+               if (num >= 64)
+                       mask1 = mask0;
+               else
+                       mask1 = (1L << (num - 32)) - 1;
+       } else {
+               if (num == 32)
+                       mask0 = 0xffffffffL;
+               else
+                       mask0 = (1L << num) - 1;
+               mask1 = 0x00000000L;
+       }
+
+       iv = &(*ivec)[0];
+       c2l(iv, v0);
+       c2l(iv, v1);
+       ti[0] = v0;
+       ti[1] = v1;
+       while (l-- > 0) {
+               ti[0] = v0;
+               ti[1] = v1;
+               DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT);
+               vv0 = ti[0];
+               vv1 = ti[1];
+               c2ln(in, d0, d1, n);
+               in += n;
+               d0 = (d0 ^ vv0) & mask0;
+               d1 = (d1 ^ vv1) & mask1;
+               l2cn(d0, d1, out, n);
+               out += n;
+
+               if (num == 32) {
+                       v0 = v1;
+                       v1 = vv0;
+               } else if (num == 64) {
+                       v0 = vv0;
+                       v1 = vv1;
+               } else if (num > 32) { /* && num != 64 */
+                       v0 = ((v1 >> (num - 32))|(vv0 << (64 - num))) &
+                           0xffffffffL;
+                       v1 = ((vv0 >> (num - 32))|(vv1 << (64 - num))) &
+                           0xffffffffL;
+               } else /* num < 32 */ {
+                       v0 = ((v0 >> num)|(v1 << (32 - num))) & 0xffffffffL;
+                       v1 = ((v1 >> num)|(vv0 << (32 - num))) & 0xffffffffL;
+               }
+       }
+       iv = &(*ivec)[0];
+       l2c(v0, iv);
+       l2c(v1, iv);
+       v0 = v1 = d0 = d1 = ti[0] = ti[1] = vv0 = vv1 = 0;
+}
+LCRYPTO_ALIAS(DES_ofb_encrypt);
+
+void
+DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,
+    long length, DES_key_schedule *schedule,
+    DES_cblock *ivec, int enc)
+{
+       DES_LONG sin0, sin1, xor0, xor1, tout0, tout1;
+       DES_LONG tin[2];
+       const unsigned char *in;
+       unsigned char *out, *iv;
+
+       in = input;
+       out = output;
+       iv = &(*ivec)[0];
+
+       if (enc) {
+               c2l(iv, xor0);
+               c2l(iv, xor1);
+               for (; length > 0; length -= 8) {
+                       if (length >= 8) {
+                               c2l(in, sin0);
+                               c2l(in, sin1);
+                       } else
+                               c2ln(in, sin0, sin1, length);
+                       tin[0] = sin0 ^ xor0;
+                       tin[1] = sin1 ^ xor1;
+                       DES_encrypt1((DES_LONG *)tin, schedule, DES_ENCRYPT);
+                       tout0 = tin[0];
+                       tout1 = tin[1];
+                       xor0 = sin0 ^ tout0;
+                       xor1 = sin1 ^ tout1;
+                       l2c(tout0, out);
+                       l2c(tout1, out);
+               }
+       } else {
+               c2l(iv, xor0);
+               c2l(iv, xor1);
+               for (; length > 0; length -= 8) {
+                       c2l(in, sin0);
+                       c2l(in, sin1);
+                       tin[0] = sin0;
+                       tin[1] = sin1;
+                       DES_encrypt1((DES_LONG *)tin, schedule, DES_DECRYPT);
+                       tout0 = tin[0] ^ xor0;
+                       tout1 = tin[1] ^ xor1;
+                       if (length >= 8) {
+                               l2c(tout0, out);
+                               l2c(tout1, out);
+                       } else
+                               l2cn(tout0, tout1, out, length);
+                       xor0 = tout0 ^ sin0;
+                       xor1 = tout1 ^ sin1;
+               }
+       }
+       tin[0] = tin[1] = 0;
+       sin0 = sin1 = xor0 = xor1 = tout0 = tout1 = 0;
+}
+LCRYPTO_ALIAS(DES_pcbc_encrypt);
+
+/* RSA's DESX */
+
+void
+DES_xcbc_encrypt(const unsigned char *in, unsigned char *out,
+    long length, DES_key_schedule *schedule,
+    DES_cblock *ivec, const_DES_cblock *inw,
+    const_DES_cblock *outw, int enc)
+{
+       DES_LONG tin0, tin1;
+       DES_LONG tout0, tout1, xor0, xor1;
+       DES_LONG inW0, inW1, outW0, outW1;
+       const unsigned char *in2;
+       long l = length;
+       DES_LONG tin[2];
+       unsigned char *iv;
+
+       in2 = &(*inw)[0];
+       c2l(in2, inW0);
+       c2l(in2, inW1);
+       in2 = &(*outw)[0];
+       c2l(in2, outW0);
+       c2l(in2, outW1);
+
+       iv = &(*ivec)[0];
+
+       if (enc) {
+               c2l(iv, tout0);
+               c2l(iv, tout1);
+               for (l -= 8; l >= 0; l -= 8) {
+                       c2l(in, tin0);
+                       c2l(in, tin1);
+                       tin0 ^= tout0 ^ inW0;
+                       tin[0] = tin0;
+                       tin1 ^= tout1 ^ inW1;
+                       tin[1] = tin1;
+                       DES_encrypt1(tin, schedule, DES_ENCRYPT);
+                       tout0 = tin[0] ^ outW0;
+                       l2c(tout0, out);
+                       tout1 = tin[1] ^ outW1;
+                       l2c(tout1, out);
+               }
+               if (l != -8) {
+                       c2ln(in, tin0, tin1, l + 8);
+                       tin0 ^= tout0 ^ inW0;
+                       tin[0] = tin0;
+                       tin1 ^= tout1 ^ inW1;
+                       tin[1] = tin1;
+                       DES_encrypt1(tin, schedule, DES_ENCRYPT);
+                       tout0 = tin[0] ^ outW0;
+                       l2c(tout0, out);
+                       tout1 = tin[1] ^ outW1;
+                       l2c(tout1, out);
+               }
+               iv = &(*ivec)[0];
+               l2c(tout0, iv);
+               l2c(tout1, iv);
+       } else {
+               c2l(iv, xor0);
+               c2l(iv, xor1);
+               for (l -= 8; l > 0; l -= 8) {
+                       c2l(in, tin0);
+                       tin[0] = tin0 ^ outW0;
+                       c2l(in, tin1);
+                       tin[1] = tin1 ^ outW1;
+                       DES_encrypt1(tin, schedule, DES_DECRYPT);
+                       tout0 = tin[0] ^ xor0 ^ inW0;
+                       tout1 = tin[1] ^ xor1 ^ inW1;
+                       l2c(tout0, out);
+                       l2c(tout1, out);
+                       xor0 = tin0;
+                       xor1 = tin1;
+               }
+               if (l != -8) {
+                       c2l(in, tin0);
+                       tin[0] = tin0 ^ outW0;
+                       c2l(in, tin1);
+                       tin[1] = tin1 ^ outW1;
+                       DES_encrypt1(tin, schedule, DES_DECRYPT);
+                       tout0 = tin[0] ^ xor0 ^ inW0;
+                       tout1 = tin[1] ^ xor1 ^ inW1;
+                       l2cn(tout0, tout1, out, l + 8);
+                       xor0 = tin0;
+                       xor1 = tin1;
+               }
+
+               iv = &(*ivec)[0];
+               l2c(xor0, iv);
+               l2c(xor1, iv);
+       }
+       tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
+       inW0 = inW1 = outW0 = outW1 = 0;
+       tin[0] = tin[1] = 0;
+}
+LCRYPTO_ALIAS(DES_xcbc_encrypt);
diff --git a/lib/libcrypto/des/des_cksum.c b/lib/libcrypto/des/des_cksum.c
new file mode 100644 (file)
index 0000000..6dfb8a0
--- /dev/null
@@ -0,0 +1,173 @@
+/* $OpenBSD: des_cksum.c,v 1.1 2024/08/31 15:56:09 jsing Exp $ */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+/* From "Message Authentication"  R.R. Jueneman, S.M. Matyas, C.H. Meyer
+ * IEEE Communications Magazine Sept 1985 Vol. 23 No. 9 p 29-40
+ * This module in only based on the code in this paper and is
+ * almost definitely not the same as the MIT implementation.
+ */
+#include "des_local.h"
+
+/* bug fix for dos - 7/6/91 - Larry hughes@logos.ucs.indiana.edu */
+#define Q_B0(a)        (((DES_LONG)(a)))
+#define Q_B1(a)        (((DES_LONG)(a))<<8)
+#define Q_B2(a)        (((DES_LONG)(a))<<16)
+#define Q_B3(a)        (((DES_LONG)(a))<<24)
+
+/* used to scramble things a bit */
+/* Got the value MIT uses via brute force :-) 2/10/90 eay */
+#define NOISE  ((DES_LONG)83653421L)
+
+DES_LONG
+DES_cbc_cksum(const unsigned char *in, DES_cblock *output,
+    long length, DES_key_schedule *schedule,
+    const_DES_cblock *ivec)
+{
+       DES_LONG tout0, tout1, tin0, tin1;
+       long l = length;
+       DES_LONG tin[2];
+       unsigned char *out = &(*output)[0];
+       const unsigned char *iv = &(*ivec)[0];
+
+       c2l(iv, tout0);
+       c2l(iv, tout1);
+       for (; l > 0; l -= 8) {
+               if (l >= 8) {
+                       c2l(in, tin0);
+                       c2l(in, tin1);
+               } else
+                       c2ln(in, tin0, tin1, l);
+
+               tin0 ^= tout0;
+               tin[0] = tin0;
+               tin1 ^= tout1;
+               tin[1] = tin1;
+               DES_encrypt1((DES_LONG *)tin, schedule, DES_ENCRYPT);
+               /* fix 15/10/91 eay - thanks to keithr@sco.COM */
+               tout0 = tin[0];
+               tout1 = tin[1];
+       }
+       if (out != NULL) {
+               l2c(tout0, out);
+               l2c(tout1, out);
+       }
+       tout0 = tin0 = tin1 = tin[0] = tin[1] = 0;
+       /*
+         Transform the data in tout1 so that it will
+         match the return value that the MIT Kerberos
+         mit_des_cbc_cksum API returns.
+       */
+       tout1 = ((tout1 >> 24L) & 0x000000FF) |
+           ((tout1 >> 8L) & 0x0000FF00) |
+           ((tout1 << 8L) & 0x00FF0000) |
+           ((tout1 << 24L) & 0xFF000000);
+       return (tout1);
+}
+LCRYPTO_ALIAS(DES_cbc_cksum);
+
+DES_LONG
+DES_quad_cksum(const unsigned char *input, DES_cblock output[],
+    long length, int out_count, DES_cblock *seed)
+{
+       DES_LONG z0, z1, t0, t1;
+       int i;
+       long l;
+       const unsigned char *cp;
+       DES_LONG *lp;
+
+       if (out_count < 1)
+               out_count = 1;
+       lp = (DES_LONG *)&(output[0])[0];
+
+       z0 = Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3(
+           (*seed)[3]);
+       z1 = Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3(
+           (*seed)[7]);
+
+       for (i = 0; ((i < 4) && (i < out_count)); i++) {
+               cp = input;
+               l = length;
+               while (l > 0) {
+                       if (l > 1) {
+                               t0 = (DES_LONG)(*(cp++));
+                               t0 |= (DES_LONG)Q_B1(*(cp++));
+                               l--;
+                       } else
+                               t0 = (DES_LONG)(*(cp++));
+                       l--;
+                       /* add */
+                       t0 += z0;
+                       t0 &= 0xffffffffL;
+                       t1 = z1;
+                       /* square, well sort of square */
+                       z0 = ((((t0*t0) & 0xffffffffL) +
+                           ((t1*t1) & 0xffffffffL)) & 0xffffffffL) %
+                           0x7fffffffL;
+                       z1 = ((t0*((t1 + NOISE) & 0xffffffffL)) & 0xffffffffL) %
+                           0x7fffffffL;
+               }
+               if (lp != NULL) {
+                       /* The MIT library assumes that the checksum is
+                        * composed of 2*out_count 32 bit ints */
+                       *lp++ = z0;
+                       *lp++ = z1;
+               }
+       }
+       return (z0);
+}
+LCRYPTO_ALIAS(DES_quad_cksum);
diff --git a/lib/libcrypto/des/des_fcrypt.c b/lib/libcrypto/des/des_fcrypt.c
new file mode 100644 (file)
index 0000000..877ffdb
--- /dev/null
@@ -0,0 +1,261 @@
+/* $OpenBSD: des_fcrypt.c,v 1.1 2024/08/31 15:56:09 jsing Exp $ */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <stdio.h>
+
+/* This version of crypt has been developed from my MIT compatible
+ * DES library.
+ * Eric Young (eay@cryptsoft.com)
+ */
+
+/* Modification by Jens Kupferschmidt (Cu)
+ * I have included directive PARA for shared memory computers.
+ * I have included a directive LONGCRYPT to using this routine to cipher
+ * passwords with more than 8 bytes like HP-UX 10.x it used. The MAXPLEN
+ * definition is the maximum of length of password and can changed. I have
+ * defined 24.
+ */
+
+#define DES_FCRYPT
+#include "des_local.h"
+#undef DES_FCRYPT
+
+#ifndef OPENBSD_DES_ASM
+
+#undef PERM_OP
+#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),                        \
+       (b)^=(t),                                                       \
+       (a)^=((t)<<(n)))
+
+#undef HPERM_OP
+#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),            \
+       (a)=(a)^(t)^(t>>(16-(n))))                                      \
+
+void
+fcrypt_body(DES_LONG *out, DES_key_schedule *ks, DES_LONG Eswap0,
+    DES_LONG Eswap1)
+{
+       DES_LONG l, r, t, u;
+#ifdef DES_PTR
+       const unsigned char *des_SP = (const unsigned char *)DES_SPtrans;
+#endif
+       DES_LONG *s;
+       int j;
+       DES_LONG E0, E1;
+
+       l = 0;
+       r = 0;
+
+       s = (DES_LONG *)ks;
+       E0 = Eswap0;
+       E1 = Eswap1;
+
+       for (j = 0; j < 25; j++) {
+#ifndef DES_UNROLL
+               int i;
+
+               for (i = 0; i < 32; i += 4) {
+                       D_ENCRYPT(l, r, i + 0); /*  1 */
+                       D_ENCRYPT(r, l, i + 2); /*  2 */
+               }
+#else
+               D_ENCRYPT(l, r, 0); /*  1 */
+               D_ENCRYPT(r, l, 2); /*  2 */
+               D_ENCRYPT(l, r, 4); /*  3 */
+               D_ENCRYPT(r, l, 6); /*  4 */
+               D_ENCRYPT(l, r, 8); /*  5 */
+               D_ENCRYPT(r, l, 10); /*  6 */
+               D_ENCRYPT(l, r, 12); /*  7 */
+               D_ENCRYPT(r, l, 14); /*  8 */
+               D_ENCRYPT(l, r, 16); /*  9 */
+               D_ENCRYPT(r, l, 18); /*  10 */
+               D_ENCRYPT(l, r, 20); /*  11 */
+               D_ENCRYPT(r, l, 22); /*  12 */
+               D_ENCRYPT(l, r, 24); /*  13 */
+               D_ENCRYPT(r, l, 26); /*  14 */
+               D_ENCRYPT(l, r, 28); /*  15 */
+               D_ENCRYPT(r, l, 30); /*  16 */
+#endif
+
+               t = l;
+               l = r;
+               r = t;
+       }
+       l = ROTATE(l, 3) & 0xffffffffL;
+       r = ROTATE(r, 3) & 0xffffffffL;
+
+       PERM_OP(l, r, t, 1, 0x55555555L);
+       PERM_OP(r, l, t, 8, 0x00ff00ffL);
+       PERM_OP(l, r, t, 2, 0x33333333L);
+       PERM_OP(r, l, t, 16, 0x0000ffffL);
+       PERM_OP(l, r, t, 4, 0x0f0f0f0fL);
+
+       out[0] = r;
+       out[1] = l;
+}
+
+#endif /* OPENBSD_DES_ASM */
+
+/* Added more values to handle illegal salt values the way normal
+ * crypt() implementations do.  The patch was sent by
+ * Bjorn Gronvall <bg@sics.se>
+ */
+static unsigned const char con_salt[128] = {
+       0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
+       0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,
+       0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
+       0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1,
+       0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9,
+       0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0x00, 0x01,
+       0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
+       0x0A, 0x0B, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
+       0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
+       0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
+       0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
+       0x23, 0x24, 0x25, 0x20, 0x21, 0x22, 0x23, 0x24,
+       0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
+       0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
+       0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
+       0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,
+};
+
+static unsigned const char cov_2char[64] = {
+       0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
+       0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
+       0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
+       0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
+       0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
+       0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
+       0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
+       0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
+};
+
+char *
+DES_crypt(const char *buf, const char *salt)
+{
+       static char buff[14];
+
+       return (DES_fcrypt(buf, salt, buff));
+}
+LCRYPTO_ALIAS(DES_crypt);
+
+char *
+DES_fcrypt(const char *buf, const char *salt, char *ret)
+{
+       unsigned int i, j, x, y;
+       DES_LONG Eswap0, Eswap1;
+       DES_LONG out[2], ll;
+       DES_cblock key;
+       DES_key_schedule ks;
+       unsigned char bb[9];
+       unsigned char *b = bb;
+       unsigned char c, u;
+
+       /* eay 25/08/92
+        * If you call crypt("pwd","*") as often happens when you
+        * have * as the pwd field in /etc/passwd, the function
+        * returns *\0xxxxxxxxx
+        * The \0 makes the string look like * so the pwd "*" would
+        * crypt to "*".  This was found when replacing the crypt in
+        * our shared libraries.  People found that the disabled
+        * accounts effectively had no passwd :-(. */
+       x = ret[0] = ((salt[0] == '\0') ? 'A' : salt[0]);
+       Eswap0 = con_salt[x] << 2;
+       x = ret[1] = ((salt[1] == '\0') ? 'A' : salt[1]);
+       Eswap1 = con_salt[x] << 6;
+/* EAY
+r=strlen(buf);
+r=(r+7)/8;
+*/
+       for (i = 0; i < 8; i++) {
+               c = *(buf++);
+               if (!c)
+                       break;
+               key[i] = (c << 1);
+       }
+       for (; i < 8; i++)
+               key[i] = 0;
+
+       DES_set_key_unchecked(&key, &ks);
+       fcrypt_body(&(out[0]), &ks, Eswap0, Eswap1);
+
+       ll = out[0];
+       l2c(ll, b);
+       ll = out[1];
+       l2c(ll, b);
+       y = 0;
+       u = 0x80;
+       bb[8] = 0;
+       for (i = 2; i < 13; i++) {
+               c = 0;
+               for (j = 0; j < 6; j++) {
+                       c <<= 1;
+                       if (bb[y] & u)
+                               c |= 1;
+                       u >>= 1;
+                       if (!u) {
+                               y++;
+                               u = 0x80;
+                       }
+               }
+               ret[i] = cov_2char[c];
+       }
+       ret[13] = '\0';
+       return (ret);
+}
+LCRYPTO_ALIAS(DES_fcrypt);
diff --git a/lib/libcrypto/des/des_key.c b/lib/libcrypto/des/des_key.c
new file mode 100644 (file)
index 0000000..eee8a7e
--- /dev/null
@@ -0,0 +1,523 @@
+/* $OpenBSD: des_key.c,v 1.1 2024/08/31 15:56:09 jsing Exp $ */
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ *
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ *
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+#include <stdlib.h>
+
+#include <openssl/crypto.h>
+
+#include "des_local.h"
+
+int DES_check_key = 0; /* defaults to false */
+LCRYPTO_ALIAS(DES_check_key);
+
+static const unsigned char odd_parity[256] = {
+       1,  1,  2,  2,  4,  4,  7,  7,  8,  8, 11, 11, 13, 13, 14, 14,
+       16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31,
+       32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47,
+       49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62,
+       64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79,
+       81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94,
+       97, 97, 98, 98, 100, 100, 103, 103, 104, 104, 107, 107, 109, 109, 110, 110,
+       112, 112, 115, 115, 117, 117, 118, 118, 121, 121, 122, 122, 124, 124, 127, 127,
+       128, 128, 131, 131, 133, 133, 134, 134, 137, 137, 138, 138, 140, 140, 143, 143,
+       145, 145, 146, 146, 148, 148, 151, 151, 152, 152, 155, 155, 157, 157, 158, 158,
+       161, 161, 162, 162, 164, 164, 167, 167, 168, 168, 171, 171, 173, 173, 174, 174,
+       176, 176, 179, 179, 181, 181, 182, 182, 185, 185, 186, 186, 188, 188, 191, 191,
+       193, 193, 194, 194, 196, 196, 199, 199, 200, 200, 203, 203, 205, 205, 206, 206,
+       208, 208, 211, 211, 213, 213, 214, 214, 217, 217, 218, 218, 220, 220, 223, 223,
+       224, 224, 227, 227, 229, 229, 230, 230, 233, 233, 234, 234, 236, 236, 239, 239,
+       241, 241, 242, 242, 244, 244, 247, 247, 248, 248, 251, 251, 253, 253, 254, 254,
+};
+
+void
+DES_set_odd_parity(DES_cblock *key)
+{
+       unsigned int i;
+
+       for (i = 0; i < DES_KEY_SZ; i++)
+               (*key)[i] = odd_parity[(*key)[i]];
+}
+LCRYPTO_ALIAS(DES_set_odd_parity);
+
+int
+DES_check_key_parity(const_DES_cblock *key)
+{
+       unsigned int i;
+
+       for (i = 0; i < DES_KEY_SZ; i++) {
+               if ((*key)[i] != odd_parity[(*key)[i]])
+                       return (0);
+       }
+       return (1);
+}
+LCRYPTO_ALIAS(DES_check_key_parity);
+
+/* Weak and semi weak keys as taken from
+ * %A D.W. Davies
+ * %A W.L. Price
+ * %T Security for Computer Networks
+ * %I John Wiley & Sons
+ * %D 1984
+ * Many thanks to smb@ulysses.att.com (Steven Bellovin) for the reference
+ * (and actual cblock values).
+ */
+#define NUM_WEAK_KEY   16
+static const DES_cblock weak_keys[NUM_WEAK_KEY] = {
+       /* weak keys */
+       {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
+       {0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE},
+       {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
+       {0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1},
+       /* semi-weak keys */
+       {0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE},
+       {0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01},
+       {0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1},
+       {0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E},
+       {0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1},
+       {0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01},
+       {0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE},
+       {0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E},
+       {0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E},
+       {0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01},
+       {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
+       {0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1},
+};
+
+int
+DES_is_weak_key(const_DES_cblock *key)
+{
+       unsigned int i;
+
+       for (i = 0; i < NUM_WEAK_KEY; i++)
+               if (memcmp(weak_keys[i], key, sizeof(DES_cblock)) == 0)
+                       return 1;
+       return 0;
+}
+LCRYPTO_ALIAS(DES_is_weak_key);
+
+/* NOW DEFINED IN des_local.h
+ * See ecb_encrypt.c for a pseudo description of these macros.
+ * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
+ *     (b)^=(t),\
+ *     (a)=((a)^((t)<<(n))))
+ */
+
+#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)), \
+       (a)=(a)^(t)^(t>>(16-(n))))
+
+static const DES_LONG des_skb[8][64] = {
+       {
+               /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+               0x00000000L, 0x00000010L, 0x20000000L, 0x20000010L,
+               0x00010000L, 0x00010010L, 0x20010000L, 0x20010010L,
+               0x00000800L, 0x00000810L, 0x20000800L, 0x20000810L,
+               0x00010800L, 0x00010810L, 0x20010800L, 0x20010810L,
+               0x00000020L, 0x00000030L, 0x20000020L, 0x20000030L,
+               0x00010020L, 0x00010030L, 0x20010020L, 0x20010030L,
+               0x00000820L, 0x00000830L, 0x20000820L, 0x20000830L,
+               0x00010820L, 0x00010830L, 0x20010820L, 0x20010830L,
+               0x00080000L, 0x00080010L, 0x20080000L, 0x20080010L,
+               0x00090000L, 0x00090010L, 0x20090000L, 0x20090010L,
+               0x00080800L, 0x00080810L, 0x20080800L, 0x20080810L,
+               0x00090800L, 0x00090810L, 0x20090800L, 0x20090810L,
+               0x00080020L, 0x00080030L, 0x20080020L, 0x20080030L,
+               0x00090020L, 0x00090030L, 0x20090020L, 0x20090030L,
+               0x00080820L, 0x00080830L, 0x20080820L, 0x20080830L,
+               0x00090820L, 0x00090830L, 0x20090820L, 0x20090830L,
+       }, {
+               /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
+               0x00000000L, 0x02000000L, 0x00002000L, 0x02002000L,
+               0x00200000L, 0x02200000L, 0x00202000L, 0x02202000L,
+               0x00000004L, 0x02000004L, 0x00002004L, 0x02002004L,
+               0x00200004L, 0x02200004L, 0x00202004L, 0x02202004L,
+               0x00000400L, 0x02000400L, 0x00002400L, 0x02002400L,
+               0x00200400L, 0x02200400L, 0x00202400L, 0x02202400L,
+               0x00000404L, 0x02000404L, 0x00002404L, 0x02002404L,
+               0x00200404L, 0x02200404L, 0x00202404L, 0x02202404L,
+               0x10000000L, 0x12000000L, 0x10002000L, 0x12002000L,
+               0x10200000L, 0x12200000L, 0x10202000L, 0x12202000L,
+               0x10000004L, 0x12000004L, 0x10002004L, 0x12002004L,
+               0x10200004L, 0x12200004L, 0x10202004L, 0x12202004L,
+               0x10000400L, 0x12000400L, 0x10002400L, 0x12002400L,
+               0x10200400L, 0x12200400L, 0x10202400L, 0x12202400L,
+               0x10000404L, 0x12000404L, 0x10002404L, 0x12002404L,
+               0x10200404L, 0x12200404L, 0x10202404L, 0x12202404L,
+       }, {
+               /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
+               0x00000000L, 0x00000001L, 0x00040000L, 0x00040001L,
+               0x01000000L, 0x01000001L, 0x01040000L, 0x01040001L,
+               0x00000002L, 0x00000003L, 0x00040002L, 0x00040003L,
+               0x01000002L, 0x01000003L, 0x01040002L, 0x01040003L,
+               0x00000200L, 0x00000201L, 0x00040200L, 0x00040201L,
+               0x01000200L, 0x01000201L, 0x01040200L, 0x01040201L,
+               0x00000202L, 0x00000203L, 0x00040202L, 0x00040203L,
+               0x01000202L, 0x01000203L, 0x01040202L, 0x01040203L,
+               0x08000000L, 0x08000001L, 0x08040000L, 0x08040001L,
+               0x09000000L, 0x09000001L, 0x09040000L, 0x09040001L,
+               0x08000002L, 0x08000003L, 0x08040002L, 0x08040003L,
+               0x09000002L, 0x09000003L, 0x09040002L, 0x09040003L,
+               0x08000200L, 0x08000201L, 0x08040200L, 0x08040201L,
+               0x09000200L, 0x09000201L, 0x09040200L, 0x09040201L,
+               0x08000202L, 0x08000203L, 0x08040202L, 0x08040203L,
+               0x09000202L, 0x09000203L, 0x09040202L, 0x09040203L,
+       }, {
+               /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
+               0x00000000L, 0x00100000L, 0x00000100L, 0x00100100L,
+               0x00000008L, 0x00100008L, 0x00000108L, 0x00100108L,
+               0x00001000L, 0x00101000L, 0x00001100L, 0x00101100L,
+               0x00001008L, 0x00101008L, 0x00001108L, 0x00101108L,
+               0x04000000L, 0x04100000L, 0x04000100L, 0x04100100L,
+               0x04000008L, 0x04100008L, 0x04000108L, 0x04100108L,
+               0x04001000L, 0x04101000L, 0x04001100L, 0x04101100L,
+               0x04001008L, 0x04101008L, 0x04001108L, 0x04101108L,
+               0x00020000L, 0x00120000L, 0x00020100L, 0x00120100L,
+               0x00020008L, 0x00120008L, 0x00020108L, 0x00120108L,
+               0x00021000L, 0x00121000L, 0x00021100L, 0x00121100L,
+               0x00021008L, 0x00121008L, 0x00021108L, 0x00121108L,
+               0x04020000L, 0x04120000L, 0x04020100L, 0x04120100L,
+               0x04020008L, 0x04120008L, 0x04020108L, 0x04120108L,
+               0x04021000L, 0x04121000L, 0x04021100L, 0x04121100L,
+               0x04021008L, 0x04121008L, 0x04021108L, 0x04121108L,
+       }, {
+               /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
+               0x00000000L, 0x10000000L, 0x00010000L, 0x10010000L,
+               0x00000004L, 0x10000004L, 0x00010004L, 0x10010004L,
+               0x20000000L, 0x30000000L, 0x20010000L, 0x30010000L,
+               0x20000004L, 0x30000004L, 0x20010004L, 0x30010004L,
+               0x00100000L, 0x10100000L, 0x00110000L, 0x10110000L,
+               0x00100004L, 0x10100004L, 0x00110004L, 0x10110004L,
+               0x20100000L, 0x30100000L, 0x20110000L, 0x30110000L,
+               0x20100004L, 0x30100004L, 0x20110004L, 0x30110004L,
+               0x00001000L, 0x10001000L, 0x00011000L, 0x10011000L,
+               0x00001004L, 0x10001004L, 0x00011004L, 0x10011004L,
+               0x20001000L, 0x30001000L, 0x20011000L, 0x30011000L,
+               0x20001004L, 0x30001004L, 0x20011004L, 0x30011004L,
+               0x00101000L, 0x10101000L, 0x00111000L, 0x10111000L,
+               0x00101004L, 0x10101004L, 0x00111004L, 0x10111004L,
+               0x20101000L, 0x30101000L, 0x20111000L, 0x30111000L,
+               0x20101004L, 0x30101004L, 0x20111004L, 0x30111004L,
+       }, {
+               /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
+               0x00000000L, 0x08000000L, 0x00000008L, 0x08000008L,
+               0x00000400L, 0x08000400L, 0x00000408L, 0x08000408L,
+               0x00020000L, 0x08020000L, 0x00020008L, 0x08020008L,
+               0x00020400L, 0x08020400L, 0x00020408L, 0x08020408L,
+               0x00000001L, 0x08000001L, 0x00000009L, 0x08000009L,
+               0x00000401L, 0x08000401L, 0x00000409L, 0x08000409L,
+               0x00020001L, 0x08020001L, 0x00020009L, 0x08020009L,
+               0x00020401L, 0x08020401L, 0x00020409L, 0x08020409L,
+               0x02000000L, 0x0A000000L, 0x02000008L, 0x0A000008L,
+               0x02000400L, 0x0A000400L, 0x02000408L, 0x0A000408L,
+               0x02020000L, 0x0A020000L, 0x02020008L, 0x0A020008L,
+               0x02020400L, 0x0A020400L, 0x02020408L, 0x0A020408L,
+               0x02000001L, 0x0A000001L, 0x02000009L, 0x0A000009L,
+               0x02000401L, 0x0A000401L, 0x02000409L, 0x0A000409L,
+               0x02020001L, 0x0A020001L, 0x02020009L, 0x0A020009L,
+               0x02020401L, 0x0A020401L, 0x02020409L, 0x0A020409L,
+       }, {
+               /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
+               0x00000000L, 0x00000100L, 0x00080000L, 0x00080100L,
+               0x01000000L, 0x01000100L, 0x01080000L, 0x01080100L,
+               0x00000010L, 0x00000110L, 0x00080010L, 0x00080110L,
+               0x01000010L, 0x01000110L, 0x01080010L, 0x01080110L,
+               0x00200000L, 0x00200100L, 0x00280000L, 0x00280100L,
+               0x01200000L, 0x01200100L, 0x01280000L, 0x01280100L,
+               0x00200010L, 0x00200110L, 0x00280010L, 0x00280110L,
+               0x01200010L, 0x01200110L, 0x01280010L, 0x01280110L,
+               0x00000200L, 0x00000300L, 0x00080200L, 0x00080300L,
+               0x01000200L, 0x01000300L, 0x01080200L, 0x01080300L,
+               0x00000210L, 0x00000310L, 0x00080210L, 0x00080310L,
+               0x01000210L, 0x01000310L, 0x01080210L, 0x01080310L,
+               0x00200200L, 0x00200300L, 0x00280200L, 0x00280300L,
+               0x01200200L, 0x01200300L, 0x01280200L, 0x01280300L,
+               0x00200210L, 0x00200310L, 0x00280210L, 0x00280310L,
+               0x01200210L, 0x01200310L, 0x01280210L, 0x01280310L,
+       }, {
+               /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
+               0x00000000L, 0x04000000L, 0x00040000L, 0x04040000L,
+               0x00000002L, 0x04000002L, 0x00040002L, 0x04040002L,
+               0x00002000L, 0x04002000L, 0x00042000L, 0x04042000L,
+               0x00002002L, 0x04002002L, 0x00042002L, 0x04042002L,
+               0x00000020L, 0x04000020L, 0x00040020L, 0x04040020L,
+               0x00000022L, 0x04000022L, 0x00040022L, 0x04040022L,
+               0x00002020L, 0x04002020L, 0x00042020L, 0x04042020L,
+               0x00002022L, 0x04002022L, 0x00042022L, 0x04042022L,
+               0x00000800L, 0x04000800L, 0x00040800L, 0x04040800L,
+               0x00000802L, 0x04000802L, 0x00040802L, 0x04040802L,
+               0x00002800L, 0x04002800L, 0x00042800L, 0x04042800L,
+               0x00002802L, 0x04002802L, 0x00042802L, 0x04042802L,
+               0x00000820L, 0x04000820L, 0x00040820L, 0x04040820L,
+               0x00000822L, 0x04000822L, 0x00040822L, 0x04040822L,
+               0x00002820L, 0x04002820L, 0x00042820L, 0x04042820L,
+               0x00002822L, 0x04002822L, 0x00042822L, 0x04042822L,
+       },
+};
+
+int
+DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule)
+{
+       if (DES_check_key) {
+               return DES_set_key_checked(key, schedule);
+       } else {
+               DES_set_key_unchecked(key, schedule);
+               return 0;
+       }
+}
+LCRYPTO_ALIAS(DES_set_key);
+
+/* return 0 if key parity is odd (correct),
+ * return -1 if key parity error,
+ * return -2 if illegal weak key.
+ */
+int
+DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule)
+{
+       if (!DES_check_key_parity(key))
+               return (-1);
+       if (DES_is_weak_key(key))
+               return (-2);
+       DES_set_key_unchecked(key, schedule);
+       return 0;
+}
+LCRYPTO_ALIAS(DES_set_key_checked);
+
+void
+DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule)
+{
+       static const int shifts2[16] = {0, 0,1, 1,1, 1,1, 1,0, 1,1, 1,1, 1,1, 0};
+       DES_LONG c, d, t, s, t2;
+       const unsigned char *in;
+       DES_LONG *k;
+       int i;
+
+       k = &schedule->ks->deslong[0];
+       in = &(*key)[0];
+
+       c2l(in, c);
+       c2l(in, d);
+
+       /* do PC1 in 47 simple operations :-)
+        * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
+        * for the inspiration. :-) */
+       PERM_OP(d, c, t, 4, 0x0f0f0f0fL);
+       HPERM_OP(c, t, -2, 0xcccc0000L);
+       HPERM_OP(d, t, -2, 0xcccc0000L);
+       PERM_OP(d, c, t, 1, 0x55555555L);
+       PERM_OP(c, d, t, 8, 0x00ff00ffL);
+       PERM_OP(d, c, t, 1, 0x55555555L);
+       d = (((d & 0x000000ffL) << 16L) | (d & 0x0000ff00L) |
+           ((d & 0x00ff0000L) >> 16L)|((c & 0xf0000000L) >> 4L));
+       c &= 0x0fffffffL;
+
+       for (i = 0; i < ITERATIONS; i++) {
+               if (shifts2[i]) {
+                       c = ((c >> 2L)|(c << 26L));
+                       d = ((d >> 2L)|(d << 26L));
+               } else {
+                       c = ((c >> 1L)|(c << 27L));
+                       d = ((d >> 1L)|(d << 27L));
+               }
+               c &= 0x0fffffffL;
+               d &= 0x0fffffffL;
+               /* could be a few less shifts but I am to lazy at this
+                * point in time to investigate */
+               s = des_skb[0][(c)&0x3f]|
+                   des_skb[1][((c >> 6L) & 0x03)|((c >> 7L) & 0x3c)]|
+                   des_skb[2][((c >> 13L) & 0x0f)|((c >> 14L) & 0x30)]|
+                   des_skb[3][((c >> 20L) & 0x01)|((c >> 21L) & 0x06) |
+                   ((c >> 22L) & 0x38)];
+               t = des_skb[4][(d)&0x3f]|
+                   des_skb[5][((d >> 7L) & 0x03)|((d >> 8L) & 0x3c)]|
+                   des_skb[6][(d >> 15L) & 0x3f]|
+                   des_skb[7][((d >> 21L) & 0x0f)|((d >> 22L) & 0x30)];
+
+               /* table contained 0213 4657 */
+               t2 = ((t << 16L)|(s & 0x0000ffffL)) & 0xffffffffL;
+               *(k++) = ROTATE(t2, 30) & 0xffffffffL;
+
+               t2 = ((s >> 16L)|(t & 0xffff0000L));
+               *(k++) = ROTATE(t2, 26) & 0xffffffffL;
+       }
+}
+LCRYPTO_ALIAS(DES_set_key_unchecked);
+
+int
+DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule)
+{
+       return (DES_set_key(key, schedule));
+}
+LCRYPTO_ALIAS(DES_key_sched);
+
+int
+DES_random_key(DES_cblock *ret)
+{
+       do {
+               arc4random_buf(ret, sizeof(DES_cblock));
+               DES_set_odd_parity(ret);
+       } while (DES_is_weak_key(ret));
+       return (1);
+}
+LCRYPTO_ALIAS(DES_random_key);
+
+void
+DES_string_to_key(const char *str, DES_cblock *key)
+{
+       DES_key_schedule ks;
+       int i, length;
+       unsigned char j;
+
+       memset(key, 0, 8);
+       length = strlen(str);
+#ifdef OLD_STR_TO_KEY
+       for (i = 0; i < length; i++)
+               (*key)[i % 8] ^= (str[i] << 1);
+#else /* MIT COMPATIBLE */
+       for (i = 0; i < length; i++) {
+               j = str[i];
+               if ((i % 16) < 8)
+                       (*key)[i % 8] ^= (j << 1);
+               else {
+                       /* Reverse the bit order 05/05/92 eay */
+                       j = ((j << 4) & 0xf0)|((j >> 4) & 0x0f);
+                       j = ((j << 2) & 0xcc)|((j >> 2) & 0x33);
+                       j = ((j << 1) & 0xaa)|((j >> 1) & 0x55);
+                       (*key)[7 - (i % 8)] ^= j;
+               }
+       }
+#endif
+       DES_set_odd_parity(key);
+#ifdef EXPERIMENTAL_STR_TO_STRONG_KEY
+       if (DES_is_weak_key(key))
+               (*key)[7] ^= 0xF0;
+       DES_set_key(key, &ks);
+#else
+       DES_set_key_unchecked(key, &ks);
+#endif
+       DES_cbc_cksum((const unsigned char *)str, key, length, &ks, key);
+       explicit_bzero(&ks, sizeof(ks));
+       DES_set_odd_parity(key);
+}
+LCRYPTO_ALIAS(DES_string_to_key);
+
+void
+DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2)
+{
+       DES_key_schedule ks;
+       int i, length;
+       unsigned char j;
+
+       memset(key1, 0, 8);
+       memset(key2, 0, 8);
+       length = strlen(str);
+#ifdef OLD_STR_TO_KEY
+       if (length <= 8) {
+               for (i = 0; i < length; i++) {
+                       (*key2)[i] = (*key1)[i] = (str[i] << 1);
+               }
+       } else {
+               for (i = 0; i < length; i++) {
+                       if ((i/8) & 1)
+                               (*key2)[i % 8] ^= (str[i] << 1);
+                       else
+                               (*key1)[i % 8] ^= (str[i] << 1);
+               }
+       }
+#else /* MIT COMPATIBLE */
+       for (i = 0; i < length; i++) {
+               j = str[i];
+               if ((i % 32) < 16) {
+                       if ((i % 16) < 8)
+                               (*key1)[i % 8] ^= (j << 1);
+                       else
+                               (*key2)[i % 8] ^= (j << 1);
+               } else {
+                       j = ((j << 4) & 0xf0)|((j >> 4) & 0x0f);
+                       j = ((j << 2) & 0xcc)|((j >> 2) & 0x33);
+                       j = ((j << 1) & 0xaa)|((j >> 1) & 0x55);
+                       if ((i % 16) < 8)
+                               (*key1)[7 - (i % 8)] ^= j;
+                       else
+                               (*key2)[7 - (i % 8)] ^= j;
+               }
+       }
+       if (length <= 8)
+               memcpy(key2, key1, 8);
+#endif
+       DES_set_odd_parity(key1);
+       DES_set_odd_parity(key2);
+#ifdef EXPERIMENTAL_STR_TO_STRONG_KEY
+       if (DES_is_weak_key(key1))
+               (*key1)[7] ^= 0xF0;
+       DES_set_key(key1, &ks);
+#else
+       DES_set_key_unchecked(key1, &ks);
+#endif
+       DES_cbc_cksum((const unsigned char *)str, key1, length, &ks, key1);
+#ifdef EXPERIMENTAL_STR_TO_STRONG_KEY
+       if (DES_is_weak_key(key2))
+               (*key2)[7] ^= 0xF0;
+       DES_set_key(key2, &ks);
+#else
+       DES_set_key_unchecked(key2, &ks);
+#endif
+       DES_cbc_cksum((const unsigned char *)str, key2, length, &ks, key2);
+       explicit_bzero(&ks, sizeof(ks));
+       DES_set_odd_parity(key1);
+       DES_set_odd_parity(key2);
+}
+LCRYPTO_ALIAS(DES_string_to_2keys);
diff --git a/lib/libcrypto/des/ecb3_enc.c b/lib/libcrypto/des/ecb3_enc.c
deleted file mode 100644 (file)
index 2aa6372..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/* $OpenBSD: ecb3_enc.c,v 1.10 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-void
-DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
-    DES_key_schedule *ks1, DES_key_schedule *ks2,
-    DES_key_schedule *ks3,
-    int enc)
-{
-       DES_LONG l0, l1;
-       DES_LONG ll[2];
-       const unsigned char *in = &(*input)[0];
-       unsigned char *out = &(*output)[0];
-
-       c2l(in, l0);
-       c2l(in, l1);
-       ll[0] = l0;
-       ll[1] = l1;
-       if (enc)
-               DES_encrypt3(ll, ks1, ks2, ks3);
-       else
-               DES_decrypt3(ll, ks1, ks2, ks3);
-       l0 = ll[0];
-       l1 = ll[1];
-       l2c(l0, out);
-       l2c(l1, out);
-}
-LCRYPTO_ALIAS(DES_ecb3_encrypt);
diff --git a/lib/libcrypto/des/ecb_enc.c b/lib/libcrypto/des/ecb_enc.c
deleted file mode 100644 (file)
index 2491c43..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* $OpenBSD: ecb_enc.c,v 1.20 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-#include <openssl/opensslv.h>
-#include <openssl/bio.h>
-
-void
-DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
-    DES_key_schedule *ks, int enc)
-{
-       DES_LONG l;
-       DES_LONG ll[2];
-       const unsigned char *in = &(*input)[0];
-       unsigned char *out = &(*output)[0];
-
-       c2l(in, l);
-       ll[0] = l;
-       c2l(in, l);
-       ll[1] = l;
-       DES_encrypt1(ll, ks, enc);
-       l = ll[0];
-       l2c(l, out);
-       l = ll[1];
-       l2c(l, out);
-       l = ll[0] = ll[1] = 0;
-}
-LCRYPTO_ALIAS(DES_ecb_encrypt);
diff --git a/lib/libcrypto/des/ede_cbcm_enc.c b/lib/libcrypto/des/ede_cbcm_enc.c
deleted file mode 100644 (file)
index 979600e..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/* $OpenBSD: ede_cbcm_enc.c,v 1.10 2024/03/29 01:47:29 joshua Exp $ */
-/* Written by Ben Laurie <ben@algroup.co.uk> for the OpenSSL
- * project 13 Feb 1999.
- */
-/* ====================================================================
- * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com).  This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-
-/*
-
-This is an implementation of Triple DES Cipher Block Chaining with Output
-Feedback Masking, by Coppersmith, Johnson and Matyas, (IBM and Certicom).
-
-Note that there is a known attack on this by Biham and Knudsen but it takes
-a lot of work:
-
-http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-get.cgi/1998/CS/CS0928.ps.gz
-
-*/
-
-#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_DESCBCM is defined */
-
-#ifndef OPENSSL_NO_DESCBCM
-#include "des_local.h"
-
-void
-DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
-    long length, DES_key_schedule *ks1, DES_key_schedule *ks2,
-    DES_key_schedule *ks3, DES_cblock *ivec1, DES_cblock *ivec2,
-    int enc)
-{
-       DES_LONG tin0, tin1;
-       DES_LONG tout0, tout1, xor0, xor1, m0, m1;
-       long l = length;
-       DES_LONG tin[2];
-       unsigned char *iv1, *iv2;
-
-       iv1 = &(*ivec1)[0];
-       iv2 = &(*ivec2)[0];
-
-       if (enc) {
-               c2l(iv1, m0);
-               c2l(iv1, m1);
-               c2l(iv2, tout0);
-               c2l(iv2, tout1);
-               for (l -= 8; l >= -7; l -= 8) {
-                       tin[0] = m0;
-                       tin[1] = m1;
-                       DES_encrypt1(tin, ks3, 1);
-                       m0 = tin[0];
-                       m1 = tin[1];
-
-                       if (l < 0) {
-                               c2ln(in, tin0, tin1, l + 8);
-                       } else {
-                               c2l(in, tin0);
-                               c2l(in, tin1);
-                       }
-                       tin0 ^= tout0;
-                       tin1 ^= tout1;
-
-                       tin[0] = tin0;
-                       tin[1] = tin1;
-                       DES_encrypt1(tin, ks1, 1);
-                       tin[0] ^= m0;
-                       tin[1] ^= m1;
-                       DES_encrypt1(tin, ks2, 0);
-                       tin[0] ^= m0;
-                       tin[1] ^= m1;
-                       DES_encrypt1(tin, ks1, 1);
-                       tout0 = tin[0];
-                       tout1 = tin[1];
-
-                       l2c(tout0, out);
-                       l2c(tout1, out);
-               }
-               iv1 = &(*ivec1)[0];
-               l2c(m0, iv1);
-               l2c(m1, iv1);
-
-               iv2 = &(*ivec2)[0];
-               l2c(tout0, iv2);
-               l2c(tout1, iv2);
-       } else {
-               DES_LONG t0, t1;
-
-               c2l(iv1, m0);
-               c2l(iv1, m1);
-               c2l(iv2, xor0);
-               c2l(iv2, xor1);
-               for (l -= 8; l >= -7; l -= 8) {
-                       tin[0] = m0;
-                       tin[1] = m1;
-                       DES_encrypt1(tin, ks3, 1);
-                       m0 = tin[0];
-                       m1 = tin[1];
-
-                       c2l(in, tin0);
-                       c2l(in, tin1);
-
-                       t0 = tin0;
-                       t1 = tin1;
-
-                       tin[0] = tin0;
-                       tin[1] = tin1;
-                       DES_encrypt1(tin, ks1, 0);
-                       tin[0] ^= m0;
-                       tin[1] ^= m1;
-                       DES_encrypt1(tin, ks2, 1);
-                       tin[0] ^= m0;
-                       tin[1] ^= m1;
-                       DES_encrypt1(tin, ks1, 0);
-                       tout0 = tin[0];
-                       tout1 = tin[1];
-
-                       tout0 ^= xor0;
-                       tout1 ^= xor1;
-                       if (l < 0) {
-                               l2cn(tout0, tout1, out, l + 8);
-                       } else {
-                               l2c(tout0, out);
-                               l2c(tout1, out);
-                       }
-                       xor0 = t0;
-                       xor1 = t1;
-               }
-
-               iv1 = &(*ivec1)[0];
-               l2c(m0, iv1);
-               l2c(m1, iv1);
-
-               iv2 = &(*ivec2)[0];
-               l2c(xor0, iv2);
-               l2c(xor1, iv2);
-       }
-       tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
-       tin[0] = tin[1] = 0;
-}
-LCRYPTO_ALIAS(DES_ede3_cbcm_encrypt);
-#endif
diff --git a/lib/libcrypto/des/fcrypt.c b/lib/libcrypto/des/fcrypt.c
deleted file mode 100644 (file)
index c970ef4..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/* $OpenBSD: fcrypt.c,v 1.17 2024/08/31 15:39:33 jsing Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <stdio.h>
-
-/* This version of crypt has been developed from my MIT compatible
- * DES library.
- * Eric Young (eay@cryptsoft.com)
- */
-
-/* Modification by Jens Kupferschmidt (Cu)
- * I have included directive PARA for shared memory computers.
- * I have included a directive LONGCRYPT to using this routine to cipher
- * passwords with more than 8 bytes like HP-UX 10.x it used. The MAXPLEN
- * definition is the maximum of length of password and can changed. I have
- * defined 24.
- */
-
-#define DES_FCRYPT
-#include "des_local.h"
-#undef DES_FCRYPT
-
-#ifndef OPENBSD_DES_ASM
-
-#undef PERM_OP
-#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),                        \
-       (b)^=(t),                                                       \
-       (a)^=((t)<<(n)))
-
-#undef HPERM_OP
-#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),            \
-       (a)=(a)^(t)^(t>>(16-(n))))                                      \
-
-void
-fcrypt_body(DES_LONG *out, DES_key_schedule *ks, DES_LONG Eswap0,
-    DES_LONG Eswap1)
-{
-       DES_LONG l, r, t, u;
-#ifdef DES_PTR
-       const unsigned char *des_SP = (const unsigned char *)DES_SPtrans;
-#endif
-       DES_LONG *s;
-       int j;
-       DES_LONG E0, E1;
-
-       l = 0;
-       r = 0;
-
-       s = (DES_LONG *)ks;
-       E0 = Eswap0;
-       E1 = Eswap1;
-
-       for (j = 0; j < 25; j++) {
-#ifndef DES_UNROLL
-               int i;
-
-               for (i = 0; i < 32; i += 4) {
-                       D_ENCRYPT(l, r, i + 0); /*  1 */
-                       D_ENCRYPT(r, l, i + 2); /*  2 */
-               }
-#else
-               D_ENCRYPT(l, r, 0); /*  1 */
-               D_ENCRYPT(r, l, 2); /*  2 */
-               D_ENCRYPT(l, r, 4); /*  3 */
-               D_ENCRYPT(r, l, 6); /*  4 */
-               D_ENCRYPT(l, r, 8); /*  5 */
-               D_ENCRYPT(r, l, 10); /*  6 */
-               D_ENCRYPT(l, r, 12); /*  7 */
-               D_ENCRYPT(r, l, 14); /*  8 */
-               D_ENCRYPT(l, r, 16); /*  9 */
-               D_ENCRYPT(r, l, 18); /*  10 */
-               D_ENCRYPT(l, r, 20); /*  11 */
-               D_ENCRYPT(r, l, 22); /*  12 */
-               D_ENCRYPT(l, r, 24); /*  13 */
-               D_ENCRYPT(r, l, 26); /*  14 */
-               D_ENCRYPT(l, r, 28); /*  15 */
-               D_ENCRYPT(r, l, 30); /*  16 */
-#endif
-
-               t = l;
-               l = r;
-               r = t;
-       }
-       l = ROTATE(l, 3) & 0xffffffffL;
-       r = ROTATE(r, 3) & 0xffffffffL;
-
-       PERM_OP(l, r, t, 1, 0x55555555L);
-       PERM_OP(r, l, t, 8, 0x00ff00ffL);
-       PERM_OP(l, r, t, 2, 0x33333333L);
-       PERM_OP(r, l, t, 16, 0x0000ffffL);
-       PERM_OP(l, r, t, 4, 0x0f0f0f0fL);
-
-       out[0] = r;
-       out[1] = l;
-}
-
-#endif /* OPENBSD_DES_ASM */
-
-/* Added more values to handle illegal salt values the way normal
- * crypt() implementations do.  The patch was sent by
- * Bjorn Gronvall <bg@sics.se>
- */
-static unsigned const char con_salt[128] = {
-       0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
-       0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,
-       0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
-       0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1,
-       0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9,
-       0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0x00, 0x01,
-       0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
-       0x0A, 0x0B, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
-       0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
-       0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A,
-       0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22,
-       0x23, 0x24, 0x25, 0x20, 0x21, 0x22, 0x23, 0x24,
-       0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
-       0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
-       0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
-       0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,
-};
-
-static unsigned const char cov_2char[64] = {
-       0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
-       0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
-       0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
-       0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
-       0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
-       0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
-       0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
-       0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
-};
-
-char *
-DES_crypt(const char *buf, const char *salt)
-{
-       static char buff[14];
-
-       return (DES_fcrypt(buf, salt, buff));
-}
-LCRYPTO_ALIAS(DES_crypt);
-
-char *
-DES_fcrypt(const char *buf, const char *salt, char *ret)
-{
-       unsigned int i, j, x, y;
-       DES_LONG Eswap0, Eswap1;
-       DES_LONG out[2], ll;
-       DES_cblock key;
-       DES_key_schedule ks;
-       unsigned char bb[9];
-       unsigned char *b = bb;
-       unsigned char c, u;
-
-       /* eay 25/08/92
-        * If you call crypt("pwd","*") as often happens when you
-        * have * as the pwd field in /etc/passwd, the function
-        * returns *\0xxxxxxxxx
-        * The \0 makes the string look like * so the pwd "*" would
-        * crypt to "*".  This was found when replacing the crypt in
-        * our shared libraries.  People found that the disabled
-        * accounts effectively had no passwd :-(. */
-       x = ret[0] = ((salt[0] == '\0') ? 'A' : salt[0]);
-       Eswap0 = con_salt[x] << 2;
-       x = ret[1] = ((salt[1] == '\0') ? 'A' : salt[1]);
-       Eswap1 = con_salt[x] << 6;
-/* EAY
-r=strlen(buf);
-r=(r+7)/8;
-*/
-       for (i = 0; i < 8; i++) {
-               c = *(buf++);
-               if (!c)
-                       break;
-               key[i] = (c << 1);
-       }
-       for (; i < 8; i++)
-               key[i] = 0;
-
-       DES_set_key_unchecked(&key, &ks);
-       fcrypt_body(&(out[0]), &ks, Eswap0, Eswap1);
-
-       ll = out[0];
-       l2c(ll, b);
-       ll = out[1];
-       l2c(ll, b);
-       y = 0;
-       u = 0x80;
-       bb[8] = 0;
-       for (i = 2; i < 13; i++) {
-               c = 0;
-               for (j = 0; j < 6; j++) {
-                       c <<= 1;
-                       if (bb[y] & u)
-                               c |= 1;
-                       u >>= 1;
-                       if (!u) {
-                               y++;
-                               u = 0x80;
-                       }
-               }
-               ret[i] = cov_2char[c];
-       }
-       ret[13] = '\0';
-       return (ret);
-}
-LCRYPTO_ALIAS(DES_fcrypt);
diff --git a/lib/libcrypto/des/ofb64ede.c b/lib/libcrypto/des/ofb64ede.c
deleted file mode 100644 (file)
index 949b220..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* $OpenBSD: ofb64ede.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-/* The input and output encrypted as though 64bit ofb mode is being
- * used.  The extra state information to record how much of the
- * 64bit block we have used is contained in *num;
- */
-void
-DES_ede3_ofb64_encrypt(const unsigned char *in,
-    unsigned char *out, long length,
-    DES_key_schedule *k1, DES_key_schedule *k2,
-    DES_key_schedule *k3, DES_cblock *ivec,
-    int *num)
-{
-       DES_LONG v0, v1;
-       int n = *num;
-       long l = length;
-       DES_cblock d;
-       char *dp;
-       DES_LONG ti[2];
-       unsigned char *iv;
-       int save = 0;
-
-       iv = &(*ivec)[0];
-       c2l(iv, v0);
-       c2l(iv, v1);
-       ti[0] = v0;
-       ti[1] = v1;
-       dp = (char *)d;
-       l2c(v0, dp);
-       l2c(v1, dp);
-       while (l--) {
-               if (n == 0) {
-                       /* ti[0]=v0; */
-                       /* ti[1]=v1; */
-                       DES_encrypt3(ti, k1, k2, k3);
-                       v0 = ti[0];
-                       v1 = ti[1];
-
-                       dp = (char *)d;
-                       l2c(v0, dp);
-                       l2c(v1, dp);
-                       save++;
-               }
-               *(out++) = *(in++) ^ d[n];
-               n = (n + 1) & 0x07;
-       }
-       if (save) {
-               iv = &(*ivec)[0];
-               l2c(v0, iv);
-               l2c(v1, iv);
-       }
-       v0 = v1 = ti[0] = ti[1] = 0;
-       *num = n;
-}
-LCRYPTO_ALIAS(DES_ede3_ofb64_encrypt);
diff --git a/lib/libcrypto/des/ofb64enc.c b/lib/libcrypto/des/ofb64enc.c
deleted file mode 100644 (file)
index 5e524dd..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* $OpenBSD: ofb64enc.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-/* The input and output encrypted as though 64bit ofb mode is being
- * used.  The extra state information to record how much of the
- * 64bit block we have used is contained in *num;
- */
-void
-DES_ofb64_encrypt(const unsigned char *in,
-    unsigned char *out, long length,
-    DES_key_schedule *schedule, DES_cblock *ivec, int *num)
-{
-       DES_LONG v0, v1, t;
-       int n = *num;
-       long l = length;
-       DES_cblock d;
-       unsigned char *dp;
-       DES_LONG ti[2];
-       unsigned char *iv;
-       int save = 0;
-
-       iv = &(*ivec)[0];
-       c2l(iv, v0);
-       c2l(iv, v1);
-       ti[0] = v0;
-       ti[1] = v1;
-       dp = d;
-       l2c(v0, dp);
-       l2c(v1, dp);
-       while (l--) {
-               if (n == 0) {
-                       DES_encrypt1(ti, schedule, DES_ENCRYPT);
-                       dp = d;
-                       t = ti[0];
-                       l2c(t, dp);
-                       t = ti[1];
-                       l2c(t, dp);
-                       save++;
-               }
-               *(out++) = *(in++) ^ d[n];
-               n = (n + 1) & 0x07;
-       }
-       if (save) {
-               v0 = ti[0];
-               v1 = ti[1];
-               iv = &(*ivec)[0];
-               l2c(v0, iv);
-               l2c(v1, iv);
-       }
-       t = v0 = v1 = ti[0] = ti[1] = 0;
-       *num = n;
-}
-LCRYPTO_ALIAS(DES_ofb64_encrypt);
diff --git a/lib/libcrypto/des/ofb_enc.c b/lib/libcrypto/des/ofb_enc.c
deleted file mode 100644 (file)
index 96dc25e..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/* $OpenBSD: ofb_enc.c,v 1.9 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-/* The input and output are loaded in multiples of 8 bits.
- * What this means is that if you hame numbits=12 and length=2
- * the first 12 bits will be retrieved from the first byte and half
- * the second.  The second 12 bits will come from the 3rd and half the 4th
- * byte.
- */
-void
-DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
-    long length, DES_key_schedule *schedule,
-    DES_cblock *ivec)
-{
-       DES_LONG d0, d1, vv0, vv1, v0, v1, n = (numbits + 7)/8;
-       DES_LONG mask0, mask1;
-       long l = length;
-       int num = numbits;
-       DES_LONG ti[2];
-       unsigned char *iv;
-
-       if (num > 64)
-               return;
-       if (num > 32) {
-               mask0 = 0xffffffffL;
-               if (num >= 64)
-                       mask1 = mask0;
-               else
-                       mask1 = (1L << (num - 32)) - 1;
-       } else {
-               if (num == 32)
-                       mask0 = 0xffffffffL;
-               else
-                       mask0 = (1L << num) - 1;
-               mask1 = 0x00000000L;
-       }
-
-       iv = &(*ivec)[0];
-       c2l(iv, v0);
-       c2l(iv, v1);
-       ti[0] = v0;
-       ti[1] = v1;
-       while (l-- > 0) {
-               ti[0] = v0;
-               ti[1] = v1;
-               DES_encrypt1((DES_LONG *)ti, schedule, DES_ENCRYPT);
-               vv0 = ti[0];
-               vv1 = ti[1];
-               c2ln(in, d0, d1, n);
-               in += n;
-               d0 = (d0 ^ vv0) & mask0;
-               d1 = (d1 ^ vv1) & mask1;
-               l2cn(d0, d1, out, n);
-               out += n;
-
-               if (num == 32) {
-                       v0 = v1;
-                       v1 = vv0;
-               } else if (num == 64) {
-                       v0 = vv0;
-                       v1 = vv1;
-               } else if (num > 32) { /* && num != 64 */
-                       v0 = ((v1 >> (num - 32))|(vv0 << (64 - num))) &
-                           0xffffffffL;
-                       v1 = ((vv0 >> (num - 32))|(vv1 << (64 - num))) &
-                           0xffffffffL;
-               } else /* num < 32 */ {
-                       v0 = ((v0 >> num)|(v1 << (32 - num))) & 0xffffffffL;
-                       v1 = ((v1 >> num)|(vv0 << (32 - num))) & 0xffffffffL;
-               }
-       }
-       iv = &(*ivec)[0];
-       l2c(v0, iv);
-       l2c(v1, iv);
-       v0 = v1 = d0 = d1 = ti[0] = ti[1] = vv0 = vv1 = 0;
-}
-LCRYPTO_ALIAS(DES_ofb_encrypt);
diff --git a/lib/libcrypto/des/pcbc_enc.c b/lib/libcrypto/des/pcbc_enc.c
deleted file mode 100644 (file)
index defd628..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* $OpenBSD: pcbc_enc.c,v 1.10 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-void
-DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,
-    long length, DES_key_schedule *schedule,
-    DES_cblock *ivec, int enc)
-{
-       DES_LONG sin0, sin1, xor0, xor1, tout0, tout1;
-       DES_LONG tin[2];
-       const unsigned char *in;
-       unsigned char *out, *iv;
-
-       in = input;
-       out = output;
-       iv = &(*ivec)[0];
-
-       if (enc) {
-               c2l(iv, xor0);
-               c2l(iv, xor1);
-               for (; length > 0; length -= 8) {
-                       if (length >= 8) {
-                               c2l(in, sin0);
-                               c2l(in, sin1);
-                       } else
-                               c2ln(in, sin0, sin1, length);
-                       tin[0] = sin0 ^ xor0;
-                       tin[1] = sin1 ^ xor1;
-                       DES_encrypt1((DES_LONG *)tin, schedule, DES_ENCRYPT);
-                       tout0 = tin[0];
-                       tout1 = tin[1];
-                       xor0 = sin0 ^ tout0;
-                       xor1 = sin1 ^ tout1;
-                       l2c(tout0, out);
-                       l2c(tout1, out);
-               }
-       } else {
-               c2l(iv, xor0);
-               c2l(iv, xor1);
-               for (; length > 0; length -= 8) {
-                       c2l(in, sin0);
-                       c2l(in, sin1);
-                       tin[0] = sin0;
-                       tin[1] = sin1;
-                       DES_encrypt1((DES_LONG *)tin, schedule, DES_DECRYPT);
-                       tout0 = tin[0] ^ xor0;
-                       tout1 = tin[1] ^ xor1;
-                       if (length >= 8) {
-                               l2c(tout0, out);
-                               l2c(tout1, out);
-                       } else
-                               l2cn(tout0, tout1, out, length);
-                       xor0 = tout0 ^ sin0;
-                       xor1 = tout1 ^ sin1;
-               }
-       }
-       tin[0] = tin[1] = 0;
-       sin0 = sin1 = xor0 = xor1 = tout0 = tout1 = 0;
-}
-LCRYPTO_ALIAS(DES_pcbc_encrypt);
diff --git a/lib/libcrypto/des/qud_cksm.c b/lib/libcrypto/des/qud_cksm.c
deleted file mode 100644 (file)
index 4ded2a0..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* $OpenBSD: qud_cksm.c,v 1.11 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-/* From "Message Authentication"  R.R. Jueneman, S.M. Matyas, C.H. Meyer
- * IEEE Communications Magazine Sept 1985 Vol. 23 No. 9 p 29-40
- * This module in only based on the code in this paper and is
- * almost definitely not the same as the MIT implementation.
- */
-#include "des_local.h"
-
-/* bug fix for dos - 7/6/91 - Larry hughes@logos.ucs.indiana.edu */
-#define Q_B0(a)        (((DES_LONG)(a)))
-#define Q_B1(a)        (((DES_LONG)(a))<<8)
-#define Q_B2(a)        (((DES_LONG)(a))<<16)
-#define Q_B3(a)        (((DES_LONG)(a))<<24)
-
-/* used to scramble things a bit */
-/* Got the value MIT uses via brute force :-) 2/10/90 eay */
-#define NOISE  ((DES_LONG)83653421L)
-
-DES_LONG
-DES_quad_cksum(const unsigned char *input, DES_cblock output[],
-    long length, int out_count, DES_cblock *seed)
-{
-       DES_LONG z0, z1, t0, t1;
-       int i;
-       long l;
-       const unsigned char *cp;
-       DES_LONG *lp;
-
-       if (out_count < 1)
-               out_count = 1;
-       lp = (DES_LONG *)&(output[0])[0];
-
-       z0 = Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3(
-           (*seed)[3]);
-       z1 = Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3(
-           (*seed)[7]);
-
-       for (i = 0; ((i < 4) && (i < out_count)); i++) {
-               cp = input;
-               l = length;
-               while (l > 0) {
-                       if (l > 1) {
-                               t0 = (DES_LONG)(*(cp++));
-                               t0 |= (DES_LONG)Q_B1(*(cp++));
-                               l--;
-                       } else
-                               t0 = (DES_LONG)(*(cp++));
-                       l--;
-                       /* add */
-                       t0 += z0;
-                       t0 &= 0xffffffffL;
-                       t1 = z1;
-                       /* square, well sort of square */
-                       z0 = ((((t0*t0) & 0xffffffffL) +
-                           ((t1*t1) & 0xffffffffL)) & 0xffffffffL) %
-                           0x7fffffffL;
-                       z1 = ((t0*((t1 + NOISE) & 0xffffffffL)) & 0xffffffffL) %
-                           0x7fffffffL;
-               }
-               if (lp != NULL) {
-                       /* The MIT library assumes that the checksum is
-                        * composed of 2*out_count 32 bit ints */
-                       *lp++ = z0;
-                       *lp++ = z1;
-               }
-       }
-       return (z0);
-}
-LCRYPTO_ALIAS(DES_quad_cksum);
diff --git a/lib/libcrypto/des/set_key.c b/lib/libcrypto/des/set_key.c
deleted file mode 100644 (file)
index 9a9dcf7..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-/* $OpenBSD: set_key.c,v 1.28 2024/07/09 07:16:13 beck Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <stdlib.h>
-
-#include <openssl/crypto.h>
-
-#include "des_local.h"
-
-int DES_check_key = 0; /* defaults to false */
-LCRYPTO_ALIAS(DES_check_key);
-
-static const unsigned char odd_parity[256] = {
-       1,  1,  2,  2,  4,  4,  7,  7,  8,  8, 11, 11, 13, 13, 14, 14,
-       16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31,
-       32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47,
-       49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62,
-       64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79,
-       81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94,
-       97, 97, 98, 98, 100, 100, 103, 103, 104, 104, 107, 107, 109, 109, 110, 110,
-       112, 112, 115, 115, 117, 117, 118, 118, 121, 121, 122, 122, 124, 124, 127, 127,
-       128, 128, 131, 131, 133, 133, 134, 134, 137, 137, 138, 138, 140, 140, 143, 143,
-       145, 145, 146, 146, 148, 148, 151, 151, 152, 152, 155, 155, 157, 157, 158, 158,
-       161, 161, 162, 162, 164, 164, 167, 167, 168, 168, 171, 171, 173, 173, 174, 174,
-       176, 176, 179, 179, 181, 181, 182, 182, 185, 185, 186, 186, 188, 188, 191, 191,
-       193, 193, 194, 194, 196, 196, 199, 199, 200, 200, 203, 203, 205, 205, 206, 206,
-       208, 208, 211, 211, 213, 213, 214, 214, 217, 217, 218, 218, 220, 220, 223, 223,
-       224, 224, 227, 227, 229, 229, 230, 230, 233, 233, 234, 234, 236, 236, 239, 239,
-       241, 241, 242, 242, 244, 244, 247, 247, 248, 248, 251, 251, 253, 253, 254, 254,
-};
-
-void
-DES_set_odd_parity(DES_cblock *key)
-{
-       unsigned int i;
-
-       for (i = 0; i < DES_KEY_SZ; i++)
-               (*key)[i] = odd_parity[(*key)[i]];
-}
-LCRYPTO_ALIAS(DES_set_odd_parity);
-
-int
-DES_check_key_parity(const_DES_cblock *key)
-{
-       unsigned int i;
-
-       for (i = 0; i < DES_KEY_SZ; i++) {
-               if ((*key)[i] != odd_parity[(*key)[i]])
-                       return (0);
-       }
-       return (1);
-}
-LCRYPTO_ALIAS(DES_check_key_parity);
-
-/* Weak and semi weak keys as taken from
- * %A D.W. Davies
- * %A W.L. Price
- * %T Security for Computer Networks
- * %I John Wiley & Sons
- * %D 1984
- * Many thanks to smb@ulysses.att.com (Steven Bellovin) for the reference
- * (and actual cblock values).
- */
-#define NUM_WEAK_KEY   16
-static const DES_cblock weak_keys[NUM_WEAK_KEY] = {
-       /* weak keys */
-       {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
-       {0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE},
-       {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
-       {0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1},
-       /* semi-weak keys */
-       {0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE},
-       {0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01},
-       {0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1},
-       {0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E},
-       {0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1},
-       {0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01},
-       {0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE},
-       {0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E},
-       {0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E},
-       {0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01},
-       {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
-       {0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1},
-};
-
-int
-DES_is_weak_key(const_DES_cblock *key)
-{
-       unsigned int i;
-
-       for (i = 0; i < NUM_WEAK_KEY; i++)
-               if (memcmp(weak_keys[i], key, sizeof(DES_cblock)) == 0)
-                       return 1;
-       return 0;
-}
-LCRYPTO_ALIAS(DES_is_weak_key);
-
-/* NOW DEFINED IN des_local.h
- * See ecb_encrypt.c for a pseudo description of these macros.
- * #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
- *     (b)^=(t),\
- *     (a)=((a)^((t)<<(n))))
- */
-
-#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)), \
-       (a)=(a)^(t)^(t>>(16-(n))))
-
-static const DES_LONG des_skb[8][64] = {
-       {
-               /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
-               0x00000000L, 0x00000010L, 0x20000000L, 0x20000010L,
-               0x00010000L, 0x00010010L, 0x20010000L, 0x20010010L,
-               0x00000800L, 0x00000810L, 0x20000800L, 0x20000810L,
-               0x00010800L, 0x00010810L, 0x20010800L, 0x20010810L,
-               0x00000020L, 0x00000030L, 0x20000020L, 0x20000030L,
-               0x00010020L, 0x00010030L, 0x20010020L, 0x20010030L,
-               0x00000820L, 0x00000830L, 0x20000820L, 0x20000830L,
-               0x00010820L, 0x00010830L, 0x20010820L, 0x20010830L,
-               0x00080000L, 0x00080010L, 0x20080000L, 0x20080010L,
-               0x00090000L, 0x00090010L, 0x20090000L, 0x20090010L,
-               0x00080800L, 0x00080810L, 0x20080800L, 0x20080810L,
-               0x00090800L, 0x00090810L, 0x20090800L, 0x20090810L,
-               0x00080020L, 0x00080030L, 0x20080020L, 0x20080030L,
-               0x00090020L, 0x00090030L, 0x20090020L, 0x20090030L,
-               0x00080820L, 0x00080830L, 0x20080820L, 0x20080830L,
-               0x00090820L, 0x00090830L, 0x20090820L, 0x20090830L,
-       }, {
-               /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
-               0x00000000L, 0x02000000L, 0x00002000L, 0x02002000L,
-               0x00200000L, 0x02200000L, 0x00202000L, 0x02202000L,
-               0x00000004L, 0x02000004L, 0x00002004L, 0x02002004L,
-               0x00200004L, 0x02200004L, 0x00202004L, 0x02202004L,
-               0x00000400L, 0x02000400L, 0x00002400L, 0x02002400L,
-               0x00200400L, 0x02200400L, 0x00202400L, 0x02202400L,
-               0x00000404L, 0x02000404L, 0x00002404L, 0x02002404L,
-               0x00200404L, 0x02200404L, 0x00202404L, 0x02202404L,
-               0x10000000L, 0x12000000L, 0x10002000L, 0x12002000L,
-               0x10200000L, 0x12200000L, 0x10202000L, 0x12202000L,
-               0x10000004L, 0x12000004L, 0x10002004L, 0x12002004L,
-               0x10200004L, 0x12200004L, 0x10202004L, 0x12202004L,
-               0x10000400L, 0x12000400L, 0x10002400L, 0x12002400L,
-               0x10200400L, 0x12200400L, 0x10202400L, 0x12202400L,
-               0x10000404L, 0x12000404L, 0x10002404L, 0x12002404L,
-               0x10200404L, 0x12200404L, 0x10202404L, 0x12202404L,
-       }, {
-               /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
-               0x00000000L, 0x00000001L, 0x00040000L, 0x00040001L,
-               0x01000000L, 0x01000001L, 0x01040000L, 0x01040001L,
-               0x00000002L, 0x00000003L, 0x00040002L, 0x00040003L,
-               0x01000002L, 0x01000003L, 0x01040002L, 0x01040003L,
-               0x00000200L, 0x00000201L, 0x00040200L, 0x00040201L,
-               0x01000200L, 0x01000201L, 0x01040200L, 0x01040201L,
-               0x00000202L, 0x00000203L, 0x00040202L, 0x00040203L,
-               0x01000202L, 0x01000203L, 0x01040202L, 0x01040203L,
-               0x08000000L, 0x08000001L, 0x08040000L, 0x08040001L,
-               0x09000000L, 0x09000001L, 0x09040000L, 0x09040001L,
-               0x08000002L, 0x08000003L, 0x08040002L, 0x08040003L,
-               0x09000002L, 0x09000003L, 0x09040002L, 0x09040003L,
-               0x08000200L, 0x08000201L, 0x08040200L, 0x08040201L,
-               0x09000200L, 0x09000201L, 0x09040200L, 0x09040201L,
-               0x08000202L, 0x08000203L, 0x08040202L, 0x08040203L,
-               0x09000202L, 0x09000203L, 0x09040202L, 0x09040203L,
-       }, {
-               /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
-               0x00000000L, 0x00100000L, 0x00000100L, 0x00100100L,
-               0x00000008L, 0x00100008L, 0x00000108L, 0x00100108L,
-               0x00001000L, 0x00101000L, 0x00001100L, 0x00101100L,
-               0x00001008L, 0x00101008L, 0x00001108L, 0x00101108L,
-               0x04000000L, 0x04100000L, 0x04000100L, 0x04100100L,
-               0x04000008L, 0x04100008L, 0x04000108L, 0x04100108L,
-               0x04001000L, 0x04101000L, 0x04001100L, 0x04101100L,
-               0x04001008L, 0x04101008L, 0x04001108L, 0x04101108L,
-               0x00020000L, 0x00120000L, 0x00020100L, 0x00120100L,
-               0x00020008L, 0x00120008L, 0x00020108L, 0x00120108L,
-               0x00021000L, 0x00121000L, 0x00021100L, 0x00121100L,
-               0x00021008L, 0x00121008L, 0x00021108L, 0x00121108L,
-               0x04020000L, 0x04120000L, 0x04020100L, 0x04120100L,
-               0x04020008L, 0x04120008L, 0x04020108L, 0x04120108L,
-               0x04021000L, 0x04121000L, 0x04021100L, 0x04121100L,
-               0x04021008L, 0x04121008L, 0x04021108L, 0x04121108L,
-       }, {
-               /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
-               0x00000000L, 0x10000000L, 0x00010000L, 0x10010000L,
-               0x00000004L, 0x10000004L, 0x00010004L, 0x10010004L,
-               0x20000000L, 0x30000000L, 0x20010000L, 0x30010000L,
-               0x20000004L, 0x30000004L, 0x20010004L, 0x30010004L,
-               0x00100000L, 0x10100000L, 0x00110000L, 0x10110000L,
-               0x00100004L, 0x10100004L, 0x00110004L, 0x10110004L,
-               0x20100000L, 0x30100000L, 0x20110000L, 0x30110000L,
-               0x20100004L, 0x30100004L, 0x20110004L, 0x30110004L,
-               0x00001000L, 0x10001000L, 0x00011000L, 0x10011000L,
-               0x00001004L, 0x10001004L, 0x00011004L, 0x10011004L,
-               0x20001000L, 0x30001000L, 0x20011000L, 0x30011000L,
-               0x20001004L, 0x30001004L, 0x20011004L, 0x30011004L,
-               0x00101000L, 0x10101000L, 0x00111000L, 0x10111000L,
-               0x00101004L, 0x10101004L, 0x00111004L, 0x10111004L,
-               0x20101000L, 0x30101000L, 0x20111000L, 0x30111000L,
-               0x20101004L, 0x30101004L, 0x20111004L, 0x30111004L,
-       }, {
-               /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
-               0x00000000L, 0x08000000L, 0x00000008L, 0x08000008L,
-               0x00000400L, 0x08000400L, 0x00000408L, 0x08000408L,
-               0x00020000L, 0x08020000L, 0x00020008L, 0x08020008L,
-               0x00020400L, 0x08020400L, 0x00020408L, 0x08020408L,
-               0x00000001L, 0x08000001L, 0x00000009L, 0x08000009L,
-               0x00000401L, 0x08000401L, 0x00000409L, 0x08000409L,
-               0x00020001L, 0x08020001L, 0x00020009L, 0x08020009L,
-               0x00020401L, 0x08020401L, 0x00020409L, 0x08020409L,
-               0x02000000L, 0x0A000000L, 0x02000008L, 0x0A000008L,
-               0x02000400L, 0x0A000400L, 0x02000408L, 0x0A000408L,
-               0x02020000L, 0x0A020000L, 0x02020008L, 0x0A020008L,
-               0x02020400L, 0x0A020400L, 0x02020408L, 0x0A020408L,
-               0x02000001L, 0x0A000001L, 0x02000009L, 0x0A000009L,
-               0x02000401L, 0x0A000401L, 0x02000409L, 0x0A000409L,
-               0x02020001L, 0x0A020001L, 0x02020009L, 0x0A020009L,
-               0x02020401L, 0x0A020401L, 0x02020409L, 0x0A020409L,
-       }, {
-               /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
-               0x00000000L, 0x00000100L, 0x00080000L, 0x00080100L,
-               0x01000000L, 0x01000100L, 0x01080000L, 0x01080100L,
-               0x00000010L, 0x00000110L, 0x00080010L, 0x00080110L,
-               0x01000010L, 0x01000110L, 0x01080010L, 0x01080110L,
-               0x00200000L, 0x00200100L, 0x00280000L, 0x00280100L,
-               0x01200000L, 0x01200100L, 0x01280000L, 0x01280100L,
-               0x00200010L, 0x00200110L, 0x00280010L, 0x00280110L,
-               0x01200010L, 0x01200110L, 0x01280010L, 0x01280110L,
-               0x00000200L, 0x00000300L, 0x00080200L, 0x00080300L,
-               0x01000200L, 0x01000300L, 0x01080200L, 0x01080300L,
-               0x00000210L, 0x00000310L, 0x00080210L, 0x00080310L,
-               0x01000210L, 0x01000310L, 0x01080210L, 0x01080310L,
-               0x00200200L, 0x00200300L, 0x00280200L, 0x00280300L,
-               0x01200200L, 0x01200300L, 0x01280200L, 0x01280300L,
-               0x00200210L, 0x00200310L, 0x00280210L, 0x00280310L,
-               0x01200210L, 0x01200310L, 0x01280210L, 0x01280310L,
-       }, {
-               /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
-               0x00000000L, 0x04000000L, 0x00040000L, 0x04040000L,
-               0x00000002L, 0x04000002L, 0x00040002L, 0x04040002L,
-               0x00002000L, 0x04002000L, 0x00042000L, 0x04042000L,
-               0x00002002L, 0x04002002L, 0x00042002L, 0x04042002L,
-               0x00000020L, 0x04000020L, 0x00040020L, 0x04040020L,
-               0x00000022L, 0x04000022L, 0x00040022L, 0x04040022L,
-               0x00002020L, 0x04002020L, 0x00042020L, 0x04042020L,
-               0x00002022L, 0x04002022L, 0x00042022L, 0x04042022L,
-               0x00000800L, 0x04000800L, 0x00040800L, 0x04040800L,
-               0x00000802L, 0x04000802L, 0x00040802L, 0x04040802L,
-               0x00002800L, 0x04002800L, 0x00042800L, 0x04042800L,
-               0x00002802L, 0x04002802L, 0x00042802L, 0x04042802L,
-               0x00000820L, 0x04000820L, 0x00040820L, 0x04040820L,
-               0x00000822L, 0x04000822L, 0x00040822L, 0x04040822L,
-               0x00002820L, 0x04002820L, 0x00042820L, 0x04042820L,
-               0x00002822L, 0x04002822L, 0x00042822L, 0x04042822L,
-       },
-};
-
-int
-DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule)
-{
-       if (DES_check_key) {
-               return DES_set_key_checked(key, schedule);
-       } else {
-               DES_set_key_unchecked(key, schedule);
-               return 0;
-       }
-}
-LCRYPTO_ALIAS(DES_set_key);
-
-/* return 0 if key parity is odd (correct),
- * return -1 if key parity error,
- * return -2 if illegal weak key.
- */
-int
-DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule)
-{
-       if (!DES_check_key_parity(key))
-               return (-1);
-       if (DES_is_weak_key(key))
-               return (-2);
-       DES_set_key_unchecked(key, schedule);
-       return 0;
-}
-LCRYPTO_ALIAS(DES_set_key_checked);
-
-void
-DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule)
-{
-       static const int shifts2[16] = {0, 0,1, 1,1, 1,1, 1,0, 1,1, 1,1, 1,1, 0};
-       DES_LONG c, d, t, s, t2;
-       const unsigned char *in;
-       DES_LONG *k;
-       int i;
-
-       k = &schedule->ks->deslong[0];
-       in = &(*key)[0];
-
-       c2l(in, c);
-       c2l(in, d);
-
-       /* do PC1 in 47 simple operations :-)
-        * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov)
-        * for the inspiration. :-) */
-       PERM_OP(d, c, t, 4, 0x0f0f0f0fL);
-       HPERM_OP(c, t, -2, 0xcccc0000L);
-       HPERM_OP(d, t, -2, 0xcccc0000L);
-       PERM_OP(d, c, t, 1, 0x55555555L);
-       PERM_OP(c, d, t, 8, 0x00ff00ffL);
-       PERM_OP(d, c, t, 1, 0x55555555L);
-       d = (((d & 0x000000ffL) << 16L) | (d & 0x0000ff00L) |
-           ((d & 0x00ff0000L) >> 16L)|((c & 0xf0000000L) >> 4L));
-       c &= 0x0fffffffL;
-
-       for (i = 0; i < ITERATIONS; i++) {
-               if (shifts2[i]) {
-                       c = ((c >> 2L)|(c << 26L));
-                       d = ((d >> 2L)|(d << 26L));
-               } else {
-                       c = ((c >> 1L)|(c << 27L));
-                       d = ((d >> 1L)|(d << 27L));
-               }
-               c &= 0x0fffffffL;
-               d &= 0x0fffffffL;
-               /* could be a few less shifts but I am to lazy at this
-                * point in time to investigate */
-               s = des_skb[0][(c)&0x3f]|
-                   des_skb[1][((c >> 6L) & 0x03)|((c >> 7L) & 0x3c)]|
-                   des_skb[2][((c >> 13L) & 0x0f)|((c >> 14L) & 0x30)]|
-                   des_skb[3][((c >> 20L) & 0x01)|((c >> 21L) & 0x06) |
-                   ((c >> 22L) & 0x38)];
-               t = des_skb[4][(d)&0x3f]|
-                   des_skb[5][((d >> 7L) & 0x03)|((d >> 8L) & 0x3c)]|
-                   des_skb[6][(d >> 15L) & 0x3f]|
-                   des_skb[7][((d >> 21L) & 0x0f)|((d >> 22L) & 0x30)];
-
-               /* table contained 0213 4657 */
-               t2 = ((t << 16L)|(s & 0x0000ffffL)) & 0xffffffffL;
-               *(k++) = ROTATE(t2, 30) & 0xffffffffL;
-
-               t2 = ((s >> 16L)|(t & 0xffff0000L));
-               *(k++) = ROTATE(t2, 26) & 0xffffffffL;
-       }
-}
-LCRYPTO_ALIAS(DES_set_key_unchecked);
-
-int
-DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule)
-{
-       return (DES_set_key(key, schedule));
-}
-LCRYPTO_ALIAS(DES_key_sched);
-
-int
-DES_random_key(DES_cblock *ret)
-{
-       do {
-               arc4random_buf(ret, sizeof(DES_cblock));
-               DES_set_odd_parity(ret);
-       } while (DES_is_weak_key(ret));
-       return (1);
-}
-LCRYPTO_ALIAS(DES_random_key);
diff --git a/lib/libcrypto/des/str2key.c b/lib/libcrypto/des/str2key.c
deleted file mode 100644 (file)
index cc5bc91..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/* $OpenBSD: str2key.c,v 1.14 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <openssl/crypto.h>
-#include "des_local.h"
-
-void
-DES_string_to_key(const char *str, DES_cblock *key)
-{
-       DES_key_schedule ks;
-       int i, length;
-       unsigned char j;
-
-       memset(key, 0, 8);
-       length = strlen(str);
-#ifdef OLD_STR_TO_KEY
-       for (i = 0; i < length; i++)
-               (*key)[i % 8] ^= (str[i] << 1);
-#else /* MIT COMPATIBLE */
-       for (i = 0; i < length; i++) {
-               j = str[i];
-               if ((i % 16) < 8)
-                       (*key)[i % 8] ^= (j << 1);
-               else {
-                       /* Reverse the bit order 05/05/92 eay */
-                       j = ((j << 4) & 0xf0)|((j >> 4) & 0x0f);
-                       j = ((j << 2) & 0xcc)|((j >> 2) & 0x33);
-                       j = ((j << 1) & 0xaa)|((j >> 1) & 0x55);
-                       (*key)[7 - (i % 8)] ^= j;
-               }
-       }
-#endif
-       DES_set_odd_parity(key);
-#ifdef EXPERIMENTAL_STR_TO_STRONG_KEY
-       if (DES_is_weak_key(key))
-               (*key)[7] ^= 0xF0;
-       DES_set_key(key, &ks);
-#else
-       DES_set_key_unchecked(key, &ks);
-#endif
-       DES_cbc_cksum((const unsigned char *)str, key, length, &ks, key);
-       explicit_bzero(&ks, sizeof(ks));
-       DES_set_odd_parity(key);
-}
-LCRYPTO_ALIAS(DES_string_to_key);
-
-void
-DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2)
-{
-       DES_key_schedule ks;
-       int i, length;
-       unsigned char j;
-
-       memset(key1, 0, 8);
-       memset(key2, 0, 8);
-       length = strlen(str);
-#ifdef OLD_STR_TO_KEY
-       if (length <= 8) {
-               for (i = 0; i < length; i++) {
-                       (*key2)[i] = (*key1)[i] = (str[i] << 1);
-               }
-       } else {
-               for (i = 0; i < length; i++) {
-                       if ((i/8) & 1)
-                               (*key2)[i % 8] ^= (str[i] << 1);
-                       else
-                               (*key1)[i % 8] ^= (str[i] << 1);
-               }
-       }
-#else /* MIT COMPATIBLE */
-       for (i = 0; i < length; i++) {
-               j = str[i];
-               if ((i % 32) < 16) {
-                       if ((i % 16) < 8)
-                               (*key1)[i % 8] ^= (j << 1);
-                       else
-                               (*key2)[i % 8] ^= (j << 1);
-               } else {
-                       j = ((j << 4) & 0xf0)|((j >> 4) & 0x0f);
-                       j = ((j << 2) & 0xcc)|((j >> 2) & 0x33);
-                       j = ((j << 1) & 0xaa)|((j >> 1) & 0x55);
-                       if ((i % 16) < 8)
-                               (*key1)[7 - (i % 8)] ^= j;
-                       else
-                               (*key2)[7 - (i % 8)] ^= j;
-               }
-       }
-       if (length <= 8)
-               memcpy(key2, key1, 8);
-#endif
-       DES_set_odd_parity(key1);
-       DES_set_odd_parity(key2);
-#ifdef EXPERIMENTAL_STR_TO_STRONG_KEY
-       if (DES_is_weak_key(key1))
-               (*key1)[7] ^= 0xF0;
-       DES_set_key(key1, &ks);
-#else
-       DES_set_key_unchecked(key1, &ks);
-#endif
-       DES_cbc_cksum((const unsigned char *)str, key1, length, &ks, key1);
-#ifdef EXPERIMENTAL_STR_TO_STRONG_KEY
-       if (DES_is_weak_key(key2))
-               (*key2)[7] ^= 0xF0;
-       DES_set_key(key2, &ks);
-#else
-       DES_set_key_unchecked(key2, &ks);
-#endif
-       DES_cbc_cksum((const unsigned char *)str, key2, length, &ks, key2);
-       explicit_bzero(&ks, sizeof(ks));
-       DES_set_odd_parity(key1);
-       DES_set_odd_parity(key2);
-}
-LCRYPTO_ALIAS(DES_string_to_2keys);
diff --git a/lib/libcrypto/des/xcbc_enc.c b/lib/libcrypto/des/xcbc_enc.c
deleted file mode 100644 (file)
index 90607ca..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/* $OpenBSD: xcbc_enc.c,v 1.13 2024/03/29 01:47:29 joshua Exp $ */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include "des_local.h"
-
-/* RSA's DESX */
-
-void
-DES_xcbc_encrypt(const unsigned char *in, unsigned char *out,
-    long length, DES_key_schedule *schedule,
-    DES_cblock *ivec, const_DES_cblock *inw,
-    const_DES_cblock *outw, int enc)
-{
-       DES_LONG tin0, tin1;
-       DES_LONG tout0, tout1, xor0, xor1;
-       DES_LONG inW0, inW1, outW0, outW1;
-       const unsigned char *in2;
-       long l = length;
-       DES_LONG tin[2];
-       unsigned char *iv;
-
-       in2 = &(*inw)[0];
-       c2l(in2, inW0);
-       c2l(in2, inW1);
-       in2 = &(*outw)[0];
-       c2l(in2, outW0);
-       c2l(in2, outW1);
-
-       iv = &(*ivec)[0];
-
-       if (enc) {
-               c2l(iv, tout0);
-               c2l(iv, tout1);
-               for (l -= 8; l >= 0; l -= 8) {
-                       c2l(in, tin0);
-                       c2l(in, tin1);
-                       tin0 ^= tout0 ^ inW0;
-                       tin[0] = tin0;
-                       tin1 ^= tout1 ^ inW1;
-                       tin[1] = tin1;
-                       DES_encrypt1(tin, schedule, DES_ENCRYPT);
-                       tout0 = tin[0] ^ outW0;
-                       l2c(tout0, out);
-                       tout1 = tin[1] ^ outW1;
-                       l2c(tout1, out);
-               }
-               if (l != -8) {
-                       c2ln(in, tin0, tin1, l + 8);
-                       tin0 ^= tout0 ^ inW0;
-                       tin[0] = tin0;
-                       tin1 ^= tout1 ^ inW1;
-                       tin[1] = tin1;
-                       DES_encrypt1(tin, schedule, DES_ENCRYPT);
-                       tout0 = tin[0] ^ outW0;
-                       l2c(tout0, out);
-                       tout1 = tin[1] ^ outW1;
-                       l2c(tout1, out);
-               }
-               iv = &(*ivec)[0];
-               l2c(tout0, iv);
-               l2c(tout1, iv);
-       } else {
-               c2l(iv, xor0);
-               c2l(iv, xor1);
-               for (l -= 8; l > 0; l -= 8) {
-                       c2l(in, tin0);
-                       tin[0] = tin0 ^ outW0;
-                       c2l(in, tin1);
-                       tin[1] = tin1 ^ outW1;
-                       DES_encrypt1(tin, schedule, DES_DECRYPT);
-                       tout0 = tin[0] ^ xor0 ^ inW0;
-                       tout1 = tin[1] ^ xor1 ^ inW1;
-                       l2c(tout0, out);
-                       l2c(tout1, out);
-                       xor0 = tin0;
-                       xor1 = tin1;
-               }
-               if (l != -8) {
-                       c2l(in, tin0);
-                       tin[0] = tin0 ^ outW0;
-                       c2l(in, tin1);
-                       tin[1] = tin1 ^ outW1;
-                       DES_encrypt1(tin, schedule, DES_DECRYPT);
-                       tout0 = tin[0] ^ xor0 ^ inW0;
-                       tout1 = tin[1] ^ xor1 ^ inW1;
-                       l2cn(tout0, tout1, out, l + 8);
-                       xor0 = tin0;
-                       xor1 = tin1;
-               }
-
-               iv = &(*ivec)[0];
-               l2c(xor0, iv);
-               l2c(xor1, iv);
-       }
-       tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
-       inW0 = inW1 = outW0 = outW1 = 0;
-       tin[0] = tin[1] = 0;
-}
-LCRYPTO_ALIAS(DES_xcbc_encrypt);