bn_check_top(r); bn_check_top(a);
int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)	{	int i,j,nw,lb,rb;	BN_ULONG *t,*f;	BN_ULONG l,tmp;	nw=n/BN_BITS2;	rb=n%BN_BITS2;	lb=BN_BITS2-rb;	if (nw > a->top || a->top == 0)		{		BN_zero(r);		return(1);		}	if (r != a)		{		r->neg=a->neg;		if (bn_wexpand(r,a->top-nw+1) == NULL) return(0);		}	else		{		if (n == 0)			return 1; /* or the copying loop will go berserk */		}	f= &(a->d[nw]);	t=r->d;	j=a->top-nw;	r->top=j;	if (rb == 0)		{		for (i=j+1; i > 0; i--)			*(t++)= *(f++);		}	else		{		l= *(f++);		for (i=1; i<j; i++)			{			tmp =(l>>rb)&BN_MASK2;			l= *(f++);			*(t++) =(tmp|(l<<lb))&BN_MASK2;			}		*(t++) =(l>>rb)&BN_MASK2;		}	*t=0;	bn_correct_top(r);	bn_check_top(r);	return(1);	}