struct MParith { void mpadd(VecUchar_O &w, VecUchar_I &u, VecUchar_I &v) { Int j,n=u.size(),m=v.size(),p=w.size(); Int n_min=MIN(n,m),p_min=MIN(n_min,p-1); Uint ireg=0; for (j=p_min-1;j>=0;j--) { ireg=u[j]+v[j]+hibyte(ireg); w[j+1]=lobyte(ireg); } w[0]=hibyte(ireg); if (p > p_min+1) for (j=p_min+1;j
=0;j--) { ireg=255+u[j]-v[j]+hibyte(ireg); w[j]=lobyte(ireg); } is=hibyte(ireg)-1; if (p > p_min) for (j=p_min;j
=0;j--) { ireg=u[j]+hibyte(ireg); if (j+1 < p) w[j+1]=lobyte(ireg); } w[0]=hibyte(ireg); for (j=n+1;j
=0;j--) { ireg=u[j]*iv+hibyte(ireg); if (j < p-1) w[j+1]=lobyte(ireg); } w[0]=hibyte(ireg); for (j=n+1;j
p_min) for (j=p_min;j
=0;j--) {
ireg=255-u[j]+hibyte(ireg);
u[j]=lobyte(ireg);
}
}
void mpmov(VecUchar_O &u, VecUchar_I &v) {
Int j,n=u.size(),m=v.size(),n_min=MIN(n,m);
for (j=0;j =0;j--) {
fv *= BI;
fv += v[j];
}
fu=1.0/fv;
for (j=0;j =0;j--) {
fv *= BI;
fv += v[j];
}
fu=1.0/sqrt(fv);
for (j=0;j