Disk ARchive  2.6.8
Full featured and portable backup and archiving tool
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
libdar::tronconneuse Class Referenceabstract

this is a partial implementation of the generic_file interface to cypher/decypher data block by block. More...

#include <tronconneuse.hpp>

Inherits libdar::generic_file.

Inherited by libdar::crypto_sym.

Public Member Functions

 tronconneuse (U_32 block_size, generic_file &encrypted_side, bool no_initial_shift, const archive_version &reading_ver)
 This is the constructor. More...
 
 tronconneuse (const tronconneuse &ref)
 copy constructor
 
 tronconneuse (tronconneuse &&ref) noexcept
 move constructor
 
tronconneuseoperator= (const tronconneuse &ref)
 assignment operator
 
tronconneuseoperator= (tronconneuse &&ref) noexcept
 move operator
 
virtual ~tronconneuse () override
 destructor
 
virtual bool skippable (skippability direction, const infinint &amount) override
 inherited from generic_file
 
virtual bool skip (const infinint &pos) override
 inherited from generic_file
 
virtual bool skip_to_eof () override
 inherited from generic_file
 
virtual bool skip_relative (S_I x) override
 inherited from generic_file
 
virtual infinint get_position () const override
 inherited from generic_file
 
void write_end_of_file ()
 in write_only mode indicate that end of file is reached More...
 
void set_initial_shift (const infinint &x)
 this method to modify the initial shift. This overrides the constructor "no_initial_shift" of the constructor
 
void set_callback_trailing_clear_data (infinint(*call_back)(generic_file &below, const archive_version &reading_ver))
 
U_32 get_clear_block_size () const
 returns the block size give to constructor
 
- Public Member Functions inherited from libdar::generic_file
 generic_file (gf_mode m)
 main constructor
 
 generic_file (const generic_file &ref)
 copy constructor
 
 generic_file (generic_file &&ref) noexcept
 move constructor
 
generic_fileoperator= (const generic_file &ref)
 assignment operator
 
generic_fileoperator= (generic_file &&ref) noexcept
 move operator
 
 ~generic_file () noexcept(false)
 virtual destructor, More...
 
void terminate ()
 destructor-like call, except that it is allowed to throw exceptions
 
bool operator== (generic_file &ref)
 
bool operator!= (generic_file &ref)
 
gf_mode get_mode () const
 retreive the openning mode for this object
 
void read_ahead (const infinint &amount)
 
void ignore_read_ahead (bool mode)
 
virtual U_I read (char *a, U_I size) override
 read data from the generic_file inherited from proto_generic_file
 
virtual void write (const char *a, U_I size) override
 write data to the generic_file inherited from proto_generic_file
 
void write (const std::string &arg)
 write a string to the generic_file More...
 
S_I read_back (char &a)
 skip back one char, read on char and skip back one char
 
S_I read_forward (char &a)
 read one char
 
virtual void copy_to (generic_file &ref)
 copy all data from current position to the object in argument
 
virtual void copy_to (generic_file &ref, const infinint &crc_size, crc *&value)
 copy all data from the current position to the object in argument and computes a CRC value of the transmitted data More...
 
U_32 copy_to (generic_file &ref, U_32 size)
 small copy (up to 4GB) with CRC calculation
 
infinint copy_to (generic_file &ref, infinint size)
 copy the given amount to the object in argument
 
bool diff (generic_file &f, const infinint &me_read_ahead, const infinint &you_read_ahead, const infinint &crc_size, crc *&value)
 compares the contents with the object in argument More...
 
bool diff (generic_file &f, const infinint &me_read_ahead, const infinint &you_read_ahead, const infinint &crc_size, crc *&value, infinint &err_offset)
 
void reset_crc (const infinint &width)
 reset CRC on read or writen data More...
 
bool crc_status () const
 to known whether CRC calculation is activated or not
 
crcget_crc ()
 get CRC of the transfered date since last reset More...
 
