1
0
mirror of https://github.com/biergaizi/codecrypt synced 2024-06-30 02:43:06 +00:00

square root fix

This commit is contained in:
Mirek Kratochvil 2012-04-16 11:11:58 +02:00
parent eeed801a0c
commit d23fd8f898
2 changed files with 28 additions and 14 deletions

@ -119,7 +119,7 @@ uint gf2m::inv (uint a)
uint gf2m::sq_root (uint a)
{
for (uint i = 0; i < m; ++i)
for (uint i = 1; i < m; ++i)
a = mult (a, a);
return a;
}

@ -57,8 +57,9 @@ void polynomial::mod (const polynomial&f, gf2m&fld)
uint t = fld.mult (item (d), hi);
for (int i = 0; i <= df; ++i)
item (i + d - df) = fld.add (item (i + d - df),
fld.mult (t, f[i]) );
item (i + d - df)
= fld.add (item (i + d - df),
fld.mult (t, f[i]) );
}
strip();
}
@ -192,23 +193,25 @@ for(int c=0;c<d;++c) {\
break;
}
if (j == d) return false;
a = fld.inv (l[i][i]); //normalize
row_mult (i, a);
//zero the col
for (j = i + 1; j < d; ++j) if (l[i][j] != 0) {
a = l[i][j]; //"minus". luckily on GF(2^m) x+x=0.
add_row_mult (i, j, a);
}
}
a = fld.inv (l[i][i]); //normalize
row_mult (i, a);
//zero the col
for (j = i + 1; j < d; ++j)
if (l[i][j] != 0) {
a = l[i][j]; //"minus". luckily on GF(2^m) x+x=0.
add_row_mult (i, j, a);
}
}
//jordan
for (i = d - 1; i >= 0; --i)
for (i = d - 1; i >= 0; --i) {
for (j = 0; j < i; ++j) {
a = l[i][j];
if (a == 0) continue;
add_row_mult (i, j, a);
}
}
return true;
}
@ -282,8 +285,19 @@ void polynomial::sqrt (vector<polynomial>& sqInv, gf2m&fld)
{
polynomial a = *this;
clear();
for (uint i = 0; i < a.size(); ++i) add_mult (sqInv[i], a[i], fld);
for (uint i = 0; i < size(); ++i) item (i) = fld.sq_root (item (i) );
uint s=sqInv.size();
resize (s, 0);
for (uint i = 0; i < s; ++i) {
for (uint j = 0; j < s; ++j) {
if (j >= a.size() ) break;
if (i >= sqInv[j].size() ) continue;
item (i) = fld.add (item (i), fld.mult (sqInv[j][i], a[j]) );
}
}
strip();
for (uint i = 0; i < size(); ++i)
item (i) = fld.sq_root (item (i) );
}
void polynomial::div (polynomial&p, polynomial&m, gf2m&fld)