1
0
mirror of https://github.com/biergaizi/codecrypt synced 2024-06-27 09:18:16 +00:00

gf2m: save some log lookups with combined ops

This commit is contained in:
Mirek Kratochvil 2014-02-02 17:45:27 +01:00
parent b566beaa38
commit 6fd26d4c79
3 changed files with 15 additions and 3 deletions

@ -61,6 +61,18 @@ public:
return antilog[ (n - 1 - log[a]) % (n - 1)];
}
inline uint inv_square (uint a) {
if (!a) return 0;
return antilog[ (2 * (n - 1 - log[a]) )
% (n - 1)];
}
inline uint div (uint a, uint b) {
if (! (a && b) ) return 0;
return antilog[ (n - 1 - log[b] + log[a])
% (n - 1)];
}
inline uint sq_root (uint a) {
if (!a) return 0;
uint t = log[a];

@ -411,8 +411,8 @@ int privkey::decrypt (const bvector & in, bvector & out, bvector & errors)
synd.clear();
synd.resize (h_size, 0);
for (i = 0; i < cipher_size(); ++i) if (in[i]) {
tmp = fld.inv (g.eval (permuted_support[i], fld) );
tmp = fld.mult (tmp, tmp); //g(Li)^{-2}
tmp = fld.inv_square //g(Li)^{-2}
(g.eval (permuted_support[i], fld) );
synd[0] = fld.add (synd[0], tmp);
for (j = 1; j < h_size; ++j) {
tmp = fld.mult (tmp, permuted_support[i]);

@ -378,7 +378,7 @@ void polynomial::ext_euclid (polynomial&a_out, polynomial&b_out,
A.swap (a);
B.swap (b);
while ( (j = A.degree() - a.degree() ) >= 0) {
h = fld.mult (A.head(), fld.inv (a.head() ) );
h = fld.div (A.head(), a.head() );
tmp = a;
tmp.shift (j);
A.add_mult (tmp, h, fld);