Fix bug in DSA, EC methods.
authorDr. Stephen Henson <steve@openssl.org>
Thu, 23 Mar 2006 14:04:39 +0000 (14:04 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Thu, 23 Mar 2006 14:04:39 +0000 (14:04 +0000)
crypto/dsa/dsa_ameth.c
crypto/ec/ec_ameth.c

index 26e274f859619bda966d8355a98049215abc3a2d..ed0ab2b712c8be5688e27638ea7acc2df1540aa4 100644 (file)
@@ -108,7 +108,7 @@ static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
                }
 
        ASN1_INTEGER_free(public_key);
                }
 
        ASN1_INTEGER_free(public_key);
-
+       EVP_PKEY_assign_DSA(pkey, dsa);
        return 1;
 
        err:
        return 1;
 
        err:
@@ -139,6 +139,7 @@ static int dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
                        DSAerr(DSA_F_DSA_PUB_ENCODE, ERR_R_MALLOC_FAILURE);
                        goto err;
                        }
                        DSAerr(DSA_F_DSA_PUB_ENCODE, ERR_R_MALLOC_FAILURE);
                        goto err;
                        }
+               pval = str;
                ptype = V_ASN1_SEQUENCE;
                }
        else
                ptype = V_ASN1_SEQUENCE;
                }
        else
index da437faf2bfe43ce19152817d6e38c83f14dd514..4a136619ab92a7b83367812eeb3195ae017d99c3 100644 (file)
@@ -445,7 +445,6 @@ static int do_EC_KEY_print(BIO *bp, const EC_KEY *x, int off, int ktype)
                goto err;
                }
 
                goto err;
                }
 
-
        if (ktype > 0)
                {
                public_key = EC_KEY_get0_public_key(x);
        if (ktype > 0)
                {
                public_key = EC_KEY_get0_public_key(x);
@@ -455,15 +454,15 @@ static int do_EC_KEY_print(BIO *bp, const EC_KEY *x, int off, int ktype)
                        reason = ERR_R_EC_LIB;
                        goto err;
                        }
                        reason = ERR_R_EC_LIB;
                        goto err;
                        }
-               buf_len = (size_t)BN_num_bytes(pub_key);
+               if (pub_key)
+                       buf_len = (size_t)BN_num_bytes(pub_key);
                }
                }
-       else
 
        if (ktype == 2)
                {
 
        if (ktype == 2)
                {
-               if ((i = (size_t)BN_num_bytes(priv_key)) > buf_len)
-                       buf_len = i;
                priv_key = EC_KEY_get0_private_key(x);
                priv_key = EC_KEY_get0_private_key(x);
+               if (priv_key && (i = (size_t)BN_num_bytes(priv_key)) > buf_len)
+                       buf_len = i;
                }
        else
                priv_key = NULL;
                }
        else
                priv_key = NULL;