Botan  1.10.9
Public Member Functions | Protected Member Functions | List of all members
Botan::MemoryVector< T > Class Template Reference

#include <secmem.h>

Inheritance diagram for Botan::MemoryVector< T >:
Botan::MemoryRegion< T >

Public Member Functions

T * begin ()
 
const T * begin () const
 
void clear ()
 
void copy (const T in[], size_t n)
 
void copy (size_t off, const T in[], size_t n)
 
bool empty () const
 
T * end ()
 
const T * end () const
 
 MemoryVector (size_t n=0)
 
 MemoryVector (const T in[], size_t n)
 
 MemoryVector (const MemoryRegion< T > &in)
 
 operator const T * () const
 
 operator T * ()
 
bool operator!= (const MemoryRegion< T > &other) const
 
bool operator< (const MemoryRegion< T > &other) const
 
MemoryVector< T > & operator= (const MemoryRegion< T > &in)
 
bool operator== (const MemoryRegion< T > &other) const
 
void push_back (T x)
 
void resize (size_t n)
 
size_t size () const
 
void swap (MemoryRegion< T > &other)
 

Protected Member Functions

void init (bool locking, size_t length=0)
 

Detailed Description

template<typename T>
class Botan::MemoryVector< T >

This class represents variable length buffers that do not make use of memory locking.

Definition at line 267 of file secmem.h.

Constructor & Destructor Documentation

template<typename T>
Botan::MemoryVector< T >::MemoryVector ( size_t  n = 0)
inline

Create a buffer of the specified length.

Parameters
nthe length of the buffer to create.

Definition at line 289 of file secmem.h.

289 { this->init(false, n); }
BigInt n
Definition: numthry.cpp:26
void init(bool locking, size_t length=0)
Definition: secmem.h:189
template<typename T>
Botan::MemoryVector< T >::MemoryVector ( const T  in[],
size_t  n 
)
inline

Create a buffer with the specified contents.

Parameters
inthe array containing the data to be initially copied into the newly created buffer
nthe size of the arry in

Definition at line 297 of file secmem.h.

298  {
299  this->init(false);
300  this->resize(n);
301  this->copy(in, n);
302  }
void resize(size_t n)
Definition: secmem.h:211
BigInt n
Definition: numthry.cpp:26
void copy(const T in[], size_t n)
Definition: secmem.h:120
void init(bool locking, size_t length=0)
Definition: secmem.h:189
template<typename T>
Botan::MemoryVector< T >::MemoryVector ( const MemoryRegion< T > &  in)
inline

Copy constructor.

Definition at line 307 of file secmem.h.

308  {
309  this->init(false);
310  this->resize(in.size());
311  this->copy(&in[0], in.size());
312  }
void resize(size_t n)
Definition: secmem.h:211
void copy(const T in[], size_t n)
Definition: secmem.h:120
void init(bool locking, size_t length=0)
Definition: secmem.h:189

Member Function Documentation

template<typename T>
T* Botan::MemoryRegion< T >::begin ( )
inlineinherited
template<typename T>
const T* Botan::MemoryRegion< T >::begin ( ) const
inlineinherited

Get a constant pointer to the first element in the buffer.

Returns
constant pointer to the first element in the buffer

Definition at line 59 of file secmem.h.

59 { return buf; }
template<typename T>
void Botan::MemoryRegion< T >::clear ( )
inlineinherited
template<typename T>
void Botan::MemoryRegion< T >::copy ( const T  in[],
size_t  n 
)
inlineinherited

Copy the contents of an array of objects of type T into this buffer. The former contents of *this are discarded. The length of *this must be at least n, otherwise memory errors occur.

Parameters
inthe array to copy the contents from
nthe length of in

Definition at line 120 of file secmem.h.

Referenced by Botan::MDx_HashFunction::add_data(), Botan::BigInt::BigInt(), Botan::OctetString::change(), Botan::MemoryRegion< word >::MemoryRegion(), Botan::MemoryVector< byte >::MemoryVector(), Botan::MemoryRegion< word >::operator=(), Botan::MemoryVector< byte >::operator=(), Botan::SecureVector< word >::operator=(), Botan::operator^(), Botan::SecureVector< word >::SecureVector(), Botan::Record_Writer::send(), Botan::OFB::set_iv(), Botan::CTR_BE::set_iv(), Botan::Base64_Encoder::write(), and Botan::Hex_Encoder::write().

