if(rsa->e == NULL) BN_free(e);
BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx){	BIGNUM *e;	BN_CTX *ctx;	BN_BLINDING *ret = NULL;	if (in_ctx == NULL)		{		if ((ctx = BN_CTX_new()) == NULL) return 0;		}	else		ctx = in_ctx;	BN_CTX_start(ctx);	e  = BN_CTX_get(ctx);	if (e == NULL)		{		RSAerr(RSA_F_RSA_SETUP_BLINDING, ERR_R_MALLOC_FAILURE);		goto err;		}	if (rsa->e == NULL)		{		e = rsa_get_public_exp(rsa->d, rsa->p, rsa->q, ctx);		if (e == NULL)			{			RSAerr(RSA_F_RSA_SETUP_BLINDING, RSA_R_NO_PUBLIC_EXPONENT);			goto err;			}		}	else		e = rsa->e;		if ((RAND_status() == 0) && rsa->d != NULL && rsa->d->d != NULL)		{		/* if PRNG is not properly seeded, resort to secret		 * exponent as unpredictable seed */		RAND_add(rsa->d->d, rsa->d->dmax * sizeof rsa->d->d[0], 0.0);		}	ret = BN_BLINDING_create_param(NULL, e, rsa->n, ctx,			rsa->meth->bn_mod_exp, rsa->_method_mod_n);	if (ret == NULL)		{		RSAerr(RSA_F_RSA_SETUP_BLINDING, ERR_R_BN_LIB);		goto err;		}	BN_BLINDING_set_thread_id(ret, CRYPTO_thread_id());err:	BN_CTX_end(ctx);	if (in_ctx == NULL)		BN_CTX_free(ctx);	return ret;}