Disk ARchive 2.7.16
Full featured and portable backup and archiving tool
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
libdar::secu_string Class Reference

class secu_string More...

#include <secu_string.hpp>

+ Collaboration diagram for libdar::secu_string:

Public Member Functions

 secu_string (U_I storage_size=0)
 constructor 1 More...
 
 secu_string (const char *ptr, U_I size)
 constructor 2 More...
 
 secu_string (const secu_string &ref)
 the copy constructor More...
 
 secu_string (secu_string &&ref) noexcept
 the move constructor More...
 
secu_stringoperator= (const secu_string &ref)
 the assignment operator More...
 
secu_stringoperator= (secu_string &&ref) noexcept
 the move operator More...
 
 ~secu_string () noexcept
 the destructor (set memory to zero before releasing it) More...
 
bool operator!= (const std::string &ref) const
 
bool operator!= (const secu_string &ref) const
 
bool operator== (const std::string &ref) const
 
bool operator== (const secu_string &ref) const
 
void set (int fd, U_I size)
 fill the object with data More...
 
void append_at (U_I offset, const char *ptr, U_I size)
 append some data to the string at a given offset More...
 
void append_at (U_I offset, int fd, U_I size)
 append some data to the string
 
void append (const char *ptr, U_I size)
 append some data at the end of the string More...
 
void append (int fd, U_I size)
 append some data at the end of the string More...
 
void reduce_string_size_to (U_I pos)
 
void expand_string_size_to (U_I size)
 set the string size within the allocated secure memory
 
void clear ()
 clear the string (set to an empty string) More...
 
void resize (U_I size)
 clear and resize the string to the defined allocated size More...
 
void randomize (U_I size)
 set the string to randomize string of given size More...
 
const char * c_str () const
 get access to the secure string More...
 
char * c_str ()
 
void set_size (U_I size)
 
char * get_array ()
 non constant flavor of direct secure memory access More...
 
char & operator[] (U_I index)
 get access to the secure string by index More...
 
char operator[] (U_I index) const
 
U_I get_size () const
 get the size of the string More...
 
bool empty () const
 tell whether string is empty More...
 
U_I get_allocated_size () const
 get the size of the allocated secure space More...
 

Static Public Member Functions

static bool is_string_secured ()
 to know if secure memory is available More...
 

Private Member Functions

void nullifyptr () noexcept
 
void init (U_I size)
 
void copy_from (const secu_string &ref)
 
void move_from (secu_string &&ref) noexcept
 
bool compare_with (const char *ptr, U_I size) const
 
void clean_and_destroy ()
 

Private Attributes

U_I * allocated_size
 
char * mem
 
U_I * string_size
 

Detailed Description

class secu_string

it manages the allocation/release of a given size block of memory the memory block is forbidden to be swapped (if is_strin_secured() is true) and is zeroed before being released

Definition at line 53 of file secu_string.hpp.

Constructor & Destructor Documentation

◆ secu_string() [1/4]

libdar::secu_string::secu_string ( U_I  storage_size = 0)
inline

constructor 1

create the allocated string in secure memory

Parameters
[in]storage_sizeis the amount of secured memory to obtain when creating the object

Definition at line 68 of file secu_string.hpp.

◆ secu_string() [2/4]

libdar::secu_string::secu_string ( const char *  ptr,
U_I  size 
)
inline

constructor 2

create the string from a pointer to a (secure) string or from a portion of it

Definition at line 73 of file secu_string.hpp.

References append_at().

◆ secu_string() [3/4]

libdar::secu_string::secu_string ( const secu_string ref)
inline

the copy constructor

Definition at line 76 of file secu_string.hpp.

◆ secu_string() [4/4]

libdar::secu_string::secu_string ( secu_string &&  ref)
inlinenoexcept

the move constructor

Definition at line 79 of file secu_string.hpp.

◆ ~secu_string()

libdar::secu_string::~secu_string ( )
inlinenoexcept

the destructor (set memory to zero before releasing it)

Definition at line 88 of file secu_string.hpp.

Member Function Documentation

◆ append() [1/2]

void libdar::secu_string::append ( const char *  ptr,
U_I  size 
)
inline

append some data at the end of the string

Definition at line 121 of file secu_string.hpp.

References append_at().

◆ append() [2/2]

void libdar::secu_string::append ( int  fd,
U_I  size 
)
inline

append some data at the end of the string

Definition at line 124 of file secu_string.hpp.

References append_at().

◆ append_at()

void libdar::secu_string::append_at ( U_I  offset,
const char *  ptr,
U_I  size 
)

append some data to the string at a given offset

