fixed crash in openssl private_key->get_public_key(), using encode/load workaround
authorMartin Willi <martin@strongswan.org>
Mon, 8 Jun 2009 16:59:04 +0000 (18:59 +0200)
committerMartin Willi <martin@strongswan.org>
Tue, 9 Jun 2009 09:03:35 +0000 (11:03 +0200)
src/libstrongswan/plugins/openssl/openssl_ec_public_key.c

index 4f82602..780e675 100644 (file)
@@ -329,24 +329,6 @@ bool openssl_ec_public_key_build_id(EC_KEY *ec, identification_t **keyid,
 }
 
 /**
- * Create a public key from BIGNUM values, used in openssl_ec_private_key.c
- */
-openssl_ec_public_key_t *openssl_ec_public_key_create_from_private_key(EC_KEY *ec)
-{
-       private_openssl_ec_public_key_t *this = openssl_ec_public_key_create_empty();
-       
-       this->ec = EC_KEY_new();
-       EC_KEY_set_public_key(this->ec, EC_KEY_get0_public_key(ec));
-       
-       if (!openssl_ec_public_key_build_id(this->ec, &this->keyid, &this->keyid_info))
-       {
-               destroy(this);
-               return NULL;
-       }
-       return &this->public;
-}
-
-/**
  * Load a public key from an ASN1 encoded blob
  */
 static openssl_ec_public_key_t *load(chunk_t blob)
@@ -372,6 +354,14 @@ static openssl_ec_public_key_t *load(chunk_t blob)
        return &this->public;
 }
 
+/**
+ * Create a public key from BIGNUM values, used in openssl_ec_private_key.c
+ */
+openssl_ec_public_key_t *openssl_ec_public_key_create_from_private_key(EC_KEY *ec)
+{
+       return (openssl_ec_public_key_t*)load(get_encoding_full(ec));
+}
+
 typedef struct private_builder_t private_builder_t;
 /**
  * Builder implementation for key loading