121  {
122  copy_mem(buf, in, std::min(n, size()));
123  }
BigInt n
Definition: numthry.cpp:26
size_t size() const
Definition: secmem.h:29
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:22
template<typename T>
void Botan::MemoryRegion< T >::copy ( size_t  off,
const T  in[],
size_t  n 
)
inlineinherited

Copy the contents of an array of objects of type T into this buffer. The former contents of *this are discarded. The length of *this must be at least n, otherwise memory errors occur.

Parameters
offthe offset position inside this buffer to start inserting the copied bytes
inthe array to copy the contents from
nthe length of in

Definition at line 134 of file secmem.h.

135  {
136  copy_mem(buf + off, in, std::min(n, size() - off));
137  }
BigInt n
Definition: numthry.cpp:26
size_t size() const
Definition: secmem.h:29
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:22
template<typename T>
bool Botan::MemoryRegion< T >::empty ( ) const
inlineinherited

Find out whether this buffer is empty.

Returns
true if the buffer is empty, false otherwise

Definition at line 35 of file secmem.h.

Referenced by Botan::BER_Decoder::decode(), Botan::X509_DN::encode_into(), Botan::PK_Verifier_Filter::end_msg(), Botan::X509::load_key(), and Botan::CMS_Encoder::set_data().

35 { return (used == 0); }
template<typename T>
T* Botan::MemoryRegion< T >::end ( )
inlineinherited

Get a pointer to one past the last element in the buffer.

Returns
pointer to one past the last element in the buffer

Definition at line 65 of file secmem.h.

65 { return (buf + size()); }
size_t size() const
Definition: secmem.h:29
template<typename T>
const T* Botan::MemoryRegion< T >::end ( ) const
inlineinherited

Get a const pointer to one past the last element in the buffer.

Returns
const pointer to one past the last element in the buffer

Definition at line 71 of file secmem.h.

71 { return (buf + size()); }
size_t size() const
Definition: secmem.h:29
template<typename T>
void Botan::MemoryRegion< T >::init ( bool  locking,
size_t  length = 0 
)
inlineprotectedinherited
Parameters
lockingshould we use a locking allocator
lengththe initial length to use

Definition at line 189 of file secmem.h.

Referenced by Botan::MemoryVector< byte >::MemoryVector(), and Botan::SecureVector< word >::SecureVector().

190  { alloc = Allocator::get(locking); resize(length); }
void resize(size_t n)
Definition: secmem.h:211
static Allocator * get(bool locking)
Definition: defalloc.cpp:90
template<typename T>
Botan::MemoryRegion< T >::operator const T * ( ) const
inlineinherited

Get a constant pointer to the first element in the buffer.

Returns
constant pointer to the first element in the buffer

Definition at line 47 of file secmem.h.

47 { return buf; }
template<typename T>
Botan::MemoryRegion< T >::operator T * ( )
inlineinherited

Get a pointer to the first element in the buffer.

Returns
pointer to the first element in the buffer

Definition at line 41 of file secmem.h.

41 { return buf; }
template<typename T>
bool Botan::MemoryRegion< T >::operator!= ( const MemoryRegion< T > &  other) const
inlineinherited

Check two buffers for inequality.

Returns
false if the content of both buffers is byte-wise equal, true otherwise.

Definition at line 94 of file secmem.h.

95  { return (!(*this == other)); }
template<typename T>
bool Botan::MemoryRegion< T >::operator< ( const MemoryRegion< T > &  other) const
inherited

Compare two buffers

Returns
true iff this is ordered before other

Definition at line 233 of file secmem.h.

References Botan::MemoryRegion< T >::size().