void sync_write ()
 write any pending data
 
void flush_read ()
 be ready to read at current position, reseting all pending data for reading, cached and in compression engine for example
 
- Public Member Functions inherited from libdar::proto_generic_file
 proto_generic_file (const proto_generic_file &ref)=default
 copy constructor
 
 proto_generic_file (proto_generic_file &&ref) noexcept=default
 move constructor
 
proto_generic_fileoperator= (const proto_generic_file &ref)=default
 assignment operator
 
proto_generic_fileoperator= (proto_generic_file &&ref) noexcept=default
 move operator
 
virtual ~proto_generic_file () noexcept(false)
 virtual destructor More...
 

Protected Member Functions

virtual U_32 encrypted_block_size_for (U_32 clear_block_size)=0
 defines the size necessary to encrypt a given amount of clear data More...
 
virtual U_32 clear_block_allocated_size_for (U_32 clear_block_size)=0
 it may be necessary by the inherited class have few more bytes allocated after the clear data given for encryption More...
 
virtual U_32 encrypt_data (const infinint &block_num, const char *clear_buf, const U_32 clear_size, const U_32 clear_allocated, char *crypt_buf, U_32 crypt_size)=0
 this method encrypts the clear data given More...
 
virtual U_32 decrypt_data (const infinint &block_num, const char *crypt_buf, const U_32 crypt_size, char *clear_buf, U_32 clear_size)=0
 this method decyphers data More...
 
const archive_versionget_reading_version () const
 
- Protected Member Functions inherited from libdar::generic_file
void set_mode (gf_mode x)
 
bool is_terminated () const
 

Private Member Functions

virtual void inherited_read_ahead (const infinint &amount) override
 inherited from generic_file More...
 
virtual U_I inherited_read (char *a, U_I size) override
 this protected inherited method is now private for inherited classes of tronconneuse
 
virtual void inherited_write (const char *a, U_I size) override
 inherited from generic_file More...
 
virtual void inherited_sync_write () override
 this protected inherited method is now private for inherited classes of tronconneuse
 
virtual void inherited_flush_read () override
 this protected inherited method is now private for inherited classes of tronconneuse
 
virtual void inherited_terminate () override
 this protected inherited method is now private for inherited classes of tronconneuse
 
void nullifyptr () noexcept
 
void detruit () noexcept
 
void copy_from (const tronconneuse &ref)
 
void move_from (tronconneuse &&ref) noexcept
 
U_32 fill_buf ()
 returns the position (of the next read op) inside the buffer and fill the buffer with clear data
 
void flush ()
 flush any pending data (write mode only) to encrypted device
 
void init_buf ()
 initialize if necessary the various buffers that relies on inherited method values
 
void position_clear2crypt (const infinint &pos, infinint &file_buf_start, infinint &clear_buf_start, infinint &pos_in_buf, infinint &block_num)
 convert clear position to corresponding position in the encrypted data More...
 
void position_crypt2clear (const infinint &pos, infinint &clear_pos)
 
bool check_current_position ()
 return true if a there is a byte of information at the given offset
 
void remove_trailing_clear_data_from_encrypted_buf (const infinint &crypt_offset)
 

Private Attributes

infinint initial_shift
 the initial_shift first bytes of the underlying file are not encrypted
 
infinint buf_offset
 offset of the first byte in buf
 
U_32 buf_byte_data
 number of byte of information in buf (buf_byte_data <= buf_size)
 
U_32 buf_size
 size of allocated memory for clear data in buf
 
char * buf
 decrypted data (or data to encrypt)
 
U_32 clear_block_size
 max amount of data that will be encrypted at once (must stay less than buf_size)
 
infinint current_position
 position of the next character to read or write from the upper layer perspective, offset zero is the first encrypted byte, thus the first byte after initial_shift
 
infinint block_num
 block number we next read or write
 
generic_fileencrypted
 generic_file where is put / get the encrypted data
 
