Commit da2a5a79 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

PR: 2705

Submitted by: Alexey Melnikov <alexey.melnikov@isode.com>

Only create ex_data indices once for CAPI engine.
parent 11eaec9a
Loading
Loading
Loading
Loading
+25 −17
Original line number Diff line number Diff line
@@ -447,14 +447,15 @@ static int capi_init(ENGINE *e)
	CAPI_CTX *ctx;
	const RSA_METHOD *ossl_rsa_meth;
	const DSA_METHOD *ossl_dsa_meth;
	capi_idx = ENGINE_get_ex_new_index(0, NULL, NULL, NULL, 0);
	cert_capi_idx = X509_get_ex_new_index(0, NULL, NULL, NULL, 0);

	ctx = capi_ctx_new();
	if (!ctx || (capi_idx < 0))
	if (capi_idx < 0)
		{
		capi_idx = ENGINE_get_ex_new_index(0, NULL, NULL, NULL, 0);
		if (capi_idx < 0)
			goto memerr;

	ENGINE_set_ex_data(e, capi_idx, ctx);
		cert_capi_idx = X509_get_ex_new_index(0, NULL, NULL, NULL, 0);

		/* Setup RSA_METHOD */
		rsa_capi_idx = RSA_get_ex_new_index(0, NULL, NULL, NULL, 0);
		ossl_rsa_meth = RSA_PKCS1_SSLeay();
@@ -469,6 +470,13 @@ static int capi_init(ENGINE *e)
		capi_dsa_method.dsa_do_verify = ossl_dsa_meth->dsa_do_verify;
		capi_dsa_method.dsa_mod_exp = ossl_dsa_meth->dsa_mod_exp;
		capi_dsa_method.bn_mod_exp = ossl_dsa_meth->bn_mod_exp;
		}

	ctx = capi_ctx_new();
	if (!ctx)
		goto memerr;

	ENGINE_set_ex_data(e, capi_idx, ctx);

#ifdef OPENSSL_CAPIENG_DIALOG
	{