serialization work
This commit is contained in:
parent
4bbc88f990
commit
a14d1088e7
|
@ -122,6 +122,9 @@ public:
|
||||||
|
|
||||||
void colex_rank (bvector&) const;
|
void colex_rank (bvector&) const;
|
||||||
void colex_unrank (bvector&, uint n, uint k) const;
|
void colex_unrank (bvector&, uint n, uint k) const;
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -187,6 +190,9 @@ public:
|
||||||
|
|
||||||
bool create_goppa_generator_dyadic (matrix&, uint&, prng&);
|
bool create_goppa_generator_dyadic (matrix&, uint&, prng&);
|
||||||
bool create_goppa_generator_dyadic (matrix&, uint);
|
bool create_goppa_generator_dyadic (matrix&, uint);
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -242,6 +248,8 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -264,6 +272,9 @@ public:
|
||||||
uint exp (int);
|
uint exp (int);
|
||||||
uint inv (uint);
|
uint inv (uint);
|
||||||
uint sq_root (uint);
|
uint sq_root (uint);
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -306,6 +317,9 @@ public:
|
||||||
|
|
||||||
bool compute_square_root_matrix (std::vector<polynomial>&, gf2m&);
|
bool compute_square_root_matrix (std::vector<polynomial>&, gf2m&);
|
||||||
void compute_goppa_check_matrix (matrix&, gf2m&);
|
void compute_goppa_check_matrix (matrix&, gf2m&);
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -342,6 +356,9 @@ public:
|
||||||
uint signature_size() {
|
uint signature_size() {
|
||||||
return plain_size();
|
return plain_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
class pubkey
|
class pubkey
|
||||||
|
@ -365,6 +382,9 @@ public:
|
||||||
uint signature_size() {
|
uint signature_size() {
|
||||||
return plain_size();
|
return plain_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
int generate (pubkey&, privkey&, prng&, uint m, uint t);
|
int generate (pubkey&, privkey&, prng&, uint m, uint t);
|
||||||
|
@ -405,6 +425,9 @@ public:
|
||||||
uint signature_size() {
|
uint signature_size() {
|
||||||
return plain_size();
|
return plain_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
class pubkey
|
class pubkey
|
||||||
|
@ -431,6 +454,9 @@ public:
|
||||||
uint signature_size() {
|
uint signature_size() {
|
||||||
return plain_size();
|
return plain_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
int generate (pubkey&, privkey&, prng&, uint m, uint t);
|
int generate (pubkey&, privkey&, prng&, uint m, uint t);
|
||||||
|
@ -476,6 +502,9 @@ public:
|
||||||
uint plain_size() {
|
uint plain_size() {
|
||||||
return (1 << T) * (block_count - fld.m);
|
return (1 << T) * (block_count - fld.m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
class pubkey
|
class pubkey
|
||||||
|
@ -541,6 +570,9 @@ public:
|
||||||
uint signature_size() {
|
uint signature_size() {
|
||||||
return Sinv.size();
|
return Sinv.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
class pubkey
|
class pubkey
|
||||||
|
@ -557,6 +589,9 @@ public:
|
||||||
uint signature_size() {
|
uint signature_size() {
|
||||||
return G.height();
|
return G.height();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sencode* serialize();
|
||||||
|
bool unserialize (sencode*);
|
||||||
};
|
};
|
||||||
|
|
||||||
//n is the number of subcodes used
|
//n is the number of subcodes used
|
||||||
|
|
287
lib/serialization.cpp
Normal file
287
lib/serialization.cpp
Normal file
|
@ -0,0 +1,287 @@
|
||||||
|
|
||||||
|
#include "codecrypt.h"
|
||||||
|
|
||||||
|
using namespace ccr;
|
||||||
|
|
||||||
|
sencode* bvector::serialize()
|
||||||
|
{
|
||||||
|
uint ss = (size() + 7) / 8;
|
||||||
|
std::string bytes;
|
||||||
|
bytes.resize (ss, '\0');
|
||||||
|
for (uint i = 0; i < size(); ++i)
|
||||||
|
if (item (i) ) bytes[i / 8] |= 1 << (i % 8);
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.push_back (new sencode_int (size() ) );
|
||||||
|
l->items.push_back (new sencode_bytes (bytes) );
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool bvector::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
if (l->items.size() != 2) return false;
|
||||||
|
sencode_int*size = dynamic_cast<sencode_int*> (l->items[0]);
|
||||||
|
sencode_bytes*bytes = dynamic_cast<sencode_bytes*> (l->items[1]);
|
||||||
|
if (! (size && bytes) ) return false;
|
||||||
|
if (bytes->b.size() != ( (size->i + 7) / 8) ) return false;
|
||||||
|
clear();
|
||||||
|
resize (size->i, 0);
|
||||||
|
for (uint i = 0; i < size->i; ++i)
|
||||||
|
if ( (bytes->b[i / 8] >> (i % 8) ) & 1)
|
||||||
|
item (i) = 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* matrix::serialize()
|
||||||
|
{
|
||||||
|
uint bits = width() * height();
|
||||||
|
uint ss = (bits + 7) / 8;
|
||||||
|
std::string bytes;
|
||||||
|
bytes.resize (ss, '\0');
|
||||||
|
for (uint i = 0; i < bits; ++i)
|
||||||
|
if (item (i / height(), i % height() ) ) bytes[i / 8] |= 1 << (i % 8);
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.push_back (new sencode_int (width() ) );
|
||||||
|
l->items.push_back (new sencode_int (height() ) );
|
||||||
|
l->items.push_back (new sencode_bytes (bytes) );
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool matrix::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
if (l->items.size() != 3) return false;
|
||||||
|
sencode_int*w = dynamic_cast<sencode_int*> (l->items[0]);
|
||||||
|
sencode_int*h = dynamic_cast<sencode_int*> (l->items[1]);
|
||||||
|
sencode_bytes*bytes = dynamic_cast<sencode_bytes*> (l->items[2]);
|
||||||
|
if (! (h && w && bytes) ) return false;
|
||||||
|
if (bytes->b.size() != ( ( (h->i * w->i) + 7) / 8) ) return false;
|
||||||
|
clear();
|
||||||
|
resize2 (w->i, h->i, 0);
|
||||||
|
for (uint i = 0; i < w->i * h->i; ++i)
|
||||||
|
if ( (bytes->b[i / 8] >> (i % 8) ) & 1)
|
||||||
|
item (i / h->i, i % h->i) = 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* permutation::serialize()
|
||||||
|
{
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.resize (size() );
|
||||||
|
for (uint i = 0; i < size(); ++i)
|
||||||
|
l->items[i] = new sencode_int (item (i) );
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool permutation::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
clear();
|
||||||
|
resize (l->items.size() );
|
||||||
|
for (uint i = 0; i < size(); ++i) {
|
||||||
|
sencode_int*x = dynamic_cast<sencode_int*> (l->items[i]);
|
||||||
|
if (!x) return false;
|
||||||
|
if (x->i >= size() ) return false; //small sanity check
|
||||||
|
item (i) = x->i;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* gf2m::serialize()
|
||||||
|
{
|
||||||
|
return new sencode_int (m);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool gf2m::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_int*p = dynamic_cast<sencode_int*> (s);
|
||||||
|
if (!p) return false;
|
||||||
|
return create (p->i);
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* polynomial::serialize()
|
||||||
|
{
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.resize (size() );
|
||||||
|
for (uint i = 0; i < size(); ++i)
|
||||||
|
l->items[i] = new sencode_int (item (i) );
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool polynomial::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
clear();
|
||||||
|
resize (l->items.size() );
|
||||||
|
for (uint i = 0; i < size(); ++i) {
|
||||||
|
sencode_int*x = dynamic_cast<sencode_int*> (l->items[i]);
|
||||||
|
if (!x) return false;
|
||||||
|
item (i) = x->i;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* mce::privkey::serialize()
|
||||||
|
{
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.resize (5);
|
||||||
|
l->items[0] = fld.serialize();
|
||||||
|
l->items[1] = g.serialize();
|
||||||
|
l->items[2] = hperm.serialize();
|
||||||
|
l->items[3] = Pinv.serialize();
|
||||||
|
l->items[4] = Sinv.serialize();
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mce::privkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
if (l->items.size() != 5) return false;
|
||||||
|
|
||||||
|
if (! (fld.unserialize (l->items[0]) &&
|
||||||
|
g.unserialize (l->items[1]) &&
|
||||||
|
hperm.unserialize (l->items[2]) &&
|
||||||
|
Pinv.unserialize (l->items[3]) &&
|
||||||
|
Sinv.unserialize (l->items[4]) ) ) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* mce::pubkey::serialize()
|
||||||
|
{
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.resize (2);
|
||||||
|
l->items[0] = new sencode_int (t);
|
||||||
|
l->items[1] = G.serialize();
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mce::pubkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
if (l->items.size() != 2) return false;
|
||||||
|
|
||||||
|
sencode_int*p = dynamic_cast<sencode_int*> (l->items[0]);
|
||||||
|
if (!p) return false;
|
||||||
|
t = p->i;
|
||||||
|
|
||||||
|
if (!G.unserialize (l->items[1]) ) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* nd::privkey::serialize()
|
||||||
|
{
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.resize (4);
|
||||||
|
l->items[0] = fld.serialize();
|
||||||
|
l->items[1] = g.serialize();
|
||||||
|
l->items[2] = Pinv.serialize();
|
||||||
|
l->items[3] = Sinv.serialize();
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool nd::privkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
if (l->items.size() != 4) return false;
|
||||||
|
|
||||||
|
if (! (fld.unserialize (l->items[0]) &&
|
||||||
|
g.unserialize (l->items[1]) &&
|
||||||
|
Pinv.unserialize (l->items[2]) &&
|
||||||
|
Sinv.unserialize (l->items[3]) ) ) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* nd::pubkey::serialize()
|
||||||
|
{
|
||||||
|
sencode_list*l = new sencode_list;
|
||||||
|
l->items.resize (2);
|
||||||
|
l->items[0] = new sencode_int (t);
|
||||||
|
l->items[1] = H.serialize();
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool nd::pubkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
sencode_list*l = dynamic_cast<sencode_list*> (s);
|
||||||
|
if (!l) return false;
|
||||||
|
if (l->items.size() != 2) return false;
|
||||||
|
|
||||||
|
sencode_int*p = dynamic_cast<sencode_int*> (l->items[0]);
|
||||||
|
if (!p) return false;
|
||||||
|
t = p->i;
|
||||||
|
|
||||||
|
if (!H.unserialize (l->items[1]) ) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* mce_qd::privkey::serialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mce_qd::privkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* mce_qd::pubkey::serialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mce_qd::pubkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* cfs_qd::privkey::serialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cfs_qd::privkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* cfs_qd::pubkey::serialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cfs_qd::pubkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* mce_oc::privkey::serialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mce_oc::privkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sencode* mce_oc::pubkey::serialize()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mce_oc::pubkey::unserialize (sencode* s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue