if (!BN_mul(tmp,r,v,ctx)) goto err;
if (!BN_mul(rr,rr,v,ctx)) goto err;
int BN_exp(r,a,p,ctx)BIGNUM *r,*a,*p;BN_CTX *ctx;	{	int i,bits,ret=0;	BIGNUM *v,*tmp;	v= &(ctx->bn[ctx->tos++]);	tmp= &(ctx->bn[ctx->tos++]);	if (BN_copy(v,a) == NULL) goto err;	bits=BN_num_bits(p);	if (BN_is_odd(p))		{ if (BN_copy(r,a) == NULL) goto err; }	else	{ if (BN_one(r)) goto err; }	for (i=1; i<bits; i++)		{		if (!BN_sqr(tmp,v,ctx)) goto err;		if (BN_is_bit_set(p,i))			{			if (!BN_mul(tmp,r,v,ctx)) goto err;			}		}	ret=1;err:	ctx->tos-=2;	return(ret);	}