diff options
author | lloyd <[email protected]> | 2010-09-07 23:40:31 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2010-09-07 23:40:31 +0000 |
commit | 197f7cd4f744ae8246832343dc514296632554b2 (patch) | |
tree | 63963dfab01e29ce32be4c1d43e62506d9f0246d /src/math | |
parent | 5f83d344e49a6d62cd8989d9fb8f8ca80ed48fc1 (diff) |
Big, invasive but mostly automated change, with a further attempt at
harmonising MemoryRegion with std::vector:
The MemoryRegion::clear() function would zeroise the buffer, but keep
the memory allocated and the size unchanged. This is very different
from STL's clear(), which is basically the equivalent to what is
called destroy() in MemoryRegion. So to be able to replace MemoryRegion
with a std::vector, we have to rename destroy() to clear() and we have
to expose the current functionality of clear() in some other way, since
vector doesn't support this operation. Do so by adding a global function
named zeroise() which takes a MemoryRegion which is zeroed. Remove clear()
to ensure all callers are updated.
Diffstat (limited to 'src/math')
-rw-r--r-- | src/math/bigint/big_ops2.cpp | 6 | ||||
-rw-r--r-- | src/math/bigint/bigint.cpp | 2 | ||||
-rw-r--r-- | src/math/bigint/bigint.h | 2 | ||||
-rw-r--r-- | src/math/numbertheory/point_gfp.cpp | 4 | ||||
-rw-r--r-- | src/math/numbertheory/powm_mnt.cpp | 8 |
5 files changed, 11 insertions, 11 deletions
diff --git a/src/math/bigint/big_ops2.cpp b/src/math/bigint/big_ops2.cpp index cc50c26e5..193c00e32 100644 --- a/src/math/bigint/big_ops2.cpp +++ b/src/math/bigint/big_ops2.cpp @@ -37,7 +37,7 @@ BigInt& BigInt::operator+=(const BigInt& y) } else if(relative_size == 0) { - get_reg().clear(); + zeroise(reg); set_sign(Positive); } else if(relative_size > 0) @@ -72,7 +72,7 @@ BigInt& BigInt::operator-=(const BigInt& y) { if(sign() == y.sign()) { - get_reg().clear(); + clear(); set_sign(Positive); } else @@ -99,7 +99,7 @@ BigInt& BigInt::operator*=(const BigInt& y) if(x_sw == 0 || y_sw == 0) { - get_reg().clear(); + clear(); set_sign(Positive); } else if(x_sw == 1 && y_sw) diff --git a/src/math/bigint/bigint.cpp b/src/math/bigint/bigint.cpp index 1ae8be130..2ac387a97 100644 --- a/src/math/bigint/bigint.cpp +++ b/src/math/bigint/bigint.cpp @@ -348,7 +348,7 @@ void BigInt::binary_decode(const byte buf[], u32bit length) { const u32bit WORD_BYTES = sizeof(word); - reg.clear(); + clear(); reg.resize(round_up<u32bit>((length / WORD_BYTES) + 1, 8)); for(u32bit j = 0; j != length / WORD_BYTES; ++j) diff --git a/src/math/bigint/bigint.h b/src/math/bigint/bigint.h index 64bf20068..9ce71aeca 100644 --- a/src/math/bigint/bigint.h +++ b/src/math/bigint/bigint.h @@ -140,7 +140,7 @@ class BOTAN_DLL BigInt /** * Zeroize the BigInt */ - void clear() { get_reg().clear(); } + void clear() { zeroise(reg); } /** * Compare this to another BigInt diff --git a/src/math/numbertheory/point_gfp.cpp b/src/math/numbertheory/point_gfp.cpp index 6e62a9a13..93e3392ea 100644 --- a/src/math/numbertheory/point_gfp.cpp +++ b/src/math/numbertheory/point_gfp.cpp @@ -46,7 +46,7 @@ void PointGFp::monty_mult(BigInt& z, const u32bit p_size = curve.get_p_words(); const word p_dash = curve.get_p_dash(); - workspace.clear(); + zeroise(workspace); bigint_mul(workspace, workspace.size(), 0, x.data(), x.size(), x.sig_words(), @@ -73,7 +73,7 @@ void PointGFp::monty_sqr(BigInt& z, const BigInt& x, const u32bit p_size = curve.get_p_words(); const word p_dash = curve.get_p_dash(); - workspace.clear(); + zeroise(workspace); bigint_sqr(workspace, workspace.size(), 0, x.data(), x.size(), x.sig_words()); diff --git a/src/math/numbertheory/powm_mnt.cpp b/src/math/numbertheory/powm_mnt.cpp index cce142020..80582eaa8 100644 --- a/src/math/numbertheory/powm_mnt.cpp +++ b/src/math/numbertheory/powm_mnt.cpp @@ -66,7 +66,7 @@ void Montgomery_Exponentiator::set_base(const BigInt& base) const BigInt& y = g[j-1]; const u32bit y_sig = y.sig_words(); - z.clear(); + zeroise(z); bigint_mul(z.begin(), z.size(), workspace, x.data(), x.size(), x_sig, y.data(), y.size(), y_sig); @@ -90,7 +90,7 @@ BigInt Montgomery_Exponentiator::execute() const { for(u32bit k = 0; k != window_bits; ++k) { - z.clear(); + zeroise(z); bigint_sqr(z.begin(), z.size(), workspace, x.data(), x.size(), x.sig_words()); @@ -102,7 +102,7 @@ BigInt Montgomery_Exponentiator::execute() const { const BigInt& y = g[nibble-1]; - z.clear(); + zeroise(z); bigint_mul(z.begin(), z.size(), workspace, x.data(), x.size(), x.sig_words(), y.data(), y.size(), y.sig_words()); @@ -111,7 +111,7 @@ BigInt Montgomery_Exponentiator::execute() const } } - z.clear(); + zeroise(z); z.copy(x.data(), x.size()); montgomery_reduce(x, z, modulus, mod_words, mod_prime); |