d= &(ctx->bn[ctx->tos++]);
d=BN_CTX_get(ctx);
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, BIGNUM *m, BN_RECP_CTX *recp,	     BN_CTX *ctx)	{	int i,j,tos,ret=0,ex;	BIGNUM *a,*b,*d,*r;	tos=ctx->tos;	a= &(ctx->bn[ctx->tos++]);	b= &(ctx->bn[ctx->tos++]);	if (dv != NULL)		d=dv;	else		d= &(ctx->bn[ctx->tos++]);	if (rem != NULL)		r=rem;	else		r= &(ctx->bn[ctx->tos++]);	if (BN_ucmp(m,&(recp->N)) < 0)		{		BN_zero(d);		BN_copy(r,m);		ctx->tos=tos;		return(1);		}	/* We want the remainder	 * Given input of ABCDEF / ab	 * we need multiply ABCDEF by 3 digests of the reciprocal of ab	 *	 */	i=BN_num_bits(m);	j=recp->num_bits*2;	if (j > i)		{		i=j;		ex=0;		}	else		{		ex=(i-j)/2;		}	j=i/2;	if (i != recp->shift)		recp->shift=BN_reciprocal(&(recp->Nr),&(recp->N),			i,ctx);	if (!BN_rshift(a,m,j-ex)) goto err;	if (!BN_mul(b,a,&(recp->Nr),ctx)) goto err;	if (!BN_rshift(d,b,j+ex)) goto err;	d->neg=0;	if (!BN_mul(b,&(recp->N),d,ctx)) goto err;	if (!BN_usub(r,m,b)) goto err;	r->neg=0;	j=0;#if 1	while (BN_ucmp(r,&(recp->N)) >= 0)		{		if (j++ > 2)			{			BNerr(BN_F_BN_MOD_MUL_RECIPROCAL,BN_R_BAD_RECIPROCAL);			goto err;			}		if (!BN_usub(r,r,&(recp->N))) goto err;		if (!BN_add_word(d,1)) goto err;		}#endif	r->neg=BN_is_zero(r)?0:m->neg;	d->neg=m->neg^recp->N.neg;	ret=1;err:	ctx->tos=tos;	return(ret);	} 