Unifdef DES_PTR, DES_RISC1 and DES_RISC2.
authorjsing <jsing@openbsd.org>
Sat, 31 Aug 2024 16:17:13 +0000 (16:17 +0000)
committerjsing <jsing@openbsd.org>
Sat, 31 Aug 2024 16:17:13 +0000 (16:17 +0000)
These are all go fast knobs that convolute the code and can be dangerous.
Lets presume that we have a modern and somewhat capable C compiler instead.

ok tb@

lib/libcrypto/des/des_enc.c
lib/libcrypto/des/des_fcrypt.c
lib/libcrypto/des/des_local.h

index a2f07ba..deec50b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: des_enc.c,v 1.19 2024/08/31 16:04:22 jsing Exp $ */
+/* $OpenBSD: des_enc.c,v 1.20 2024/08/31 16:17:13 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -210,9 +210,6 @@ void
 DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
 {
        DES_LONG l, r, t, u;
-#ifdef DES_PTR
-       const unsigned char *des_SP = (const unsigned char *)DES_SPtrans;
-#endif
 #ifndef DES_UNROLL
        int i;
 #endif
@@ -301,9 +298,6 @@ void
 DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc)
 {
        DES_LONG l, r, t, u;
-#ifdef DES_PTR
-       const unsigned char *des_SP = (const unsigned char *)DES_SPtrans;
-#endif
 #ifndef DES_UNROLL
        int i;
 #endif
index 4d06a79..049040b 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: des_fcrypt.c,v 1.2 2024/08/31 16:04:22 jsing Exp $ */
+/* $OpenBSD: des_fcrypt.c,v 1.3 2024/08/31 16:17:13 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -89,9 +89,6 @@ 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;
index c371284..9a0d366 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: des_local.h,v 1.3 2024/05/24 19:21:58 tb Exp $ */
+/* $OpenBSD: des_local.h,v 1.4 2024/08/31 16:17:13 jsing Exp $ */
 /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -141,154 +141,6 @@ ROTATE(uint32_t a, uint32_t n)
        t=R^s[S+1]
 #endif
 
