1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
struct MParith {
void mpadd(NRvector<unsigned char> &w, NRvector<unsigned char> &u, NRvector<unsigned char> &v) {
w = NRvector<unsigned char>(v.size()+1);
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);
printf("%X\t", ireg);
printf("%u\t", ireg);
printf("%d\n", ireg);
w[j+1]=lobyte(ireg);
}
w[0]=hibyte(ireg);
if (p > p_min+1)
for (j=p_min+1;j<p;j++) w[j]=0;
}
void mpsub(Int &is, NRvector<unsigned char> &w, NRvector<unsigned char> &u, NRvector<unsigned char> &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=256;
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<p;j++) w[j]=0;
}
|