aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2015-10-23 19:10:24 +0100
committerDr. Stephen Henson <steve@openssl.org>2015-12-09 22:09:18 +0000
commit0d6ff6d3d1a19d491ec9a002b808cec23ca12107 (patch)
tree27f1758d36546c76f4ffef22e41d85788139bc63
parent5196641617ceef00af51128eb1db0083097d95e7 (diff)
downloadopenssl-0d6ff6d3d1a19d491ec9a002b808cec23ca12107.tar.gz
EC_KEY_METHOD init and finish support
Reviewed-by: Richard Levitte <levitte@openssl.org>
-rw-r--r--crypto/ec/ec_key.c3
-rw-r--r--crypto/ec/ec_kmeth.c7
-rw-r--r--crypto/ec/ec_lcl.h2
3 files changed, 11 insertions, 1 deletions
diff --git a/crypto/ec/ec_key.c b/crypto/ec/ec_key.c
index cb6bcdcbf2..e2681c9acb 100644
--- a/crypto/ec/ec_key.c
+++ b/crypto/ec/ec_key.c
@@ -107,6 +107,9 @@ void EC_KEY_free(EC_KEY *r)
}
#endif
+ if (r->meth->finish)
+ r->meth->finish(r);
+
#ifndef OPENSSL_NO_ENGINE
if (r->engine)
ENGINE_finish(r->engine);
diff --git a/crypto/ec/ec_kmeth.c b/crypto/ec/ec_kmeth.c
index 4904989d63..77b4443fa3 100644
--- a/crypto/ec/ec_kmeth.c
+++ b/crypto/ec/ec_kmeth.c
@@ -63,6 +63,7 @@
static const EC_KEY_METHOD openssl_ec_key_method = {
"OpenSSL EC_KEY method",
0,
+ 0,0,
ossl_ec_key_gen,
ossl_ecdh_compute_key
};
@@ -120,7 +121,11 @@ EC_KEY *EC_KEY_new_method(ENGINE *engine)
ret->version = 1;
ret->conv_form = POINT_CONVERSION_UNCOMPRESSED;
ret->references = 1;
- return (ret);
+ if (ret->meth->init && ret->meth->init(ret) == 0) {
+ EC_KEY_free(ret);
+ return NULL;
+ }
+ return ret;
}
int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
diff --git a/crypto/ec/ec_lcl.h b/crypto/ec/ec_lcl.h
index 1630b40060..3aaee31575 100644
--- a/crypto/ec/ec_lcl.h
+++ b/crypto/ec/ec_lcl.h
@@ -560,6 +560,8 @@ const EC_METHOD *EC_GFp_nistz256_method(void);
struct ec_key_method_st {
const char *name;
int32_t flags;
+ int (*init)(EC_KEY *key);
+ void (*finish)(EC_KEY *key);
int (*keygen)(EC_KEY *key);
int (*compute_key)(void *out, size_t outlen, const EC_POINT *pub_key,
EC_KEY *ecdh,