-/* 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)
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