Reviewed-by: Richard Levitte <levitte@openssl.org>
}
#endif
+ if (r->meth->finish)
+ r->meth->finish(r);
+
#ifndef OPENSSL_NO_ENGINE
if (r->engine)
ENGINE_finish(r->engine);
static const EC_KEY_METHOD openssl_ec_key_method = {
"OpenSSL EC_KEY method",
0,
+ 0,0,
ossl_ec_key_gen,
ossl_ecdh_compute_key
};
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,
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,