CRYPTO_free_ex_data(dsa_meth,ret,&ret->ex_data);
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DSA, ret, &ret->ex_data);
DSA *DSA_new_method(ENGINE *engine)#endif	{	const DSA_METHOD *meth;	DSA *ret;	ret=(DSA *)OPENSSL_malloc(sizeof(DSA));	if (ret == NULL)		{		DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE);		return(NULL);		}	if (engine)		{		if(ENGINE_init(engine))			ret->engine = engine;		else 			ret->engine = NULL;		}	else		ret->engine=ENGINE_get_default_DSA();	if(ret->engine == NULL)		{		DSAerr(DSA_F_DSA_NEW,ERR_LIB_ENGINE);		OPENSSL_free(ret);		return NULL;		}	meth = ENGINE_get_DSA(ret->engine);	ret->pad=0;	ret->version=0;	ret->write_params=1;	ret->p=NULL;	ret->q=NULL;	ret->g=NULL;	ret->pub_key=NULL;	ret->priv_key=NULL;	ret->kinv=NULL;	ret->r=NULL;	ret->method_mont_p=NULL;	ret->references=1;	ret->flags=meth->flags;	CRYPTO_new_ex_data(dsa_meth,ret,&ret->ex_data);	if ((meth->init != NULL) && !meth->init(ret))		{		CRYPTO_free_ex_data(dsa_meth,ret,&ret->ex_data);		OPENSSL_free(ret);		ret=NULL;		}		return(ret);	}