PKCS#8 fixes from stable branch.
authorDr. Stephen Henson <steve@openssl.org>
Sun, 4 Jul 2004 16:44:52 +0000 (16:44 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 4 Jul 2004 16:44:52 +0000 (16:44 +0000)
crypto/asn1/p5_pbev2.c
crypto/evp/evp_lib.c

index 91e1c8987d3504c6ce6feac8444573325c2df56a..1aff49570a4a0172f3f15e4869dba669266fa214 100644 (file)
@@ -1,6 +1,6 @@
 /* p5_pbev2.c */
 /* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
- * project 1999.
+ * project 1999-2004.
  */
 /* ====================================================================
  * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
@@ -113,8 +113,9 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
        if(!(scheme->parameter = ASN1_TYPE_new())) goto merr;
 
        /* Create random IV */
-       if (RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0)
-               goto err;
+       if (EVP_CIPHER_iv_length(cipher) &&
+               RAND_pseudo_bytes(iv, EVP_CIPHER_iv_length(cipher)) < 0)
+               goto err;
 
        EVP_CIPHER_CTX_init(&ctx);
 
@@ -123,6 +124,7 @@ X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
        if(EVP_CIPHER_param_to_asn1(&ctx, scheme->parameter) < 0) {
                ASN1err(ASN1_F_PKCS5_PBE2_SET,
                                        ASN1_R_ERROR_SETTING_CIPHER_PARAMS);
+               EVP_CIPHER_CTX_cleanup(&ctx);
                goto err;
        }
        EVP_CIPHER_CTX_cleanup(&ctx);
index b532c45de304ab2f9c8c4cb757d5df5dff833e74..36213964dd83c9e3f5f9a2560ff83a50d629864b 100644 (file)
@@ -68,7 +68,7 @@ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
        if (c->cipher->set_asn1_parameters != NULL)
                ret=c->cipher->set_asn1_parameters(c,type);
        else
-               ret=1;
+               ret=-1;
        return(ret);
        }
 
@@ -79,7 +79,7 @@ int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
        if (c->cipher->get_asn1_parameters != NULL)
                ret=c->cipher->get_asn1_parameters(c,type);
        else
-               ret=1;
+               ret=-1;
        return(ret);
        }