/* Main program: Using the various functions */ int main (void) { square1(); /* Calling the square1 function */ square2(7); /* Calling the square2 function using 7 as actual parameter corresponding to the formal parameter i */ printf("The value of square3() is %d\n", square3()); /* Ysing the square3 function */ printf("The value of square4(5) is %d\n", square4(5)); /* Using the square4 function with 5 as actual parameter corresponding to i */ printf("The value of area(3,7) is %d\n", area(3,7)); /* Using the area function with 3, 7 as actual parameters corresponding to b, h respectively */ }
int main(int argc, char const *argv[]) { square1(); square2(7); printf("The value of square3() is %d\n", square3()); printf("The value of square4(5) is %d\n", square4(5)); printf("The value of area(3, 7) is %d\n", area(3, 7)); return 0; }
void eta_T(_MIPD_ epoint *P,epoint *Q,big *f,big *res) { big xp,yp,xq,yq,t,d; big miller[4],v[4],u[4]; int i,m=M; int promptr; #ifndef MR_STATIC char *mem=(char *)memalloc(_MIPP_ 18); #else char mem[MR_BIG_RESERVE(18)]; /* 972 bytes from stack */ memset(mem,0,MR_BIG_RESERVE(18)); #endif xp=mirvar_mem(_MIPP_ mem,0); yp=mirvar_mem(_MIPP_ mem,1); xq=mirvar_mem(_MIPP_ mem,2); yq=mirvar_mem(_MIPP_ mem,3); t=mirvar_mem(_MIPP_ mem,4); d=mirvar_mem(_MIPP_ mem,5); for (i=0;i<4;i++) miller[i]=mirvar_mem(_MIPP_ mem,6+i); for (i=0;i<4;i++) v[i]=mirvar_mem(_MIPP_ mem,10+i); for (i=0;i<4;i++) u[i]=mirvar_mem(_MIPP_ mem,14+i); fcopy2(P->X,xp); fcopy2(P->Y,yp); fcopy2(Q->X,xq); fcopy2(Q->Y,yq); incr2(xp,1,t); /* t=xp+1 */ fadd2(xp,xq,d); incr2(d,1,d); /* xp+xq+1 */ modmult2(_MIPP_ d,t,d); /* t*(xp+xq+1) */ fincr2(yp,d); fincr2(yq,d); incr2(d,B,d); incr2(d,1,f[0]); /* f[0]=t*(xp+xq+1)+yp+yq+B+1 */ convert(_MIPP_ 1,miller[0]); fadd2(t,xq,f[2]); /* f[2]=t+xq */ incr2(f[2],1,f[1]); /* f[1]=t+xq+1 */ zero(f[3]); promptr=0; for (i=0;i<(m-1)/2;i+=2) { fcopy2(xp,t); sqroot2(_MIPP_ xp,xp); sqroot2(_MIPP_ yp,yp); fadd2(xp,xq,d); modmult2(_MIPP_ d,t,d); fincr2(yp,d); fincr2(yq,d); fadd2(d,xp,v[0]); /* v[0]=t*(xp+xq)+yp+yq+xp */ fadd2(t,xq,v[2]); /* v[2]=t+xq */ incr2(v[2],1,v[1]); /* v[1]=t+xq+1 */ modsquare2(_MIPP_ xq,xq); /* xq*=xq */ modsquare2(_MIPP_ yq,yq); /* yp*=yp */ fcopy2(xp,t); /* same again - unlooped times 2 */ sqroot2(_MIPP_ xp,xp); sqroot2(_MIPP_ yp,yp); fadd2(xp,xq,d); modmult2(_MIPP_ d,t,d); fincr2(yp,d); fincr2(yq,d); fadd2(d,xp,u[0]); fadd2(t,xq,u[2]); incr2(u[2],1,u[1]); modsquare2(_MIPP_ xq,xq); modsquare2(_MIPP_ yq,yq); mul(_MIPP_ u,v,u); /* fast mul */ mult4(_MIPP_ miller,u,miller); } mult4(_MIPP_ miller,f,miller); for (i=0;i<4;i++) { fcopy2(miller[i],u[i]); fcopy2(miller[i],v[i]); fcopy2(miller[i],f[i]); } /* final exponentiation */ for (i=0;i<(m+1)/2;i++) square4(_MIPP_ u,u); /* u*=u */ powq(_MIPP_ u); powq(_MIPP_ f); for(i=0;i<4;i++) fcopy2(f[i],v[i]); powq(_MIPP_ f); for(i=0;i<4;i++) fcopy2(f[i],res[i]); powq(_MIPP_ f); mult4(_MIPP_ f,u,f); mult4(_MIPP_ f,miller,f); mult4(_MIPP_ res,v,res); powq(_MIPP_ u); powq(_MIPP_ u); mult4(_MIPP_ res,u,res); /* doing inversion here could kill the stack... */ #ifndef MR_STATIC memkill(_MIPP_ mem,18); #else memset(mem,0,MR_BIG_RESERVE(18)); #endif }
void power4(_MIPD_ big *a,big k,big *u) { int i,j,m,nb,n,nbw,nzs; big u2[4],t[4][4]; #ifndef MR_STATIC char *mem=(char *)memalloc(_MIPP_ 20); #else char mem[MR_BIG_RESERVE(20)]; memset(mem,0,MR_BIG_RESERVE(20)); #endif m=0; for (i=0;i<4;i++) for (j=0;j<4;j++) t[i][j]=mirvar_mem(_MIPP_ mem,m++); u2[0]=mirvar_mem(_MIPP_ mem,16); u2[1]=mirvar_mem(_MIPP_ mem,17); u2[2]=mirvar_mem(_MIPP_ mem,18); u2[3]=mirvar_mem(_MIPP_ mem,19); if(size(k)==0) { convert(_MIPP_ 1,u[0]); zero(u[1]); zero(u[2]); zero(u[3]); #ifndef MR_STATIC memkill(_MIPP_ mem,20); #else memset(mem,0,MR_BIG_RESERVE(20)); #endif return; } for (i=0;i<4;i++) fcopy2(a[i],u[i]); if (size(k)==1) { #ifndef MR_STATIC memkill(_MIPP_ mem,20); #else memset(mem,0,MR_BIG_RESERVE(20)); #endif return; } square4(_MIPP_ u,u2); for (i=0;i<4;i++) fcopy2(u[i],t[0][i]); for(i=1;i<4;i++) mult4(_MIPP_ u2,t[i-1],t[i]); nb=logb2(_MIPP_ k); if(nb>1) for(i=nb-2;i>=0;) { n=mr_window(_MIPP_ k,i,&nbw,&nzs,3); /* small 3 bit window to save RAM */ for(j=0;j<nbw;j++) square4(_MIPP_ u,u); if(n>0) mult4(_MIPP_ u,t[n/2],u); i-=nbw; if(nzs!=0) { for (j=0;j<nzs;j++) square4(_MIPP_ u,u); i-=nzs; } } #ifndef MR_STATIC memkill(_MIPP_ mem,20); #else memset(mem,0,MR_BIG_RESERVE(20)); #endif }