234  {
235  const size_t min_size = std::min(size(), other.size());
236 
237  // This should probably be rewritten to run in constant time
238  for(size_t i = 0; i != min_size; ++i)
239  {
240  if(buf[i] < other[i])
241  return true;
242  if(buf[i] > other[i])
243  return false;
244  }
245 
246  // First min_size bytes are equal, shorter is first
247  return (size() < other.size());
248  }
size_t size() const
Definition: secmem.h:29
template<typename T>
MemoryVector<T>& Botan::MemoryVector< T >::operator= ( const MemoryRegion< T > &  in)
inline

Copy the contents of another buffer into this buffer.

Parameters
inthe buffer to copy the contents from
Returns
reference to *this

Definition at line 275 of file secmem.h.

276  {
277  if(this != &in)
278  {
279  this->resize(in.size());
280  this->copy(&in[0], in.size());
281  }
282  return (*this);
283  }
void resize(size_t n)
Definition: secmem.h:211
void copy(const T in[], size_t n)
Definition: secmem.h:120
template<typename T>
bool Botan::MemoryRegion< T >::operator== ( const MemoryRegion< T > &  other) const
inlineinherited

Check two buffers for equality.

Returns
true iff the content of both buffers is byte-wise equal

Definition at line 77 of file secmem.h.

78  {
79  return (size() == other.size() &&
80  same_mem(buf, other.buf, size()));
81  }
bool same_mem(const T *p1, const T *p2, size_t n)
Definition: mem_ops.h:57
size_t size() const
Definition: secmem.h:29
template<typename T>
void Botan::MemoryRegion< T >::push_back ( x)
inlineinherited

Append a single element.

Parameters
xthe element to append

Definition at line 143 of file secmem.h.

Referenced by Botan::append_tls_length_value(), Botan::CVC_EAC::create_cvc_req(), Botan::EC2OSP(), Botan::DER_Encoder::encode(), Botan::OID::encode_into(), Botan::make_cvc_cert(), Botan::operator+=(), Botan::BER_Decoder::raw_bytes(), Botan::RTSS_Share::split(), and Botan::HandshakeHash::update().

144  {
145  resize(size() + 1);
146  buf[size()-1] = x;
147  }
void resize(size_t n)
Definition: secmem.h:211
size_t size() const
Definition: secmem.h:29
template<typename T >
void Botan::MemoryRegion< T >::resize ( size_t  n)
inherited

Inserts or erases elements at the end such that the size becomes n, leaving elements in the range 0...n unmodified if set or otherwise zero-initialized

Parameters
nlength of the new buffer

Definition at line 211 of file secmem.h.

References Botan::clear_mem(), Botan::copy_mem(), and n.

Referenced by Botan::ANSI_X931_RNG::ANSI_X931_RNG(), Botan::base64_decode(), Botan::BigInt::BigInt(), Botan::BigInt::binary_decode(), Botan::Buffered_Filter::Buffered_Filter(), Botan::CBC_Decryption::CBC_Decryption(), Botan::CBC_Encryption::CBC_Encryption(), Botan::CFB_Decryption::CFB_Decryption(), Botan::CFB_Encryption::CFB_Encryption(), Botan::OctetString::change(), Botan::MemoryRegion< word >::clear(), Botan::CMAC::CMAC(), Botan::CTS_Decryption::CTS_Decryption(), Botan::CTS_Encryption::CTS_Encryption(), Botan::BER_Decoder::decode(), Botan::divide(), Botan::EAX_Decryption::EAX_Decryption(), Botan::ECB_Decryption::ECB_Decryption(), Botan::ECB_Encryption::ECB_Encryption(), Botan::Montgomery_Exponentiator::execute(), Botan::Entropy_Accumulator::get_io_buffer(), Botan::BER_Decoder::get_next_object(), Botan::Record_Reader::get_record(), Botan::BigInt::grow_reg(), Botan::BigInt::grow_to(), Botan::hex_decode(), Botan::Hex_Decoder::Hex_Decoder(), Botan::Hex_Encoder::Hex_Encoder(), Botan::HMAC::HMAC(), Botan::MemoryRegion< word >::init(), Botan::Lion::Lion(), Botan::MemoryRegion< word >::MemoryRegion(), Botan::MemoryVector< byte >::MemoryVector(), Botan::OFB::OFB(), Botan::operator+=(), Botan::MemoryRegion< word >::operator=(), Botan::MemoryVector< byte >::operator=(), Botan::SecureVector< word >::operator=(), Botan::MemoryRegion< word >::push_back(), Botan::Randpool::Randpool(), Botan::Pipe::read_all(), Botan::SAFER_SK::SAFER_SK(), Botan::SecureVector< word >::SecureVector(), Botan::CMS_Encoder::set_data(), Botan::PK_Verifier_Filter::set_signature(), and Botan::SSL3_MAC::SSL3_MAC().