Parameters
[in]offsetdefines at which offset in the secu_string will be placed the string to append
[in]ptris the address of the string to append
[in]sizeis the number of byte to append
Note
this call does not change the allocation size, (unlike set()), it adds the data pointed by the arguments to the object while there is enough place to do so. resize() must be used first to define enough secure memory to append the expected amount of data in one or several call to append.

Referenced by append(), and secu_string().

◆ c_str() [1/2]

char * libdar::secu_string::c_str ( )
inline

Definition at line 153 of file secu_string.hpp.

◆ c_str() [2/2]

const char * libdar::secu_string::c_str ( ) const
inline

get access to the secure string

Returns
the address of the first byte of the string
Note
check the "size" method to know how much bytes can be read

Definition at line 152 of file secu_string.hpp.

◆ clear()

void libdar::secu_string::clear ( )
inline

clear the string (set to an empty string)

Definition at line 136 of file secu_string.hpp.

◆ empty()

bool libdar::secu_string::empty ( ) const
inline

tell whether string is empty

Definition at line 169 of file secu_string.hpp.

◆ get_allocated_size()

U_I libdar::secu_string::get_allocated_size ( ) const
inline

get the size of the allocated secure space

Definition at line 172 of file secu_string.hpp.

◆ get_array()

char * libdar::secu_string::get_array ( )
inline

non constant flavor of direct secure memory access

Definition at line 157 of file secu_string.hpp.

◆ get_size()

U_I libdar::secu_string::get_size ( ) const
inline

get the size of the string

Definition at line 166 of file secu_string.hpp.

◆ is_string_secured()

static bool libdar::secu_string::is_string_secured ( )
static

to know if secure memory is available

it is advised that the user program of class secu_string uses this call before using objects of that class and if returned false, advise the user that the necessary support for secure memory is not present, that any sensitive data may be swapped out under heavy memory load and thus may lead secure password to be wrote to disk in clear.

◆ move_from()

void libdar::secu_string::move_from ( secu_string &&  ref)
inlineprivatenoexcept

Definition at line 182 of file secu_string.hpp.

◆ nullifyptr()

void libdar::secu_string::nullifyptr ( )
inlineprivatenoexcept

Definition at line 179 of file secu_string.hpp.

◆ operator!=() [1/2]

bool libdar::secu_string::operator!= ( const secu_string ref) const
inline

Definition at line 92 of file secu_string.hpp.

◆ operator!=() [2/2]

bool libdar::secu_string::operator!= ( const std::string &  ref) const
inline

Definition at line 91 of file secu_string.hpp.

◆ operator=() [1/2]

secu_string & libdar::secu_string::operator= ( const secu_string ref)
inline

the assignment operator

Definition at line 82 of file secu_string.hpp.

◆ operator=() [2/2]

secu_string & libdar::secu_string::operator= ( secu_string &&  ref)
inlinenoexcept

the move operator

Definition at line 85 of file secu_string.hpp.

◆ operator==() [1/2]

bool libdar::secu_string::operator== ( const secu_string ref) const
inline

Definition at line 94 of file secu_string.hpp.

◆ operator==() [2/2]

bool libdar::secu_string::operator== ( const std::string &  ref) const
inline

Definition at line 93 of file secu_string.hpp.

◆ operator[]() [1/2]

char & libdar::secu_string::operator[] ( U_I  index)

get access to the secure string by index

Note
index must be in the range [ 0 - size() [ to avoid throwing an exception

◆ operator[]() [2/2]

char libdar::secu_string::operator[] ( U_I  index) const
inline

Definition at line 163 of file secu_string.hpp.

◆ randomize()

void libdar::secu_string::randomize ( U_I  size)

set the string to randomize string of given size

Note
the given size must be less than allocated size

◆ reduce_string_size_to()

void libdar::secu_string::reduce_string_size_to ( U_I  pos)

shorten the string (do not change the allocated size)

Parameters
[in]posis the length of the string to set, it must be smaller or equal to the current size

◆ resize()

void libdar::secu_string::resize ( U_I  size)
inline

clear and resize the string to the defined allocated size

Parameters
[in]sizeis the amount of secure memory to allocated

Definition at line 141 of file secu_string.hpp.

◆ set()

void libdar::secu_string::set ( int  fd,
U_I  size 
)

fill the object with data

set at most size bytes of data directly from the filedescriptor,

Parameters
[in]fdthe filedescriptor to read data from
[in]sizeis the maximum number of byte read
Note
if current storage size is not larg enough to hold size bytes, allocated secure memory is released and larger allocation of secure memory is done.

Member Data Documentation

◆ allocated_size

U_I* libdar::secu_string::allocated_size
private

Definition at line 175 of file secu_string.hpp.

◆ mem

char* libdar::secu_string::mem
private

Definition at line 176 of file secu_string.hpp.

◆ string_size

U_I* libdar::secu_string::string_size
private

Definition at line 177 of file secu_string.hpp.


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