New functions to support opaque EVP_CIPHER_CTX handling.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 2 Dec 2005 13:46:39 +0000 (13:46 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 2 Dec 2005 13:46:39 +0000 (13:46 +0000)
CHANGES
crypto/evp/evp.h
crypto/evp/evp_enc.c

diff --git a/CHANGES b/CHANGES
index 33b98a418a9df01d4a6066ce7680a6f8e5198404..67cd88c1d898dac7ed24ce8975927ff098467c39 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
  Changes between 0.9.8a and 0.9.8b  [XX xxx XXXX]
 
+  *) New functions EVP_CIPHER_CTX_new() and EVP_CIPHER_CTX_free() to support
+     opaque EVP_CIPHER_CTX handling.
+     [Steve Henson]
+
   *) Several fixes and enhancements to the OID generation code. The old code
      sometimes allowed invalid OIDs (1.X for X >= 40 for example), couldn't
      handle numbers larger than ULONG_MAX, truncated printing and had a
index 0f5c9feeb4c563f4d8f335f7928af41dab615a25..3f90b175c720549387d1ed39ef92a1ed6c9f73fb 100644 (file)
@@ -580,6 +580,8 @@ int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
 
 void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);
+EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
+void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);
 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);
index 22cb6131be2e409027ed2006dabac213751fbaf0..f0b725def6dfed317dd216d91186a760f0bd4515 100644 (file)
@@ -74,6 +74,13 @@ void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx)
        /* ctx->cipher=NULL; */
        }
 
+EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void)
+       {
+       EVP_CIPHER_CTX *ctx=OPENSSL_malloc(sizeof *ctx);
+       if (ctx)
+               EVP_CIPHER_CTX_init(ctx);
+       return ctx;
+       }
 
 int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
             const unsigned char *key, const unsigned char *iv, int enc)
@@ -472,6 +479,15 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
        return(1);
        }
 
+void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx)
+       {
+       if (ctx)
+               {
+               EVP_CIPHER_CTX_cleanup(ctx);
+               OPENSSL_free(ctx);
+               }
+       }
+
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c)
        {
        if (c->cipher != NULL)