212  {
213  if(n <= allocated)
214  {
215  size_t zap = std::min(used, n);
216  clear_mem(buf + zap, allocated - zap);
217  used = n;
218  }
219  else
220  {
221  T* new_buf = allocate(n);
222  copy_mem(new_buf, buf, used);
223  deallocate(buf, allocated);
224  buf = new_buf;
225  allocated = used = n;
226  }
227  }
BigInt n
Definition: numthry.cpp:26
void clear_mem(T *ptr, size_t n)
Definition: mem_ops.h:32
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:22
template<typename T>
size_t Botan::MemoryRegion< T >::size ( ) const
inlineinherited

Find out the size of the buffer, i.e. how many objects of type T it contains.

Returns
size of the buffer

Definition at line 29 of file secmem.h.

Referenced by Botan::Data_Store::add(), Botan::MDx_HashFunction::add_data(), Botan::Randpool::add_entropy(), Botan::DER_Encoder::add_object(), Botan::Alert::Alert(), Botan::append_tls_length_value(), Botan::OctetString::as_string(), Botan::base64_encode(), Botan::BigInt::binary_decode(), Botan::check_passhash9(), Botan::PK_Verifier::check_signature(), Botan::Turing::cipher(), Botan::Salsa20::cipher(), Botan::OFB::cipher(), Botan::ARC4::cipher(), Botan::CTR_BE::cipher(), Botan::WiderWake_41_BE::cipher(), Botan::MD5::compress_n(), Botan::MemoryRegion< word >::copy(), Botan::BER::decode(), Botan::BER_Decoder::decode(), Botan::EME::decode(), Botan::BigInt::decode(), Botan::decode_concatenation(), Botan::OID::decode_from(), Botan::EAC_Time::decode_from(), Botan::AlternativeName::decode_from(), Botan::BER_Decoder::decode_null(), Botan::BER_Decoder::decode_octet_string_bigint(), Botan::CryptoBox::decrypt(), Botan::PK_Decryptor::decrypt(), Botan::RC5::decrypt_n(), Botan::X942_PRF::derive(), Botan::KDF2::derive(), Botan::KDF::derive_key(), Botan::OpenPGP_S2K::derive_key(), Botan::PKCS5_PBKDF1::derive_key(), Botan::PK_Key_Agreement::derive_key(), Botan::PEM_Code::encode(), Botan::DER_Encoder::encode(), Botan::EME::encode(), Botan::EMSA3::encoding_of(), Botan::CryptoBox::encrypt(), Botan::PK_Encryptor::encrypt(), Botan::RC5::encrypt_n(), Botan::MemoryRegion< word >::end(), Botan::Zlib_Compression::end_msg(), Botan::Bzip_Compression::end_msg(), Botan::Bzip_Decompression::end_msg(), Botan::Zlib_Decompression::end_msg(), Botan::Hash_Filter::end_msg(), Botan::MAC_Filter::end_msg(), Botan::DataSource_Memory::end_of_data(), Botan::Montgomery_Exponentiator::execute(), Botan::MDx_HashFunction::final_result(), Botan::Certificate_Store_Memory::find_cert_by_subject_and_key_id(), Botan::Certificate_Store_Memory::find_crl_by_subject_and_key_id(), Botan::Bzip_Compression::flush(), Botan::Zlib_Compression::flush(), Botan::generate_dsa_primes(), Botan::generate_passhash9(), Botan::CMS_Decoder::get_data(), Botan::Record_Reader::get_record(), Botan::GOST_3410_PublicKey::GOST_3410_PublicKey(), Botan::Hex_Decoder::Hex_Decoder(), Botan::hex_encode(), Botan::Hex_Encoder::Hex_Encoder(), Botan::ANSI_X931_RNG::is_seeded(), Botan::MGF1::mask(), Botan::PEM_Code::matches(), Botan::EME1::maximum_input_size(), Botan::MemoryRegion< word >::MemoryRegion(), Botan::MemoryVector< byte >::MemoryVector(), Botan::BigInt::operator*=(), Botan::BigInt::operator+=(), Botan::operator+=(), Botan::MemoryRegion< T >::operator<(), Botan::operator<<(), Botan::MemoryRegion< word >::operator=(), Botan::MemoryVector< byte >::operator=(), Botan::SecureVector< word >::operator=(), Botan::MemoryRegion< word >::operator==(), Botan::operator>>(), Botan::OS2ECP(), Botan::OSSL_BN::OSSL_BN(), Botan::DataSource_Memory::peek(), Botan::DataSource_Stream::peek(), Botan::FTW_EntropySource::poll(), Botan::Win32_CAPI_EntropySource::poll(), Botan::Device_EntropySource::poll(), Botan::Unix_EntropySource::poll(), Botan::CMAC::poly_double(), Botan::Client_Key_Exchange::pre_master_secret(), Botan::Buffered_Computation::process(), Botan::Pipe::process_msg(), Botan::MemoryRegion< word >::push_back(), Botan::random_prime(), Botan::RandomNumberGenerator::random_vec(), Botan::ANSI_X931_RNG::randomize(), Botan::Randpool::randomize(), Botan::BigInt::randomize(), Botan::DER_Encoder::raw_bytes(), Botan::DataSource_Memory::read(), Botan::Pipe::read_all(), Botan::Pipe::read_all_as_string(), Botan::TLS_Data_Reader::remaining_bytes(), Botan::Randpool::reseed(), Botan::rfc3394_keyunwrap(), Botan::rfc3394_keywrap(), Botan::SecureVector< word >::SecureVector(), Botan::HandshakeMessage::send(), Botan::Record_Writer::send(), Botan::Filter::send(), Botan::Montgomery_Exponentiator::set_base(), Botan::Turing::set_iv(), Botan::EAX_Base::set_iv(), Botan::WiderWake_41_BE::set_iv(), Botan::OctetString::set_odd_parity(), Botan::CMS_Encoder::sign(), Botan::PK_Signer::sign_message(), Botan::PK_Signer::signature(), Botan::RTSS_Share::split(), Botan::BER_Decoder::start_cons(), Botan::ASN1::to_string(), Botan::RTSS_Share::to_string(), Botan::Buffered_Computation::update(), Botan::PK_Signer::update(), Botan::PK_Verifier::update(), Botan::EMSA3::verify(), Botan::MessageAuthenticationCode::verify_mac(), Botan::PK_Verifier::verify_message(), Botan::Zlib_Compression::write(), Botan::Bzip_Compression::write(), Botan::Base64_Encoder::write(), Botan::Buffered_Filter::write(), Botan::Hex_Encoder::write(), Botan::StreamCipher_Filter::write(), Botan::Bzip_Decompression::write(), Botan::Zlib_Decompression::write(), Botan::Hex_Decoder::write(), Botan::Base64_Decoder::write(), Botan::Pipe::write(), and Botan::zeroise().

29 { return used; }
template<typename T>
void Botan::MemoryRegion< T >::swap ( MemoryRegion< T > &  other)
inherited

Swap this buffer with another object.

Definition at line 254 of file secmem.h.

References alloc, and std::swap().

Referenced by Botan::PointGFp::swap(), std::swap(), and Botan::BigInt::swap().

255  {
256  std::swap(buf, x.buf);
257  std::swap(used, x.used);
258  std::swap(allocated, x.allocated);
259  std::swap(alloc, x.alloc);
260  }
void swap(Botan::MemoryRegion< T > &x, Botan::MemoryRegion< T > &y)
Definition: secmem.h:425

The documentation for this class was generated from the following file: