if (!engine_openssl.bn_mod_exp(r, &r1, dmp1, p, bn_ctx))
if (!BN_mod_exp(r, &r1, dmp1, p, bn_ctx))
static int openssl_mod_exp_crt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,			const BIGNUM *q, const BIGNUM *dmp1,			const BIGNUM *dmq1, const BIGNUM *iqmp, BN_CTX *ctx)	{	BIGNUM r1,m1;	int ret=0;	BN_CTX *bn_ctx;	BIGNUM *temp_bn = NULL;	if (ctx)		bn_ctx = ctx;	else		if ((bn_ctx=BN_CTX_new()) == NULL) goto err;	BN_init(&m1);	BN_init(&r1);	/* BN_mul() cannot accept const BIGNUMs so I use the BN_CTX	 * to duplicate what I need. <sigh> */	BN_CTX_start(bn_ctx);	if ((temp_bn = BN_CTX_get(bn_ctx)) == NULL) goto err;	if (!BN_copy(temp_bn, iqmp)) goto err; 	if (!BN_mod(&r1, a, q, bn_ctx)) goto err;	if (!engine_openssl.bn_mod_exp(&m1, &r1, dmq1, q, bn_ctx))		goto err; 	if (!BN_mod(&r1, a, p, bn_ctx)) goto err;	if (!engine_openssl.bn_mod_exp(r, &r1, dmp1, p, bn_ctx))		goto err;	if (!BN_sub(r, r, &m1)) goto err;	/* This will help stop the size of r0 increasing, which does	 * affect the multiply if it optimised for a power of 2 size */	if (r->neg)		if (!BN_add(r, r, p)) goto err; 	if (!BN_mul(&r1, r, temp_bn, bn_ctx)) goto err;	if (!BN_mod(r, &r1, p, bn_ctx)) goto err;	/* If p < q it is occasionally possible for the correction of	 * adding 'p' if r is negative above to leave the result still	 * negative. This can break the private key operations: the following	 * second correction should *always* correct this rare occurrence.	 * This will *never* happen with OpenSSL generated keys because	 * they ensure p > q [steve]	 */	if (r->neg)		if (!BN_add(r, r, p)) goto err;	/* Again, BN_mul() will need non-const values. */	if (!BN_copy(temp_bn, q)) goto err;	if (!BN_mul(&r1, r, temp_bn, bn_ctx)) goto err;	if (!BN_add(r, &r1, &m1)) goto err; 	ret=1;err:	BN_clear_free(&m1);	BN_clear_free(&r1);	BN_CTX_end(ctx);	if (!ctx)		BN_CTX_free(bn_ctx);	return(ret);	}