Fourth phase EVP revision.
[openssl.git] / crypto / evp / e_des3.c
similarity index 69%
rename from crypto/evp/e_ecb_3d.c
rename to crypto/evp/e_des3.c
index f024b0068fb2adfaa8ef40d086903d580ff348d8..c11c2b68569693d18107b83a858854271c53cde8 100644 (file)
@@ -1,4 +1,4 @@
-/* crypto/evp/e_ecb_3d.c */
+/* crypto/evp/e_des3.c */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
 #include "cryptlib.h"
 #include <openssl/evp.h>
 #include <openssl/objects.h>
+#include "evp_locl.h"
 
 static int des_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
        unsigned char *iv,int enc);
+
 static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
        unsigned char *iv,int enc);
-static int des_ede_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
-       unsigned char *in, unsigned int inl);
-static EVP_CIPHER d_ede_cipher2=
-       {
-       NID_des_ede,
-       8,16,0,
-       EVP_CIPH_ECB_MODE,
-       des_ede_init_key,
-       des_ede_cipher,
-       NULL,
-       sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+
-               sizeof((((EVP_CIPHER_CTX *)NULL)->c.des_ede)),
-       NULL,
-       NULL,
-       NULL
-       };
-
-static EVP_CIPHER d_ede3_cipher3=
-       {
-       NID_des_ede3,
-       8,24,0,
-       EVP_CIPH_ECB_MODE,
-       des_ede3_init_key,
-       des_ede_cipher,
-       NULL,
-       sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+
-               sizeof((((EVP_CIPHER_CTX *)NULL)->c.des_ede)),
-       NULL,
-       NULL,
-       NULL
-       };
 
-EVP_CIPHER *EVP_des_ede(void)
-       {
-       return(&d_ede_cipher2);
-       }
+/* Because of various casts and different args can't use IMPLEMENT_BLOCK_CIPHER */
 
-EVP_CIPHER *EVP_des_ede3(void)
-       {
-       return(&d_ede3_cipher3);
-       }
+static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, unsigned char *in, unsigned int inl)
+{
+       BLOCK_CIPHER_ecb_loop()
+               des_ecb3_encrypt((des_cblock *)(in + i), (des_cblock *)(out + i), 
+                       ctx->c.des_ede.ks1, ctx->c.des_ede.ks2, ctx->c.des_ede.ks3,
+                        ctx->encrypt);
+       return 1;
+}
+
+static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, unsigned char *in, unsigned int inl)
+{
+       des_ede3_ofb64_encrypt(in, out, (long)inl,
+                       ctx->c.des_ede.ks1, ctx->c.des_ede.ks2, ctx->c.des_ede.ks3,
+                                                               (des_cblock *)ctx->iv, &ctx->num);
+       return 1;
+}
+
+static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, unsigned char *in, unsigned int inl)
+{
+       des_ede3_cbc_encrypt(in, out, (long)inl,
+                       ctx->c.des_ede.ks1, ctx->c.des_ede.ks2, ctx->c.des_ede.ks3,
+                                                               (des_cblock *)ctx->iv, ctx->encrypt);
+       return 1;
+}
+
+static int des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, unsigned char *in, unsigned int inl)
+{
+       des_ede3_cfb64_encrypt(in, out, (long)inl, 
+                       ctx->c.des_ede.ks1, ctx->c.des_ede.ks2, ctx->c.des_ede.ks3,
+                                       (des_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
+       return 1;
+}
+
+#define NID_des_ede_ecb NID_des_ede
+
+BLOCK_CIPHER_defs(des_ede, des_ede, NID_des_ede, 8, 16, 8,
+                       0, des_ede_init_key, NULL, 
+                       EVP_CIPHER_set_asn1_iv,
+                       EVP_CIPHER_get_asn1_iv,
+                       NULL)
+
+#define NID_des_ede3_ecb NID_des_ede3
+#define des_ede3_cfb_cipher des_ede_cfb_cipher
+#define des_ede3_ofb_cipher des_ede_ofb_cipher
+#define des_ede3_cbc_cipher des_ede_cbc_cipher
+#define des_ede3_ecb_cipher des_ede_ecb_cipher
+
+BLOCK_CIPHER_defs(des_ede3, des_ede, NID_des_ede3, 8, 24, 8,
+                       0, des_ede3_init_key, NULL, 
+                       EVP_CIPHER_set_asn1_iv,
+                       EVP_CIPHER_get_asn1_iv,
+                       NULL)
 
 static int des_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
             unsigned char *iv, int enc)
@@ -129,32 +145,17 @@ static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
        des_set_key_unchecked(&deskey[0],ctx->c.des_ede.ks1);
        des_set_key_unchecked(&deskey[1],ctx->c.des_ede.ks2);
        des_set_key_unchecked(&deskey[2],ctx->c.des_ede.ks3);
-       return 1;
-       }
 
-static int des_ede_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
-            unsigned char *in, unsigned int inl)
-       {
-       unsigned int i;
-       des_cblock *output   /* = (des_cblock *)out */;
-       des_cblock *input    /* = (des_cblock *)in */;
-
-       if (inl < 8) return 1;
-       inl-=8;
-       for (i=0; i<=inl; i+=8)
-               {
-               output = (des_cblock *)(out + i);
-               input = (des_cblock *)(in + i);
-
-               des_ecb3_encrypt(input,output,
-                       ctx->c.des_ede.ks1,
-                       ctx->c.des_ede.ks2,
-                       ctx->c.des_ede.ks3,
-                       ctx->encrypt);
-
-               /* output++; */
-               /* input++; */
-               }
        return 1;
        }
+
+EVP_CIPHER *EVP_des_ede(void)
+{
+       return &des_ede_ecb;
+}
+
+EVP_CIPHER *EVP_des_ede3(void)
+{
+       return &des_ede3_ecb;
+}
 #endif