diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cli/cli.cpp | 16 | ||||
-rw-r--r-- | src/cli/cli.h | 4 | ||||
-rw-r--r-- | src/cli/tls_client.cpp | 2 | ||||
-rw-r--r-- | src/cli/tls_http_server.cpp | 2 | ||||
-rw-r--r-- | src/cli/tls_proxy.cpp | 2 | ||||
-rw-r--r-- | src/cli/tls_server.cpp | 2 | ||||
-rw-r--r-- | src/lib/pubkey/mce/code_based_key_gen.cpp | 93 | ||||
-rw-r--r-- | src/lib/pubkey/mce/gf2m_small_m.h | 5 | ||||
-rw-r--r-- | src/lib/pubkey/mce/mce_internal.h | 6 | ||||
-rw-r--r-- | src/lib/pubkey/mce/polyn_gf2m.cpp | 100 | ||||
-rw-r--r-- | src/lib/pubkey/mce/polyn_gf2m.h | 4 |
11 files changed, 132 insertions, 104 deletions
diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 25edd5df2..1fc5ed116 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -128,6 +128,22 @@ size_t Command::get_arg_sz(const std::string& opt_name) const return m_args->get_arg_sz(opt_name); } +uint16_t Command::get_arg_u16(const std::string& opt_name) const + { + const size_t val = get_arg_sz(opt_name); + if(static_cast<uint16_t>(val) != val) + throw CLI_Usage_Error("Argument " + opt_name + " has value out of allowed range"); + return static_cast<uint16_t>(val); + } + +uint32_t Command::get_arg_u32(const std::string& opt_name) const + { + const size_t val = get_arg_sz(opt_name); + if(static_cast<uint32_t>(val) != val) + throw CLI_Usage_Error("Argument " + opt_name + " has value out of allowed range"); + return static_cast<uint32_t>(val); + } + std::vector<std::string> Command::get_arg_list(const std::string& what) const { return m_args->get_arg_list(what); diff --git a/src/cli/cli.h b/src/cli/cli.h index 838fb9eb3..2a7bef483 100644 --- a/src/cli/cli.h +++ b/src/cli/cli.h @@ -147,6 +147,10 @@ class Command size_t get_arg_sz(const std::string& opt_name) const; + uint16_t get_arg_u16(const std::string& opt_name) const; + + uint32_t get_arg_u32(const std::string& opt_name) const; + std::vector<std::string> get_arg_list(const std::string& what) const; /* diff --git a/src/cli/tls_client.cpp b/src/cli/tls_client.cpp index 26e1f4b25..e241df1e8 100644 --- a/src/cli/tls_client.cpp +++ b/src/cli/tls_client.cpp @@ -91,7 +91,7 @@ class TLS_Client final : public Command, public Botan::TLS::Callbacks const std::string sessions_db = get_arg("session-db"); const std::string host = get_arg("host"); - const uint16_t port = static_cast<uint16_t>(get_arg_sz("port")); + const uint16_t port = get_arg_u16("port"); const std::string transport = get_arg("type"); const std::string next_protos = get_arg("next-protocols"); std::string policy_file = get_arg("policy"); diff --git a/src/cli/tls_http_server.cpp b/src/cli/tls_http_server.cpp index 0ff1632af..b4d117586 100644 --- a/src/cli/tls_http_server.cpp +++ b/src/cli/tls_http_server.cpp @@ -529,7 +529,7 @@ class TLS_HTTP_Server final : public Command void go() override { - const size_t listen_port = get_arg_sz("port"); + const uint16_t listen_port = get_arg_u16("port"); const std::string server_crt = get_arg("server_cert"); const std::string server_key = get_arg("server_key"); diff --git a/src/cli/tls_proxy.cpp b/src/cli/tls_proxy.cpp index 596e4105c..9299a0e38 100644 --- a/src/cli/tls_proxy.cpp +++ b/src/cli/tls_proxy.cpp @@ -465,7 +465,7 @@ class TLS_Proxy final : public Command void go() override { - const size_t listen_port = get_arg_sz("listen_port"); + const uint16_t listen_port = get_arg_u16("listen_port"); const std::string target = get_arg("target_host"); const std::string target_port = get_arg("target_port"); diff --git a/src/cli/tls_server.cpp b/src/cli/tls_server.cpp index c6832582b..77afd397d 100644 --- a/src/cli/tls_server.cpp +++ b/src/cli/tls_server.cpp @@ -62,7 +62,7 @@ class TLS_Server final : public Command, public Botan::TLS::Callbacks { const std::string server_crt = get_arg("cert"); const std::string server_key = get_arg("key"); - const int port = get_arg_sz("port"); + const uint16_t port = get_arg_u16("port"); const size_t max_clients = get_arg_sz("max-clients"); const std::string transport = get_arg("type"); const std::string dump_traces_to = get_arg("dump-traces"); diff --git a/src/lib/pubkey/mce/code_based_key_gen.cpp b/src/lib/pubkey/mce/code_based_key_gen.cpp index dad06f0c0..8d662cb24 100644 --- a/src/lib/pubkey/mce/code_based_key_gen.cpp +++ b/src/lib/pubkey/mce/code_based_key_gen.cpp @@ -22,37 +22,43 @@ namespace { class binary_matrix final { public: - binary_matrix(uint32_t m_rown, uint32_t m_coln); + binary_matrix(size_t m_rown, size_t m_coln); - void row_xor(uint32_t a, uint32_t b); + void row_xor(size_t a, size_t b); secure_vector<int> row_reduced_echelon_form(); /** * return the coefficient out of F_2 */ - uint32_t coef(uint32_t i, uint32_t j) + uint32_t coef(size_t i, size_t j) { return (m_elem[(i) * m_rwdcnt + (j) / 32] >> (j % 32)) & 1; } - void set_coef_to_one(uint32_t i, uint32_t j) + void set_coef_to_one(size_t i, size_t j) { m_elem[(i) * m_rwdcnt + (j) / 32] |= (static_cast<uint32_t>(1) << ((j) % 32)) ; } - void toggle_coeff(uint32_t i, uint32_t j) + void toggle_coeff(size_t i, size_t j) { m_elem[(i) * m_rwdcnt + (j) / 32] ^= (static_cast<uint32_t>(1) << ((j) % 32)) ; } - //private: - uint32_t m_rown; // number of rows. - uint32_t m_coln; // number of columns. - uint32_t m_rwdcnt; // number of words in a row + size_t rows() const { return m_rown; } + + size_t columns() const { return m_coln; } + + private: + size_t m_rown; // number of rows. + size_t m_coln; // number of columns. + size_t m_rwdcnt; // number of words in a row + public: + // TODO this should be private std::vector<uint32_t> m_elem; }; -binary_matrix::binary_matrix (uint32_t rown, uint32_t coln) +binary_matrix::binary_matrix(size_t rown, size_t coln) { m_coln = coln; m_rown = rown; @@ -60,39 +66,41 @@ binary_matrix::binary_matrix (uint32_t rown, uint32_t coln) m_elem = std::vector<uint32_t>(m_rown * m_rwdcnt); } -void binary_matrix::row_xor(uint32_t a, uint32_t b) +void binary_matrix::row_xor(size_t a, size_t b) { - uint32_t i; - for(i=0;i<m_rwdcnt;i++) + for(size_t i = 0; i != m_rwdcnt; i++) { - m_elem[a*m_rwdcnt+i]^=m_elem[b*m_rwdcnt+i]; + m_elem[a*m_rwdcnt+i] ^= m_elem[b*m_rwdcnt+i]; } } //the matrix is reduced from LSB...(from right) secure_vector<int> binary_matrix::row_reduced_echelon_form() { - uint32_t i, failcnt, findrow, max=m_coln - 1; - secure_vector<int> perm(m_coln); - for(i=0;i<m_coln;i++) + for(size_t i = 0; i != m_coln; i++) { - perm[i]=i;//initialize permutation. + perm[i] = i;//initialize permutation. } - failcnt = 0; - for(i=0;i<m_rown;i++,max--) + uint32_t failcnt = 0; + + uint32_t max = m_coln - 1; + for(size_t i = 0; i != m_rown; i++, max--) { - findrow=0; - for(uint32_t j=i;j<m_rown;j++) + uint32_t findrow = 0; + for(size_t j = i; j != m_rown; j++) { - if(coef(j,max)) + if(coef(j, max)) { - if (i!=j)//not needed as ith row is 0 and jth row is 1. - row_xor(i,j);//xor to the row.(swap)? + if(i != j) //not needed as ith row is 0 and jth row is 1. + { + row_xor(i ,j);//xor to the row.(swap)? + } + findrow=1; break; - }//largest value found (end if) + } //largest value found (end if) } if(!findrow)//if no row with a 1 found then swap last column and the column with no 1 down. @@ -110,7 +118,7 @@ secure_vector<int> binary_matrix::row_reduced_echelon_form() else { perm[i+m_coln - m_rown] = max; - for(uint32_t j=i+1;j<m_rown;j++)//fill the column downwards with 0's + for(size_t j=i+1;j<m_rown;j++)//fill the column downwards with 0's { if(coef(j,(max))) { @@ -132,7 +140,7 @@ secure_vector<int> binary_matrix::row_reduced_echelon_form() void randomize_support(std::vector<gf2m>& L, RandomNumberGenerator& rng) { - for(uint32_t i = 0; i != L.size(); ++i) + for(size_t i = 0; i != L.size(); ++i) { gf2m rnd = random_gf2m(rng); @@ -149,21 +157,20 @@ std::unique_ptr<binary_matrix> generate_R(std::vector<gf2m> &L, polyn_gf2m* g, s //m- The extension degree of the GF //g- The generator polynomial. gf2m x,y; - uint32_t i,j,k,r,n; + uint32_t r; std::vector<int> Laux(code_length); - n=code_length; r=t*sp_field->get_extension_degree(); - binary_matrix H(r, n) ; + binary_matrix H(r, code_length); - for(i=0;i< n;i++) + for(size_t i = 0; i != code_length; i++) { x = g->eval(lex_to_gray(L[i]));//evaluate the polynomial at the point L[i]. x = sp_field->gf_inv(x); y = x; - for(j=0;j<t;j++) + for(size_t j=0;j<t;j++) { - for(k=0;k<sp_field->get_extension_degree();k++) + for(size_t k=0;k<sp_field->get_extension_degree();k++) { if(y & (1<<k)) { @@ -182,10 +189,10 @@ std::unique_ptr<binary_matrix> generate_R(std::vector<gf2m> &L, polyn_gf2m* g, s throw Invalid_State("could not bring matrix in row reduced echelon form"); } - std::unique_ptr<binary_matrix> result(new binary_matrix(n-r,r)) ; - for (i = 0; i < (*result).m_rown; ++i) + std::unique_ptr<binary_matrix> result(new binary_matrix(code_length-r, r)) ; + for(size_t i = 0; i < result->rows(); ++i) { - for (j = 0; j < (*result).m_coln; ++j) + for(size_t j = 0; j < result->columns(); ++j) { if (H.coef(j,perm[i])) { @@ -193,11 +200,12 @@ std::unique_ptr<binary_matrix> generate_R(std::vector<gf2m> &L, polyn_gf2m* g, s } } } - for (i = 0; i < code_length; ++i) + for(size_t i = 0; i < code_length; ++i) { Laux[i] = L[perm[i]]; } - for (i = 0; i < code_length; ++i) + + for(size_t i = 0; i < code_length; ++i) { L[i] = static_cast<gf2m>(Laux[i]); } @@ -205,7 +213,7 @@ std::unique_ptr<binary_matrix> generate_R(std::vector<gf2m> &L, polyn_gf2m* g, s } } -McEliece_PrivateKey generate_mceliece_key( RandomNumberGenerator & rng, uint32_t ext_deg, uint32_t code_length, uint32_t t) +McEliece_PrivateKey generate_mceliece_key(RandomNumberGenerator & rng, size_t ext_deg, size_t code_length, size_t t) { const size_t codimension = t * ext_deg; @@ -213,7 +221,8 @@ McEliece_PrivateKey generate_mceliece_key( RandomNumberGenerator & rng, uint32_t { throw Invalid_Argument("invalid McEliece parameters"); } - std::shared_ptr<GF2m_Field> sp_field ( new GF2m_Field(ext_deg )); + + std::shared_ptr<GF2m_Field> sp_field(new GF2m_Field(ext_deg)); //pick the support......... std::vector<gf2m> L(code_length); @@ -278,7 +287,7 @@ McEliece_PrivateKey generate_mceliece_key( RandomNumberGenerator & rng, uint32_t { Linv[L[i]] = static_cast<gf2m>(i); } - std::vector<uint8_t> pubmat (R->m_elem.size() * 4); + std::vector<uint8_t> pubmat(R->m_elem.size() * 4); for(size_t i = 0; i < R->m_elem.size(); i++) { store_le(R->m_elem[i], &pubmat[i*4]); diff --git a/src/lib/pubkey/mce/gf2m_small_m.h b/src/lib/pubkey/mce/gf2m_small_m.h index e35f14be5..a74094930 100644 --- a/src/lib/pubkey/mce/gf2m_small_m.h +++ b/src/lib/pubkey/mce/gf2m_small_m.h @@ -185,7 +185,7 @@ class BOTAN_PUBLIC_API(2,0) GF2m_Field return m_gf_multiplicative_order; } - gf2m get_extension_degree() const + size_t get_extension_degree() const { return m_gf_extension_degree; } @@ -206,7 +206,8 @@ class BOTAN_PUBLIC_API(2,0) GF2m_Field return static_cast<gf2m>(((d) & gf_ord()) + ((d) >> get_extension_degree())); } - gf2m m_gf_extension_degree, m_gf_multiplicative_order; + const size_t m_gf_extension_degree; + const gf2m m_gf_multiplicative_order; const std::vector<gf2m>& m_gf_log_table; const std::vector<gf2m>& m_gf_exp_table; }; diff --git a/src/lib/pubkey/mce/mce_internal.h b/src/lib/pubkey/mce/mce_internal.h index f20442588..62dafcc5a 100644 --- a/src/lib/pubkey/mce/mce_internal.h +++ b/src/lib/pubkey/mce/mce_internal.h @@ -42,9 +42,9 @@ void mceliece_encrypt(secure_vector<uint8_t>& ciphertext_out, RandomNumberGenerator& rng); McEliece_PrivateKey generate_mceliece_key(RandomNumberGenerator &rng, - uint32_t ext_deg, - uint32_t code_length, - uint32_t t); + size_t ext_deg, + size_t code_length, + size_t t); } diff --git a/src/lib/pubkey/mce/polyn_gf2m.cpp b/src/lib/pubkey/mce/polyn_gf2m.cpp index 8c58ef69a..763e0f293 100644 --- a/src/lib/pubkey/mce/polyn_gf2m.cpp +++ b/src/lib/pubkey/mce/polyn_gf2m.cpp @@ -91,13 +91,13 @@ gf2m random_code_element(unsigned code_length, RandomNumberGenerator& rng) polyn_gf2m::polyn_gf2m(polyn_gf2m const& other) :m_deg(other.m_deg), coeff(other.coeff), - msp_field(other.msp_field) + m_sp_field(other.m_sp_field) { } polyn_gf2m::polyn_gf2m( int d, std::shared_ptr<GF2m_Field> sp_field) :m_deg(-1), coeff(d+1), - msp_field(sp_field) + m_sp_field(sp_field) { } @@ -123,8 +123,8 @@ void polyn_gf2m::realloc(uint32_t new_size) this->coeff = secure_vector<gf2m>(new_size); } -polyn_gf2m::polyn_gf2m(const uint8_t* mem, uint32_t mem_len, std::shared_ptr<GF2m_Field> sp_field) - :m_deg(-1), msp_field(sp_field) +polyn_gf2m::polyn_gf2m(const uint8_t* mem, uint32_t mem_len, std::shared_ptr<GF2m_Field> sp_field) : + m_deg(-1), m_sp_field(sp_field) { if(mem_len % sizeof(gf2m)) { @@ -150,14 +150,12 @@ polyn_gf2m::polyn_gf2m(const uint8_t* mem, uint32_t mem_len, std::shared_ptr<GF2 } -polyn_gf2m::polyn_gf2m( std::shared_ptr<GF2m_Field> sp_field ) - : m_deg(-1), - coeff(1), - msp_field(sp_field) +polyn_gf2m::polyn_gf2m( std::shared_ptr<GF2m_Field> sp_field) : + m_deg(-1), coeff(1), m_sp_field(sp_field) {} polyn_gf2m::polyn_gf2m(int degree, const unsigned char* mem, uint32_t mem_byte_len, std::shared_ptr<GF2m_Field> sp_field) - :msp_field(sp_field) + :m_sp_field(sp_field) { uint32_t j, k, l; gf2m a; @@ -168,7 +166,7 @@ polyn_gf2m::polyn_gf2m(int degree, const unsigned char* mem, uint32_t mem_byte_ throw Botan::Decoding_Error("memory vector for polynomial has wrong size"); } this->coeff = secure_vector<gf2m>(degree+1); - gf2m ext_deg = this->msp_field->get_extension_degree(); + gf2m ext_deg = this->m_sp_field->get_extension_degree(); for (l = 0; l < polyn_size; l++) { k = (l * ext_deg) / 8; @@ -255,7 +253,7 @@ static gf2m eval_aux(const gf2m * /*restrict*/ coeff, gf2m a, int d, std::shared gf2m polyn_gf2m::eval(gf2m a) { - return eval_aux(&this->coeff[0], a, this->m_deg, this->msp_field); + return eval_aux(&this->coeff[0], a, this->m_deg, this->m_sp_field); } @@ -263,10 +261,10 @@ gf2m polyn_gf2m::eval(gf2m a) void polyn_gf2m::remainder(polyn_gf2m &p, const polyn_gf2m & g) { int i, j, d; - std::shared_ptr<GF2m_Field> msp_field = g.msp_field; + std::shared_ptr<GF2m_Field> m_sp_field = g.m_sp_field; d = p.get_degree() - g.get_degree(); if (d >= 0) { - gf2m la = msp_field->gf_inv_rn(g.get_lead_coef()); + gf2m la = m_sp_field->gf_inv_rn(g.get_lead_coef()); const int p_degree = p.get_degree(); @@ -274,10 +272,10 @@ void polyn_gf2m::remainder(polyn_gf2m &p, const polyn_gf2m & g) for (i = p_degree; d >= 0; --i, --d) { if (p[i] != 0) { - gf2m lb = msp_field->gf_mul_rrn(la, p[i]); + gf2m lb = m_sp_field->gf_mul_rrn(la, p[i]); for (j = 0; j < g.get_degree(); ++j) { - p[j+d] ^= msp_field->gf_mul_zrz(lb, g[j]); + p[j+d] ^= m_sp_field->gf_mul_zrz(lb, g[j]); } (*&p).set_coef( i, 0); } @@ -326,7 +324,7 @@ polyn_gf2m polyn_gf2m::sqmod( const std::vector<polyn_gf2m> & sq, int d) { int i, j; gf2m la; - std::shared_ptr<GF2m_Field> sp_field = this->msp_field; + std::shared_ptr<GF2m_Field> sp_field = this->m_sp_field; polyn_gf2m result(d - 1, sp_field); // terms of low degree @@ -391,29 +389,29 @@ polyn_gf2m polyn_gf2m::gcd(polyn_gf2m const& p1, polyn_gf2m const& p2) // Returns the degree of the smallest factor void polyn_gf2m::degppf(const polyn_gf2m & g, int* p_result) { - int i, d; polyn_gf2m s(g.get_sp_field()); - d = g.get_degree(); + const size_t ext_deg = g.m_sp_field->get_extension_degree(); + const int d = g.get_degree(); std::vector<polyn_gf2m> u = polyn_gf2m::sqmod_init(g); - polyn_gf2m p( d - 1, g.msp_field); + polyn_gf2m p(d - 1, g.m_sp_field); - p.set_degree( 1); - (*&p).set_coef( 1, 1); + p.set_degree(1); + (*&p).set_coef(1, 1); (*p_result) = d; - for (i = 1; i <= (d / 2) * g.msp_field->get_extension_degree(); ++i) + for(size_t i = 1; i <= (d / 2) * ext_deg; ++i) { polyn_gf2m r = p.sqmod(u, d); - if ((i % g.msp_field->get_extension_degree()) == 0) + if ((i % ext_deg) == 0) { r[1] ^= 1; r.get_degree(); // The degree may change s = polyn_gf2m::gcd( g, r); - if (s.get_degree() > 0) + if(s.get_degree() > 0) { - (*p_result) = i / g.msp_field->get_extension_degree(); + (*p_result) = i / ext_deg; break; } r[1] ^= 1; @@ -450,7 +448,7 @@ void polyn_gf2m::patchup_deg_secure( uint32_t trgt_deg, volatile gf2m patch_elem std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn_gf2m & p, const polyn_gf2m & g, int break_deg) { - std::shared_ptr<GF2m_Field> msp_field = g.msp_field; + std::shared_ptr<GF2m_Field> m_sp_field = g.m_sp_field; int i, j, dr, du, delta; gf2m a; polyn_gf2m aux; @@ -461,10 +459,10 @@ std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn BOTAN_ASSERT(dr > 3, "Valid polynomial"); - polyn_gf2m r0(dr, g.msp_field); - polyn_gf2m r1(dr - 1, g.msp_field); - polyn_gf2m u0(dr - 1, g.msp_field); - polyn_gf2m u1(dr - 1, g.msp_field); + polyn_gf2m r0(dr, g.m_sp_field); + polyn_gf2m r1(dr - 1, g.m_sp_field); + polyn_gf2m u0(dr - 1, g.m_sp_field); + polyn_gf2m u1(dr - 1, g.m_sp_field); r0 = g; r1 = p; @@ -490,19 +488,19 @@ std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn for (j = delta; j >= 0; --j) { - a = msp_field->gf_div(r0[dr + j], r1[dr]); + a = m_sp_field->gf_div(r0[dr + j], r1[dr]); if (a != 0) { - gf2m la = msp_field->gf_log(a); + gf2m la = m_sp_field->gf_log(a); // u0(z) <- u0(z) + a * u1(z) * z^j for (i = 0; i <= du; ++i) { - u0[i + j] ^= msp_field->gf_mul_zrz(la, u1[i]); + u0[i + j] ^= m_sp_field->gf_mul_zrz(la, u1[i]); } // r0(z) <- r0(z) + a * r1(z) * z^j for (i = 0; i <= dr; ++i) { - r0[i + j] ^= msp_field->gf_mul_zrz(la, r1[i]); + r0[i + j] ^= m_sp_field->gf_mul_zrz(la, r1[i]); } } } // end loop over j @@ -573,7 +571,7 @@ std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn */ // Condition for the coefficient to Y to be cancelled out by the // addition of Y before the square root computation: - int cond_u1 = msp_field->gf_mul(u0.coeff[1], msp_field->gf_inv(r0.coeff[0])) == 1; + int cond_u1 = m_sp_field->gf_mul(u0.coeff[1], m_sp_field->gf_inv(r0.coeff[0])) == 1; // Condition sigma_3 = 0: int cond_u3 = u0.coeff[3] == 0; @@ -588,7 +586,7 @@ std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn { uint32_t mask = 0; int cond_r= r0.get_degree() == 0; - int cond_u1 = msp_field->gf_mul(u0.coeff[1], msp_field->gf_inv(r0.coeff[0])) == 1; + int cond_u1 = m_sp_field->gf_mul(u0.coeff[1], m_sp_field->gf_inv(r0.coeff[0])) == 1; int cond_u3 = u0.coeff[3] == 0; int cond_u5 = u0.coeff[5] == 0; @@ -602,7 +600,7 @@ std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn { uint32_t mask = 0; int cond_r= r0.get_degree() == 0; - int cond_u1 = msp_field->gf_mul(u0[1], msp_field->gf_inv(r0[0])) == 1; + int cond_u1 = m_sp_field->gf_mul(u0[1], m_sp_field->gf_inv(r0[0])) == 1; int cond_u3 = u0.coeff[3] == 0; int cond_u5 = u0.coeff[5] == 0; @@ -641,7 +639,7 @@ std::pair<polyn_gf2m, polyn_gf2m> polyn_gf2m::eea_with_coefficients( const polyn polyn_gf2m::polyn_gf2m(int t, Botan::RandomNumberGenerator& rng, std::shared_ptr<GF2m_Field> sp_field) :m_deg(t), coeff(t+1), - msp_field(sp_field) + m_sp_field(sp_field) { (*this).set_coef( t, 1); int degree = 0; @@ -663,13 +661,13 @@ void polyn_gf2m::poly_shiftmod( const polyn_gf2m & g) { throw Invalid_Argument("shiftmod cannot be called on polynomials of degree 1 or less"); } - std::shared_ptr<GF2m_Field> field = g.msp_field; + std::shared_ptr<GF2m_Field> field = g.m_sp_field; int t = g.get_degree(); gf2m a = field->gf_div(this->coeff[t-1], g.coeff[t]); for (int i = t - 1; i > 0; --i) { - this->coeff[i] = this->coeff[i - 1] ^ this->msp_field->gf_mul(a, g.coeff[i]); + this->coeff[i] = this->coeff[i - 1] ^ this->m_sp_field->gf_mul(a, g.coeff[i]); } this->coeff[0] = field->gf_mul(a, g.coeff[0]); } @@ -678,7 +676,7 @@ std::vector<polyn_gf2m> polyn_gf2m::sqrt_mod_init(const polyn_gf2m & g) { uint32_t i, t; uint32_t nb_polyn_sqrt_mat; - std::shared_ptr<GF2m_Field> msp_field = g.msp_field; + std::shared_ptr<GF2m_Field> m_sp_field = g.m_sp_field; std::vector<polyn_gf2m> result; t = g.get_degree(); nb_polyn_sqrt_mat = t/2; @@ -691,7 +689,7 @@ std::vector<polyn_gf2m> polyn_gf2m::sqrt_mod_init(const polyn_gf2m & g) (*&p).set_coef( 1, 1); // q(z) = 0, p(z) = z - for (i = 0; i < t * msp_field->get_extension_degree() - 1; ++i) + for (i = 0; i < t * m_sp_field->get_extension_degree() - 1; ++i) { // q(z) <- p(z)^2 mod g(z) polyn_gf2m q = p.sqmod(sq_aux, t); @@ -725,7 +723,7 @@ std::vector<polyn_gf2m> syndrome_init(polyn_gf2m const& generator, std::vector<g gf2m a; - std::shared_ptr<GF2m_Field> msp_field = generator.msp_field; + std::shared_ptr<GF2m_Field> m_sp_field = generator.m_sp_field; std::vector<polyn_gf2m> result; t = generator.get_degree(); @@ -735,25 +733,25 @@ std::vector<polyn_gf2m> syndrome_init(polyn_gf2m const& generator, std::vector<g for(j=0;j<n;j++) { - result.push_back(polyn_gf2m( t-1, msp_field)); + result.push_back(polyn_gf2m( t-1, m_sp_field)); (*&result[j]).set_coef(t-1,1); for(i=t-2;i>=0;i--) { (*&result[j]).set_coef(i, (generator)[i+1] ^ - msp_field->gf_mul(lex_to_gray(support[j]),result[j][i+1])); + m_sp_field->gf_mul(lex_to_gray(support[j]),result[j][i+1])); } - a = ((generator)[0] ^ msp_field->gf_mul(lex_to_gray(support[j]),result[j][0])); + a = ((generator)[0] ^ m_sp_field->gf_mul(lex_to_gray(support[j]),result[j][0])); for(i=0;i<t;i++) { - (*&result[j]).set_coef(i, msp_field->gf_div(result[j][i],a)); + (*&result[j]).set_coef(i, m_sp_field->gf_div(result[j][i],a)); } } return result; } polyn_gf2m::polyn_gf2m(const secure_vector<uint8_t>& encoded, std::shared_ptr<GF2m_Field> sp_field ) - :msp_field(sp_field) + :m_sp_field(sp_field) { if(encoded.size() % 2) { @@ -782,8 +780,8 @@ secure_vector<uint8_t> polyn_gf2m::encode() const for(unsigned i = 0; i < len; i++) { // "big endian" encoding of the GF(2^m) elements - result.push_back(coeff[i] >> 8); - result.push_back(coeff[i]); + result.push_back(get_byte(0, coeff[i])); + result.push_back(get_byte(1, coeff[i])); } return result; } @@ -791,7 +789,7 @@ secure_vector<uint8_t> polyn_gf2m::encode() const void polyn_gf2m::swap(polyn_gf2m& other) { std::swap(this->m_deg, other.m_deg); - std::swap(this->msp_field, other.msp_field); + std::swap(this->m_sp_field, other.m_sp_field); std::swap(this->coeff, other.coeff); } diff --git a/src/lib/pubkey/mce/polyn_gf2m.h b/src/lib/pubkey/mce/polyn_gf2m.h index 757a5883e..f2d3ac53c 100644 --- a/src/lib/pubkey/mce/polyn_gf2m.h +++ b/src/lib/pubkey/mce/polyn_gf2m.h @@ -73,7 +73,7 @@ class polyn_gf2m polyn_gf2m(int t, RandomNumberGenerator& rng, std::shared_ptr<GF2m_Field> sp_field); std::shared_ptr<GF2m_Field> get_sp_field() const - { return msp_field; } + { return m_sp_field; } gf2m& operator[](size_t i) { return coeff[i]; } @@ -153,7 +153,7 @@ class polyn_gf2m secure_vector<gf2m> coeff; // public member variable: - std::shared_ptr<GF2m_Field> msp_field; + std::shared_ptr<GF2m_Field> m_sp_field; }; gf2m random_gf2m(RandomNumberGenerator& rng); |