aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/pubkey/mce
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/pubkey/mce')
-rw-r--r--src/lib/pubkey/mce/binary_matrix.cpp3
-rw-r--r--src/lib/pubkey/mce/binary_matrix.h3
-rw-r--r--src/lib/pubkey/mce/code_based_key_gen.cpp6
-rw-r--r--src/lib/pubkey/mce/goppa_code.cpp2
-rw-r--r--src/lib/pubkey/mce/mceliece.cpp8
-rw-r--r--src/lib/pubkey/mce/mceliece.h10
-rw-r--r--src/lib/pubkey/mce/polyn_gf2m.cpp9
7 files changed, 18 insertions, 23 deletions
diff --git a/src/lib/pubkey/mce/binary_matrix.cpp b/src/lib/pubkey/mce/binary_matrix.cpp
index 30d04b987..12c842669 100644
--- a/src/lib/pubkey/mce/binary_matrix.cpp
+++ b/src/lib/pubkey/mce/binary_matrix.cpp
@@ -19,8 +19,7 @@ binary_matrix::binary_matrix (u32bit rown, u32bit coln)
m_coln = coln;
m_rown = rown;
m_rwdcnt = (1 + (m_coln - 1) / BITS_PER_U32);
- m_alloc_size = m_rown * (*this).m_rwdcnt * sizeof (u32bit);
- m_elem = std::vector<u32bit>((*this).m_alloc_size/4);
+ m_elem = std::vector<u32bit>(m_rown * m_rwdcnt);
}
void binary_matrix::row_xor(u32bit a, u32bit b)
diff --git a/src/lib/pubkey/mce/binary_matrix.h b/src/lib/pubkey/mce/binary_matrix.h
index 29d09cf45..feb44632f 100644
--- a/src/lib/pubkey/mce/binary_matrix.h
+++ b/src/lib/pubkey/mce/binary_matrix.h
@@ -46,13 +46,12 @@ struct binary_matrix
void set_to_zero()
{
- std::memset(&m_elem[0], 0, m_alloc_size);
+ zeroise(m_elem);
}
u32bit m_rown; // number of rows.
u32bit m_coln; // number of columns.
u32bit m_rwdcnt; // number of words in a row
- u32bit m_alloc_size; // number of allocated bytes
std::vector<u32bit> m_elem;
};
diff --git a/src/lib/pubkey/mce/code_based_key_gen.cpp b/src/lib/pubkey/mce/code_based_key_gen.cpp
index 3936e6960..150f9b2ee 100644
--- a/src/lib/pubkey/mce/code_based_key_gen.cpp
+++ b/src/lib/pubkey/mce/code_based_key_gen.cpp
@@ -173,10 +173,10 @@ McEliece_PrivateKey generate_mceliece_key( RandomNumberGenerator & rng, u32bit e
{
Linv[L[i]] = i;
}
- std::vector<byte> pubmat (R->m_alloc_size);
- for(i = 0; i < R->m_alloc_size/4; i++)
+ std::vector<byte> pubmat (R->m_elem.size() * 4);
+ for(i = 0; i < R->m_elem.size(); i++)
{
- store_le(R->m_elem[i], &pubmat[i*4] );
+ store_le(R->m_elem[i], &pubmat[i*4]);
}
return McEliece_PrivateKey(g, H, sqrtmod, Linv, pubmat);
diff --git a/src/lib/pubkey/mce/goppa_code.cpp b/src/lib/pubkey/mce/goppa_code.cpp
index bb335e994..59e8ab97d 100644
--- a/src/lib/pubkey/mce/goppa_code.cpp
+++ b/src/lib/pubkey/mce/goppa_code.cpp
@@ -179,7 +179,7 @@ secure_vector<byte> mceliece_decrypt(
secure_vector<byte> cleartext(cleartext_len);
- std::memcpy(&cleartext[0], ciphertext, cleartext_len);
+ copy_mem(&cleartext[0], ciphertext, cleartext_len);
for(u32bit i = 0; i < nb_err; i++)
{
diff --git a/src/lib/pubkey/mce/mceliece.cpp b/src/lib/pubkey/mce/mceliece.cpp
index d0c36a92e..15a6f5ea8 100644
--- a/src/lib/pubkey/mce/mceliece.cpp
+++ b/src/lib/pubkey/mce/mceliece.cpp
@@ -26,8 +26,8 @@ void concat_vectors(unsigned char* x, const unsigned char* a, const unsigned cha
{
if(dimension % 8 == 0)
{
- std::memcpy(x, a, bit_size_to_byte_size(dimension));
- std::memcpy(((unsigned char *) x) + bit_size_to_byte_size(dimension), b, bit_size_to_byte_size(codimension));
+ copy_mem(x, a, bit_size_to_byte_size(dimension));
+ copy_mem(((unsigned char *) x) + bit_size_to_byte_size(dimension), b, bit_size_to_byte_size(codimension));
}
else
{
@@ -35,7 +35,7 @@ void concat_vectors(unsigned char* x, const unsigned char* a, const unsigned cha
i = dimension - 8 * (dimension/ 8);
j = 8 - i;
l = dimension / 8;
- std::memcpy(x, a, 1 * (dimension / 8));
+ copy_mem(x, a, 1 * (dimension / 8));
x[l] = ((byte) (a[l] & ((1 << i) - 1)));
for(k = 0; k < codimension / 8; ++k)
@@ -149,7 +149,7 @@ secure_vector<byte> McEliece_Public_Operation::encrypt(const byte msg[], size_t
std::vector<byte> ciphertext_tmp = mceliece_encrypt( message_word, m_pub_key.get_public_matrix(), err_pos, m_code_length);
- std::memcpy(&ciphertext[0], &ciphertext_tmp[0], ciphertext.size());
+ copy_mem(&ciphertext[0], &ciphertext_tmp[0], ciphertext.size());
return ciphertext;
}
diff --git a/src/lib/pubkey/mce/mceliece.h b/src/lib/pubkey/mce/mceliece.h
index 649153233..c77dfe5b1 100644
--- a/src/lib/pubkey/mce/mceliece.h
+++ b/src/lib/pubkey/mce/mceliece.h
@@ -37,7 +37,7 @@ class mceliece_message_parts
m_code_length(code_length)
{
m_message_word.resize(message_length);
- std::memcpy(&m_message_word[0], message, message_length);
+ copy_mem(&m_message_word[0], message, message_length);
};
mceliece_message_parts(const secure_vector<gf2m>& err_pos, const secure_vector<byte>& message, unsigned code_length)
@@ -70,16 +70,16 @@ class mceliece_message_parts
}
size_t err_vec_start_pos = message_concat_errors_len - err_vec_len;
m_message_word = secure_vector<byte>(err_vec_start_pos );
- std::memcpy(&m_message_word[0], &message_concat_errors[0], err_vec_start_pos);
+ copy_mem(&m_message_word[0], &message_concat_errors[0], err_vec_start_pos);
m_error_vector = secure_vector<byte>(err_vec_len );
- std::memcpy(&m_error_vector[0], &message_concat_errors[err_vec_start_pos], err_vec_len);
+ copy_mem(&m_error_vector[0], &message_concat_errors[err_vec_start_pos], err_vec_len);
};
secure_vector<byte> get_concat() const
{
secure_vector<byte> result(m_error_vector.size() + m_message_word.size());
- std::memcpy(&result[0], &m_message_word[0], m_message_word.size());
- std::memcpy(&result[m_message_word.size()], &m_error_vector[0], m_error_vector.size());
+ copy_mem(&result[0], &m_message_word[0], m_message_word.size());
+ copy_mem(&result[m_message_word.size()], &m_error_vector[0], m_error_vector.size());
return result;
};
secure_vector<gf2m> get_error_positions() const
diff --git a/src/lib/pubkey/mce/polyn_gf2m.cpp b/src/lib/pubkey/mce/polyn_gf2m.cpp
index e340e29e8..489332069 100644
--- a/src/lib/pubkey/mce/polyn_gf2m.cpp
+++ b/src/lib/pubkey/mce/polyn_gf2m.cpp
@@ -10,9 +10,6 @@
*/
#include <botan/polyn_gf2m.h>
-#include <cstring>
-#include <iostream>
-
#include <botan/gf2m_rootfind_dcmp.h>
#include <botan/code_based_util.h>
#include <botan/gf2m_small_m.h>
@@ -219,7 +216,7 @@ void polyn_gf2m::encode(u32bit min_numo_coeffs, byte* mem, u32bit mem_len) const
void polyn_gf2m::set_to_zero()
{
- memset(&this->coeff[0], 0, this->coeff.size() * sizeof (gf2m));
+ clear_mem(&this->coeff[0], this->coeff.size());
this->m_deg = -1;
}
@@ -304,8 +301,8 @@ std::vector<polyn_gf2m> polyn_gf2m::sqmod_init(const polyn_gf2m & g)
for (; i < d; ++i)
{
- memset(&sq[i].coeff[0], 0, 2 * sizeof (gf2m));
- memcpy(&sq[i].coeff[0] + 2, &sq[i - 1].coeff[0], d * sizeof (gf2m));
+ clear_mem(&sq[i].coeff[0], 2);
+ copy_mem(&sq[i].coeff[0] + 2, &sq[i - 1].coeff[0], d);
sq[i].set_degree( sq[i - 1].get_degree() + 2);
polyn_gf2m::remainder(sq[i], g);
}