-/* The changes to this macro may help or hinder, depending on the
- * compiler and the architecture.  gcc2 always seems to do well :-).
- * Inspired by Dana How <how@isl.stanford.edu>
- * DO NOT use the alternative version on machines with 8 byte longs.
- * It does not seem to work on the Alpha, even when DES_LONG is 4
- * bytes, probably an issue of accessing non-word aligned objects :-( */
-#ifdef DES_PTR
-
-/* It recently occurred to me that 0^0^0^0^0^0^0 == 0, so there
- * is no reason to not xor all the sub items together.  This potentially
- * saves a register since things can be xored directly into L */
-
-#if defined(DES_RISC1) || defined(DES_RISC2)
-#ifdef DES_RISC1
-#define D_ENCRYPT(LL,R,S) {                                            \
-       unsigned int u1,u2,u3;                                          \
-       LOAD_DATA(R,S,u,t,E0,E1,u1);                                    \
-       u2=(int)u>>8L;                                                  \
-       u1=(int)u&0xfc;                                                 \
-       u2&=0xfc;                                                       \
-       t=ROTATE(t,4);                                                  \
-       u>>=16L;                                                        \
-       LL^= *(const DES_LONG *)(des_SP      +u1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x200+u2);                      \
-       u3=(int)(u>>8L);                                                \
-       u1=(int)u&0xfc;                                                 \
-       u3&=0xfc;                                                       \
-       LL^= *(const DES_LONG *)(des_SP+0x400+u1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x600+u3);                      \
-       u2=(int)t>>8L;                                                  \
-       u1=(int)t&0xfc;                                                 \
-       u2&=0xfc;                                                       \
-       t>>=16L;                                                        \
-       LL^= *(const DES_LONG *)(des_SP+0x100+u1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x300+u2);                      \
-       u3=(int)t>>8L;                                                  \
-       u1=(int)t&0xfc;                                                 \
-       u3&=0xfc;                                                       \
-       LL^= *(const DES_LONG *)(des_SP+0x500+u1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x700+u3); }
-#endif
-#ifdef DES_RISC2
-#define D_ENCRYPT(LL,R,S) {                                            \
-       unsigned int u1,u2,s1,s2;                                       \
-       LOAD_DATA(R,S,u,t,E0,E1,u1);                                    \
-       u2=(int)u>>8L;                                                  \
-       u1=(int)u&0xfc;                                                 \
-       u2&=0xfc;                                                       \
-       t=ROTATE(t,4);                                                  \
-       LL^= *(const DES_LONG *)(des_SP      +u1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x200+u2);                      \
-       s1=(int)(u>>16L);                                               \
-       s2=(int)(u>>24L);                                               \
-       s1&=0xfc;                                                       \
-       s2&=0xfc;                                                       \
-       LL^= *(const DES_LONG *)(des_SP+0x400+s1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x600+s2);                      \
-       u2=(int)t>>8L;                                                  \
-       u1=(int)t&0xfc;                                                 \
-       u2&=0xfc;                                                       \
-       LL^= *(const DES_LONG *)(des_SP+0x100+u1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x300+u2);                      \
-       s1=(int)(t>>16L);                                               \
-       s2=(int)(t>>24L);                                               \
-       s1&=0xfc;                                                       \
-       s2&=0xfc;                                                       \
-       LL^= *(const DES_LONG *)(des_SP+0x500+s1);                      \
-       LL^= *(const DES_LONG *)(des_SP+0x700+s2); }
-#endif
-#else
-#define D_ENCRYPT(LL,R,S) {                                            \
-       LOAD_DATA_tmp(R,S,u,t,E0,E1);                                   \
-       t=ROTATE(t,4);                                                  \
-       LL^=                                                            \
-       *(const DES_LONG *)(des_SP      +((u     )&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x200+((u>> 8L)&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x400+((u>>16L)&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x600+((u>>24L)&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x100+((t     )&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x300+((t>> 8L)&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x500+((t>>16L)&0xfc))^              \
-       *(const DES_LONG *)(des_SP+0x700+((t>>24L)&0xfc)); }
-#endif
-
-#else /* original version */
-
-#if defined(DES_RISC1) || defined(DES_RISC2)
-#ifdef DES_RISC1
-#define D_ENCRYPT(LL,R,S) {                                            \
-       unsigned int u1,u2,u3;                                          \
-       LOAD_DATA(R,S,u,t,E0,E1,u1);                                    \
-       u>>=2L;                                                         \
-       t=ROTATE(t,6);                                                  \
-       u2=(int)u>>8L;                                                  \
-       u1=(int)u&0x3f;                                                 \
-       u2&=0x3f;                                                       \
-       u>>=16L;                                                        \
-       LL^=DES_SPtrans[0][u1];                                         \
-       LL^=DES_SPtrans[2][u2];                                         \
-       u3=(int)u>>8L;                                                  \
-       u1=(int)u&0x3f;                                                 \
-       u3&=0x3f;                                                       \
-       LL^=DES_SPtrans[4][u1];                                         \
-       LL^=DES_SPtrans[6][u3];                                         \
-       u2=(int)t>>8L;                                                  \
-       u1=(int)t&0x3f;                                                 \
-       u2&=0x3f;                                                       \
-       t>>=16L;                                                        \
-       LL^=DES_SPtrans[1][u1];                                         \
-       LL^=DES_SPtrans[3][u2];                                         \
-       u3=(int)t>>8L;                                                  \
-       u1=(int)t&0x3f;                                                 \
-       u3&=0x3f;                                                       \
-       LL^=DES_SPtrans[5][u1];                                         \
-       LL^=DES_SPtrans[7][u3]; }
-#endif
-#ifdef DES_RISC2
-#define D_ENCRYPT(LL,R,S) {                                            \
-       unsigned int u1,u2,s1,s2;                                       \
-       LOAD_DATA(R,S,u,t,E0,E1,u1);                                    \
-       u>>=2L;                                                         \
-       t=ROTATE(t,6);                                                  \
-       u2=(int)u>>8L;                                                  \
-       u1=(int)u&0x3f;                                                 \
-       u2&=0x3f;                                                       \
-       LL^=DES_SPtrans[0][u1];                                         \
-       LL^=DES_SPtrans[2][u2];                                         \
-       s1=(int)u>>16L;                                                 \
-       s2=(int)u>>24L;                                                 \
-       s1&=0x3f;                                                       \
-       s2&=0x3f;                                                       \
-       LL^=DES_SPtrans[4][s1];                                         \
-       LL^=DES_SPtrans[6][s2];                                         \
-       u2=(int)t>>8L;                                                  \
-       u1=(int)t&0x3f;                                                 \
-       u2&=0x3f;                                                       \
-       LL^=DES_SPtrans[1][u1];                                         \
-       LL^=DES_SPtrans[3][u2];                                         \
-       s1=(int)t>>16;                                                  \
-       s2=(int)t>>24L;                                                 \
-       s1&=0x3f;                                                       \
-       s2&=0x3f;                                                       \
-       LL^=DES_SPtrans[5][s1];                                         \
-       LL^=DES_SPtrans[7][s2]; }
-#endif
-
-#else
-
 #define D_ENCRYPT(LL,R,S) {                                            \
        LOAD_DATA_tmp(R,S,u,t,E0,E1);                                   \
        t=ROTATE(t,4);                                                  \
@@ -301,8 +153,6 @@ ROTATE(uint32_t a, uint32_t n)
                DES_SPtrans[3][(t>>10L)&0x3f]^                          \
                DES_SPtrans[5][(t>>18L)&0x3f]^                          \
                DES_SPtrans[7][(t>>26L)&0x3f]; }
-#endif
-#endif
 
        /* IP and FP
         * The problem is more of a geometric problem that random bit fiddling.