U_32 encrypted_buf_size
 allocated size of encrypted_buf
 
U_32 encrypted_buf_data
 amount of byte of information in encrypted_buf
 
char * encrypted_buf
 buffer of encrypted data (read or to write)
 
infinint extra_buf_offset
 offset of the first byte of extra_buf
 
U_32 extra_buf_size
 allocated size of extra_buf
 
U_32 extra_buf_data
 amount of byte of information in extra_buf
 
char * extra_buf
 additional read encrypted that follow what is in encrypted_buf used to check for clear data after encrypted data
 
bool weof
 whether write_end_of_file() has been called
 
bool reof
 whether we reached eof while reading
 
archive_version reading_ver
 archive format we currently read
 
infinint(* trailing_clear_data )(generic_file &below, const archive_version &reading_ver)
 callback function that gives the amount of clear data found at the end of the given file
 

Additional Inherited Members

- Public Types inherited from libdar::generic_file
enum  skippability { skip_backward, skip_forward }
 

Detailed Description

this is a partial implementation of the generic_file interface to cypher/decypher data block by block.

This class is a pure virtual one, as several calls have to be defined by inherited classes

tronconneuse is either read_only or write_only, read_write is not allowed. The openning mode is defined by encrypted_side's mode. In write_only no skip() is allowed, writing is sequential from the beginning of the file to the end (like writing to a pipe). In read_only all skip() functions are available.

Definition at line 58 of file tronconneuse.hpp.

Constructor & Destructor Documentation

◆ tronconneuse()

libdar::tronconneuse::tronconneuse ( U_32  block_size,
generic_file encrypted_side,
bool  no_initial_shift,
const archive_version reading_ver 
)

This is the constructor.

Parameters
[in]block_sizeis the size of block encryption (the size of clear data encrypted toghether).
[in]encrypted_sidewhere encrypted data are read from or written to.
[in]no_initial_shiftassume that no unencrypted data is located at the begining of the underlying file, else this is the position of the encrypted_side at the time of this call that is used as initial_shift
[in]reading_verversion of the archive format
Note
that encrypted_side is not owned and destroyed by tronconneuse, it must exist during all the life of the tronconneuse object, and is not destroyed by the tronconneuse's destructor

Member Function Documentation

◆ clear_block_allocated_size_for()

virtual U_32 libdar::tronconneuse::clear_block_allocated_size_for ( U_32  clear_block_size)
protectedpure virtual

it may be necessary by the inherited class have few more bytes allocated after the clear data given for encryption

Parameters
[in]clear_block_sizeis the size in byte of the clear data that will be asked to encrypt.
Returns
the requested allocated buffer size (at least the size of the clear data).
Note
when giving clear buffer of data of size "clear_block_size" some inherited class may requested that a bit more of data must be allocated. this is to avoid copying data when the algorithm needs to add some data after the clear data before encryption.

Implemented in libdar::crypto_sym.

◆ decrypt_data()

virtual U_32 libdar::tronconneuse::decrypt_data ( const infinint block_num,
const char *  crypt_buf,
const U_32  crypt_size,
char *  clear_buf,
U_32  clear_size 
)
protectedpure virtual

this method decyphers data

Parameters
[in]block_numblock number of the data to decrypt.
[in]crypt_bufpointer to the first byte of encrypted data.
[in]crypt_sizesize of encrypted data to decrypt.
[in,out]clear_bufpointer where to put clear data.
[in]clear_sizeallocated size of clear_buf.
Returns
is the amount of data put in clear_buf (<= clear_size)

Implemented in libdar::crypto_sym.

◆ encrypt_data()

virtual U_32 libdar::tronconneuse::encrypt_data ( const infinint block_num,
const char *  clear_buf,
const U_32  clear_size,
const U_32  clear_allocated,
char *  crypt_buf,
U_32  crypt_size 
)
protectedpure virtual

this method encrypts the clear data given

