Redundant now as it's moved to ./Makefile.org.
[openssl.git] / crypto / des / ede_cbcm_enc.c
index 10ffcbc72963661139caef754c433c1a262f1cee..fa45aa272ba51f59ce83171d23534f123441627c 100644 (file)
 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
 #include "des_locl.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)
+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)
     {
     register DES_LONG tin0,tin1;
     register DES_LONG tout0,tout1,xor0,xor1,m0,m1;
@@ -78,8 +82,8 @@ void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
     DES_LONG tin[2];
     unsigned char *iv1,*iv2;
 
-    iv1=ivec1;
-    iv2=ivec2;
+    iv1 = &(*ivec1)[0];
+    iv2 = &(*ivec2)[0];
 
     if (enc)
        {
@@ -91,7 +95,7 @@ void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
            {
            tin[0]=m0;
            tin[1]=m1;
-           des_encrypt(tin,ks3,1);
+           DES_encrypt1(tin,ks3,1);
            m0=tin[0];
            m1=tin[1];
 
@@ -109,24 +113,24 @@ void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
 
            tin[0]=tin0;
            tin[1]=tin1;
-           des_encrypt(tin,ks1,1);
+           DES_encrypt1(tin,ks1,1);
            tin[0]^=m0;
            tin[1]^=m1;
-           des_encrypt(tin,ks2,0);
+           DES_encrypt1(tin,ks2,0);
            tin[0]^=m0;
            tin[1]^=m1;
-           des_encrypt(tin,ks1,1);
+           DES_encrypt1(tin,ks1,1);
            tout0=tin[0];
            tout1=tin[1];
 
            l2c(tout0,out);
            l2c(tout1,out);
            }
-       iv1=ivec1;
+       iv1=&(*ivec1)[0];
        l2c(m0,iv1);
        l2c(m1,iv1);
 
-       iv2=ivec2;
+       iv2=&(*ivec2)[0];
        l2c(tout0,iv2);
        l2c(tout1,iv2);
        }
@@ -142,7 +146,7 @@ void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
            {
            tin[0]=m0;
            tin[1]=m1;
-           des_encrypt(tin,ks3,1);
+           DES_encrypt1(tin,ks3,1);
            m0=tin[0];
            m1=tin[1];
 
@@ -154,13 +158,13 @@ void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
 
            tin[0]=tin0;
            tin[1]=tin1;
-           des_encrypt(tin,ks1,0);
+           DES_encrypt1(tin,ks1,0);
            tin[0]^=m0;
            tin[1]^=m1;
-           des_encrypt(tin,ks2,1);
+           DES_encrypt1(tin,ks2,1);
            tin[0]^=m0;
            tin[1]^=m1;
-           des_encrypt(tin,ks1,0);
+           DES_encrypt1(tin,ks1,0);
            tout0=tin[0];
            tout1=tin[1];
 
@@ -179,14 +183,15 @@ void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
            xor1=t1;
            }
 
-       iv1=ivec1;
+       iv1=&(*ivec1)[0];
        l2c(m0,iv1);
        l2c(m1,iv1);
 
-       iv2=ivec2;
+       iv2=&(*ivec2)[0];
        l2c(xor0,iv2);
        l2c(xor1,iv2);
        }
     tin0=tin1=tout0=tout1=xor0=xor1=0;
     tin[0]=tin[1]=0;
     }
+#endif