bn_check_top(r);
int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,			  BN_MONT_CTX *mont, BN_CTX *ctx)	{	BIGNUM *tmp;	int ret=0;	BN_CTX_start(ctx);	tmp = BN_CTX_get(ctx);	if (tmp == NULL) goto err;	bn_check_top(tmp);	if (a == b)		{		if (!BN_sqr(tmp,a,ctx)) goto err;		}	else		{		if (!BN_mul(tmp,a,b,ctx)) goto err;		}	/* reduce from aRR to aR */	if (!BN_from_montgomery(r,tmp,mont,ctx)) goto err;	ret=1;err:	BN_CTX_end(ctx);	return(ret);	}