Parameters
block_numis the number of the block to which correspond the given data, This is an informational field for inherited classes.
[in]clear_bufpoints to the first byte of clear data to encrypt.
[in]clear_sizeis the length in byte of data to encrypt.
[in]clear_allocatedis the size of the allocated memory (modifiable bytes) in clear_buf: clear_block_allocated_size_for(clear_size)
[in,out]crypt_bufis the area where to put corresponding encrypted data.
[in]crypt_sizeis the allocated memory size for crypt_buf: encrypted_block_size_for(clear_size)
Returns
is the amount of data put in crypt_buf (<= crypt_size).
Note
it must respect that : returned value = encrypted_block_size_for(clear_size argument)

Implemented in libdar::crypto_sym.

◆ encrypted_block_size_for()

virtual U_32 libdar::tronconneuse::encrypted_block_size_for ( U_32  clear_block_size)
protectedpure virtual

defines the size necessary to encrypt a given amount of clear data

Parameters
[in]clear_block_sizeis the size of the clear block to encrypt.
Returns
the size of the memory to allocate to receive corresponding encrypted data.
Note
this implies that encryption algorithm must always generate a fixed size encrypted block of data for a given fixed size block of data. However, the size of the encrypted block of data may differ from the size of the clear block of data

Implemented in libdar::crypto_sym.

◆ inherited_read_ahead()

virtual void libdar::tronconneuse::inherited_read_ahead ( const infinint amount)
overrideprivatevirtual

inherited from generic_file

this protected inherited method is now private for inherited classes of tronconneuse

Implements libdar::generic_file.

◆ inherited_write()

virtual void libdar::tronconneuse::inherited_write ( const char *  a,
U_I  size 
)
overrideprivatevirtual

inherited from generic_file

this protected inherited method is now private for inherited classes of tronconneuse

Implements libdar::generic_file.

◆ position_clear2crypt()

void libdar::tronconneuse::position_clear2crypt ( const infinint pos,
infinint file_buf_start,
infinint clear_buf_start,
infinint pos_in_buf,
infinint block_num 
)
private

convert clear position to corresponding position in the encrypted data

Parameters
[in]posis the position in the clear data
[out]file_buf_startis the position of the beginning of the crypted block where can be found the data
[out]clear_buf_startis the position of the beginning of the corresponding clear block
[out]pos_in_bufis the position in the clear block of the 'pos' offset
[out]block_numis the block number we have our requested position inside

◆ position_crypt2clear()

void libdar::tronconneuse::position_crypt2clear ( const infinint pos,
infinint clear_pos 
)
private

gives the position of the next character of clear data that corresponds to the encrypted data which index is pos

◆ remove_trailing_clear_data_from_encrypted_buf()

void libdar::tronconneuse::remove_trailing_clear_data_from_encrypted_buf ( const infinint crypt_offset)
private

remove clear data at the end of the encrypted_buf

Parameters
[in]crypt_offsetis the offset of the first byte of encrypted_buf not considering initial_shift bytes before the begining of the encrypted data

◆ set_callback_trailing_clear_data()

void libdar::tronconneuse::set_callback_trailing_clear_data ( infinint(*)(generic_file &below, const archive_version &reading_ver call_back)
inline

let the caller give a callback function that given a generic_file with cyphered data, is able to return the offset of the first clear byte located after all the cyphered data, this callback function is used (if defined by the following method), when reaching End of File.

Definition at line 114 of file tronconneuse.hpp.

References trailing_clear_data.

◆ write_end_of_file()

void libdar::tronconneuse::write_end_of_file ( )
inline

in write_only mode indicate that end of file is reached

this call must be called in write mode to purge the internal cache before deleting the object (else some data may be lost) no further write call is allowed

Note
this call cannot be used from the destructor, because it relies on pure virtual methods

Definition at line 104 of file tronconneuse.hpp.

References libdar::generic_file::is_terminated().


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