| Disk ARchive 2.6.12 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
Private

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
tronconneuse & | operator= (const tronconneuse &ref)
| assignment operator
tronconneuse & | operator= (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_file & | operator= (const generic_file &ref)
| assignment operator
generic_file & | operator= (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
crc * | get_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_file & | operator= (const proto_generic_file &ref)=default
| assignment operator
proto_generic_file & | operator= (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_version & | get_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_file * | encrypted
| 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

- encrypted_block_size_for
- clear_block_allocated_size_for
- encrypt_data
- decrypt_data

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_size | is the size of block encryption (the size of clear data encrypted toghether).
  [in] | encrypted_side | where encrypted data are read from or written to.
  [in] | no_initial_shift | assume 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_ver | version 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 | ) |
| protected pure 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_size | is 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
| ) |  |
| protected pure virtual

this method decyphers data

Parameters

  [in] | block_num | block number of the data to decrypt.
  [in] | crypt_buf | pointer to the first byte of encrypted data.
  [in] | crypt_size | size of encrypted data to decrypt.
  [in,out] | clear_buf | pointer where to put clear data.
  [in] | clear_size | allocated size of clear_buf.

Returns
  is the amount of data put in clear_buf (<= clear_size)

Implemented in libdar::crypto_sym.

References reading_ver.

## ◆ 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
| ) |  |
| protected pure virtual

this method encrypts the clear data given

Parameters

  | block_num | is the number of the block to which correspond the given data, This is an informational field for inherited classes.
  [in] | clear_buf | points to the first byte of clear data to encrypt.
  [in] | clear_size | is the length in byte of data to encrypt.
  [in] | clear_allocated | is the size of the allocated memory (modifiable bytes) in clear_buf: clear_block_allocated_size_for(clear_size)
  [in,out] | crypt_buf | is the area where to put corresponding encrypted data.
  [in] | crypt_size | is 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 | ) |
| protected pure virtual

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

Parameters

  [in] | clear_block_size | is 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 | ) |
| override private virtual

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
| ) |  |
| override private virtual

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] | pos | is the position in the clear data
  [out] | file_buf_start | is the position of the beginning of the crypted block where can be found the data
  [out] | clear_buf_start | is the position of the beginning of the corresponding clear block
  [out] | pos_in_buf | is the position in the clear block of the 'pos' offset
  [out] | block_num | is 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_offset | is 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:

- tronconneuse.hpp