Fourth phase EVP revision.
[openssl.git] / crypto / evp / e_rc2.c
similarity index 83%
rename from crypto/evp/e_cbc_r2.c
rename to crypto/evp/e_rc2.c
index 3552b67417ccff35683031054ac2af722296d0d1..4c3bf1e64993af41e5995bd35f4f41b99e0df98d 100644 (file)
@@ -1,4 +1,4 @@
-/* crypto/evp/e_cbc_r2.c */
+/* crypto/evp/e_rc2.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 rc2_cbc_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
+static int rc2_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
        unsigned char *iv,int enc);
-static int rc2_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
-       unsigned char *in, unsigned int inl);
 static int rc2_meth_to_magic(const EVP_CIPHER *e);
 static EVP_CIPHER *rc2_magic_to_meth(int i);
 static int rc2_set_asn1_type_and_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
 static int rc2_get_asn1_type_and_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
 
+IMPLEMENT_BLOCK_CIPHER(rc2, rc2.ks, RC2, rc2, NID_rc2,
+                       8,
+                       EVP_RC2_KEY_SIZE, 8,
+                       EVP_CIPH_VARIABLE_LENGTH, rc2_init_key, NULL,
+                       rc2_set_asn1_type_and_iv, rc2_get_asn1_type_and_iv, NULL)
+
 #define RC2_40_MAGIC   0xa0
 #define RC2_64_MAGIC   0x78
 #define RC2_128_MAGIC  0x3a
 
-static EVP_CIPHER r2_cbc_cipher=
-       {
-       NID_rc2_cbc,
-       8,EVP_RC2_KEY_SIZE,8,
-       EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH,
-       rc2_cbc_init_key,
-       rc2_cbc_cipher,
-       NULL,
-       sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+
-               sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc2_ks)),
-       rc2_set_asn1_type_and_iv,
-       rc2_get_asn1_type_and_iv,
-       NULL
-       };
-
 static EVP_CIPHER r2_64_cbc_cipher=
        {
        NID_rc2_64_cbc,
        8,8 /* 64 bit */,8,
        EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH,
-       rc2_cbc_init_key,
+       rc2_init_key,
        rc2_cbc_cipher,
        NULL,
        sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+
-               sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc2_ks)),
+               sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc2)),
        rc2_set_asn1_type_and_iv,
        rc2_get_asn1_type_and_iv,
+       NULL,
        NULL
        };
 
@@ -111,21 +102,17 @@ static EVP_CIPHER r2_40_cbc_cipher=
        NID_rc2_40_cbc,
        8,5 /* 40 bit */,8,
        EVP_CIPH_CBC_MODE | EVP_CIPH_VARIABLE_LENGTH,
-       rc2_cbc_init_key,
+       rc2_init_key,
        rc2_cbc_cipher,
        NULL,
        sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+
-               sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc2_ks)),
+               sizeof((((EVP_CIPHER_CTX *)NULL)->c.rc2)),
        rc2_set_asn1_type_and_iv,
        rc2_get_asn1_type_and_iv,
+       NULL,
        NULL
        };
 
-EVP_CIPHER *EVP_rc2_cbc(void)
-       {
-       return(&r2_cbc_cipher);
-       }
-
 EVP_CIPHER *EVP_rc2_64_cbc(void)
        {
        return(&r2_64_cbc_cipher);
@@ -136,24 +123,14 @@ EVP_CIPHER *EVP_rc2_40_cbc(void)
        return(&r2_40_cbc_cipher);
        }
        
-static int rc2_cbc_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
+static int rc2_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
             unsigned char *iv, int enc)
        {
-       RC2_set_key(&(ctx->c.rc2_ks),EVP_CIPHER_CTX_key_length(ctx),
+       RC2_set_key(&(ctx->c.rc2.ks),EVP_CIPHER_CTX_key_length(ctx),
                        key,EVP_CIPHER_key_length(ctx->cipher)*8);
        return 1;
        }
 
-static int rc2_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
-            unsigned char *in, unsigned int inl)
-       {
-       RC2_cbc_encrypt(
-               in,out,(long)inl,
-               &(ctx->c.rc2_ks),&(ctx->iv[0]),
-               ctx->encrypt);
-       return 1;
-       }
-
 static int rc2_meth_to_magic(const EVP_CIPHER *e)
        {
        int i;
@@ -198,7 +175,7 @@ static int rc2_get_asn1_type_and_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
                        {
                        EVP_CIPHER_CTX_cipher(c)=e;
                        EVP_CIPHER_CTX_set_key_length(c, EVP_CIPHER_key_length(c));
-                       rc2_cbc_init_key(c,NULL,NULL,1);
+                       rc2_init_key(c,NULL,NULL,1);
                        }
                }
        return(i);