-/* 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
};
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);
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;
{
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);