Unify DES library: ncbc_enc.c wasn't used, but its content was almost
authorBodo Möller <bodo@openssl.org>
Wed, 9 Jun 1999 17:28:30 +0000 (17:28 +0000)
committerBodo Möller <bodo@openssl.org>
Wed, 9 Jun 1999 17:28:30 +0000 (17:28 +0000)
duplicated in cbc_enc.c (without IV updating) and in des_enc.c

As pointed out by others on the openssl-dev list, des_cbc_encrypt (without
IV updating; defined in cbc_enc.c) exists only for historical reasons:
des_ncbc_encrypt should be used instead (and the caller does not have
to manually update the IV).

If des_cbc_enrypt is not needed for backwards compatibility, the
definition of des_ncbc_encrypt should be put back into des_enc.c, and
both cbc_enc.c and ncbc_enc.c can be deleted.

If des_cbc_encrypt *is* needed for backwards compatibility, its behaviour
obviously should not change (i.e., don't add IV updating).

crypto/des/cbc3_enc.c
crypto/des/cbc_enc.c
crypto/des/des_enc.c
crypto/des/ncbc_enc.c

index 50ed156c7a3b175d77a45cea5596bee121ef285f..3863a676d4141af4dbbca7960a8ccdc8926d0c26 100644 (file)
@@ -59,9 +59,9 @@
 #include "des_locl.h"
 
 /* HAS BUGS? DON'T USE - this is only present for use in des.c */
-void des_3cbc_encrypt(des_cblock (*input), des_cblock (*output), long length,
-            des_key_schedule ks1, des_key_schedule ks2, des_cblock (*iv1),
-            des_cblock (*iv2), int enc)
+void des_3cbc_encrypt(des_cblock *input, des_cblock *output, long length,
+            des_key_schedule ks1, des_key_schedule ks2, des_cblock *iv1,
+            des_cblock *iv2, int enc)
        {
        int off=((int)length-1)/8;
        long l8=((length+7)/8)*8;
index c9c881b12a43f7c3fb728f43a3045f2c8ea1ad36..677903ae4e324d0c115af8f582c0f7975c67be53 100644 (file)
  * [including the GNU Public Licence.]
  */
 
-#include "des_locl.h"
-
-/* Note that this is inconsistent with other DES functions in that it doesn't
-   update ivec */
-void des_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
-            des_key_schedule schedule, des_cblock *ivec, int enc)
-       {
-       register DES_LONG tin0,tin1;
-       register DES_LONG tout0,tout1,xor0,xor1;
-       register 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_encrypt((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_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT);
-                       tout0=tin[0]; l2c(tout0,out);
-                       tout1=tin[1]; l2c(tout1,out);
-                       }
-#if 0
-               iv = &(*ivec)[0];
-               l2c(tout0,iv);
-               l2c(tout1,iv);
-#endif
-               }
-       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_encrypt((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_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT);
-                       tout0=tin[0]^xor0;
-                       tout1=tin[1]^xor1;
-                       l2cn(tout0,tout1,out,l+8);
-               /*      xor0=tin0;
-                       xor1=tin1; */
-                       }
-#if 0
-               iv = &(*ivec)[0];
-               l2c(xor0,iv);
-               l2c(xor1,iv);
-#endif
-               }
-       tin0=tin1=tout0=tout1=xor0=xor1=0;
-       tin[0]=tin[1]=0;
-       }
+#define CBC_ENC_C__DONT_UPDATE_IV
 
+#include "ncbc_enc.c" /* des_cbc_encrypt */
index f47d2a02da3e67f7c6b63bdcf7335c784667eb01..772d9cb271141f028dafbf25c3564a29692a1296 100644 (file)
@@ -289,79 +289,8 @@ void des_decrypt3(DES_LONG *data, des_key_schedule ks1, des_key_schedule ks2,
 
 #ifndef DES_DEFAULT_OPTIONS
 
-void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
-            des_key_schedule schedule, des_cblock *ivec, int enc)
-       {
-       register DES_LONG tin0,tin1;
-       register DES_LONG tout0,tout1,xor0,xor1;
-       register 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_encrypt((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_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT);
-                       tout0=tin[0]; l2c(tout0,out);
-                       tout1=tin[1]; 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;
-                       c2l(in,tin1); tin[1]=tin1;
-                       des_encrypt((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_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT);
-                       tout0=tin[0]^xor0;
-                       tout1=tin[1]^xor1;
-                       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;
-       tin[0]=tin[1]=0;
-       }
+#undef CBC_ENC_C__DONT_UPDATE_IV
+#include "ncbc_enc.c" /* des_ncbc_enrypt */
 
 void des_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
             long length, des_key_schedule ks1, des_key_schedule ks2,
index a13e4fc22baa97f88e41dc5f626bfb1b3acb2589..e0e67a417d5fbb27a779574560ce0bed7d8f7e3f 100644 (file)
 
 #include "des_locl.h"
 
-void des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length,
-            des_key_schedule schedule, des_cblock (*ivec), int enc)
+#ifdef CBC_ENC_C__DONT_UPDATE_IV
+void des_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+            des_key_schedule schedule, des_cblock *ivec, int enc)
+#else
+void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+            des_key_schedule schedule, des_cblock *ivec, int enc)
+#endif
        {
        register DES_LONG tin0,tin1;
        register DES_LONG tout0,tout1,xor0,xor1;
-       register unsigned char *in,*out;
        register long l=length;
        DES_LONG tin[2];
        unsigned char *iv;
 
-       in=(unsigned char *)input;
-       out=(unsigned char *)output;
-       iv=(unsigned char *)ivec;
+       iv = &(*ivec)[0];
 
        if (enc)
                {
@@ -95,9 +97,11 @@ void des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length,
                        tout0=tin[0]; l2c(tout0,out);
                        tout1=tin[1]; l2c(tout1,out);
                        }
-               iv=(unsigned char *)ivec;
+#ifndef CBC_ENC_C__DONT_UPDATE_IV
+               iv = &(*ivec)[0];
                l2c(tout0,iv);
                l2c(tout1,iv);
+#endif
                }
        else
                {
@@ -115,11 +119,25 @@ void des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length,
                        xor0=tin0;
                        xor1=tin1;
                        }
-               iv=(unsigned char *)ivec;
+               if (l != -8)
+                       {
+                       c2l(in,tin0); tin[0]=tin0;
+                       c2l(in,tin1); tin[1]=tin1;
+                       des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT);
+                       tout0=tin[0]^xor0;
+                       tout1=tin[1]^xor1;
+                       l2cn(tout0,tout1,out,l+8);
+#ifndef CBC_ENC_C__DONT_UPDATE_IV
+                       xor0=tin0;
+                       xor1=tin1;
+#endif
+                       }
+#ifndef CBC_ENC_C__DONT_UPDATE_IV 
+               iv = &(*ivec)[0];
                l2c(xor0,iv);
                l2c(xor1,iv);
+#endif
                }
        tin0=tin1=tout0=tout1=xor0=xor1=0;
        tin[0]=tin[1]=0;
        }
-