diff -u -r ./openssl-0.9.8/crypto/evp/evp_enc.c ./openssl-0.9.8_evp/crypto/evp/evp_enc.c
--- ./openssl-0.9.8/crypto/evp/evp_enc.c	2005-05-10 20:45:29.000000000 -0700
+++ ./openssl-0.9.8_evp/crypto/evp/evp_enc.c	2006-10-04 13:18:37.000000000 -0700
@@ -74,6 +74,21 @@
 	/* ctx->cipher=NULL; */
 	}
 
+EVP_CIPHER_CTX *EVP_CIPHER_CTX_create(void)
+	{
+        EVP_CIPHER_CTX *ctx=OPENSSL_malloc(sizeof *ctx);
+
+        EVP_CIPHER_CTX_init(ctx);
+
+        return ctx;
+	}
+
+void EVP_CIPHER_CTX_destroy(EVP_CIPHER_CTX *ctx)
+        {
+        EVP_CIPHER_CTX_cleanup(ctx);
+        OPENSSL_free(ctx);
+        }
+
 
 int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
 	     const unsigned char *key, const unsigned char *iv, int enc)
diff -u -r ./openssl-0.9.8/crypto/evp/evp.h ./openssl-0.9.8_evp/crypto/evp/evp.h
--- ./openssl-0.9.8/crypto/evp/evp.h	2005-05-16 03:11:01.000000000 -0700
+++ ./openssl-0.9.8_evp/crypto/evp/evp.h	2006-10-04 13:24:27.000000000 -0700
@@ -580,6 +580,8 @@
 
 void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
+EVP_CIPHER_CTX	*EVP_CIPHER_CTX_create(void);
+void EVP_CIPHER_CTX_destroy(EVP_CIPHER_CTX *ctx);
 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
Only in ./openssl-0.9.8_evp: cscope.out
diff -u -r ./openssl-0.9.8/doc/crypto/EVP_EncryptInit.pod ./openssl-0.9.8_evp/doc/crypto/EVP_EncryptInit.pod
--- ./openssl-0.9.8/doc/crypto/EVP_EncryptInit.pod	2005-04-15 09:01:35.000000000 -0700
+++ ./openssl-0.9.8_evp/doc/crypto/EVP_EncryptInit.pod	2006-10-04 13:29:14.000000000 -0700
@@ -2,7 +2,8 @@
 
 =head1 NAME
 
-EVP_CIPHER_CTX_init, EVP_EncryptInit_ex, EVP_EncryptUpdate,
+EVP_CIPHER_CTX_init, EVP_CIPHER_CTX_create, EVP_CIPHER_CTX_destroy,
+EVP_EncryptInit_ex, EVP_EncryptUpdate,
 EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptUpdate,
 EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherUpdate,
 EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length,
@@ -23,6 +24,8 @@
  #include <openssl/evp.h>
 
  void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
+ EVP_CIPHER_CTX *EVP_CIPHER_CTX_create(void);
+ void EVP_CIPHER_CTX_destroy(EVP_CIPHER_CTX *a);
 
  int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 	 ENGINE *impl, unsigned char *key, unsigned char *iv);
@@ -98,6 +101,10 @@
 
 EVP_CIPHER_CTX_init() initializes cipher contex B<ctx>.
 
+EVP_CIPHER_CTX_create() allocates and initializes a cipher context.
+
+EVP_CIPHER_CTX_destroy() cleans up and deallocates cipher context B<ctx>.
+
 EVP_EncryptInit_ex() sets up cipher context B<ctx> for encryption
 with cipher B<type> from ENGINE B<impl>. B<ctx> must be initialized
 before calling this function. B<type> is normally supplied
