comba_double_modsub
comba_double_modsub
extern void comba_double_modsub(_MIPT_ big,big,big);
函数功能:
参数
1. 源码分析
comba_double_modsub在模板文件mrcomba.tpl实现。
void comba_double_modsub(_MIPD_ big x,big y,big w)
{ /* fast modular subtraction */
unsigned int i;
big modulus;
mr_small *a,*b,*c;
mr_small carry,su;
#ifdef MR_WIN64
mr_small ma,mb,u;
#endif
#ifdef MR_ITANIUM
mr_small ma,u;
#endif
#ifdef MR_NOASM
mr_large u;
#endif
#ifdef MR_OS_THREADS
miracl *mr_mip=get_mip();
#endif
modulus=mr_mip->modulus;
if (x!=w && y!=w)
{
for (i=2*MR_COMBA;i<(w->len&MR_OBITS);i++) w->w[i]=0;
/* zero(w); */
}
a=x->w; b=y->w; c=w->w;
/*** SUBTRACTION2 ***/
if (carry)
{
a=&(w->w[MR_COMBA]); b=modulus->w;
/*** INCREMENT ***/ /* add a and b, result in c */
}
w->len=2*MR_COMBA;
if (w->w[2*MR_COMBA-1]==0) mr_lzero(w);
}