32#ifndef GCRYPT_NO_DEPRECATED
33#define GCRYPT_NO_DEPRECATED
55 inline bool crypto_min_ver_libgcrypt_no_bug()
58 return gcry_check_version(MIN_VERSION_GCRYPT_HASH_BUG);
72 const std::string & salt,
80 crypto_sym & operator = (
crypto_sym && ref)
noexcept {
try { detruit(); move_from(std::move(ref)); }
catch(...) {}
return *
this; };
81 virtual ~crypto_sym() noexcept {
try { detruit(); }
catch(...) {} };
85 virtual U_32 encrypted_block_size_for(U_32 clear_block_size)
override;
86 virtual U_32 clear_block_allocated_size_for(U_32 clear_block_size)
override;
87 virtual U_32 encrypt_data(
const infinint & block_num,
88 const char *clear_buf,
89 const U_32 clear_size,
90 const U_32 clear_allocated,
91 char *crypt_buf, U_32 crypt_size)
override;
92 virtual U_32 decrypt_data(
const infinint & block_num,
93 const char *crypt_buf,
94 const U_32 crypt_size,
96 U_32 clear_size)
override;
97 virtual std::unique_ptr<crypto_module> clone()
const override;
119 gcry_cipher_hd_t main_clef;
120 gcry_cipher_hd_t essiv_clef;
121 size_t algo_block_size;
124 void init_hashed_password(
const secu_string & password,
126 const std::string & salt,
131 unsigned int IV_hashing);
135 void init_essiv_clef(
const secu_string & essiv_password,
137 U_I main_cipher_algo_block_size);
139 void init_ivec(
crypto_algo algo,
size_t algo_block_size);
149 static void get_IV_cipher_and_hashing(
const archive_version & ver, U_I main_cipher, U_I & cipher, U_I & hashing);
158 static void make_ivec(
const infinint & ref,
161 const gcry_cipher_hd_t & IVkey);
165 const std::string & salt,
172 const std::string & salt,
180 static std::string generate_salt(U_I size);
182#ifdef LIBDAR_NO_OPTIMIZATION
183 static bool self_tested;
184 static void self_test(
void);
188 void detruit() {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
189 void copy_from(
const crypto_sym & ref) {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
190 void move_from(
crypto_sym && ref) {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
set of datastructures used to interact with a catalogue object
class archive_version that rules which archive format to follow
exception used when a requested fearture has not beed activated at compilation time
class archive_version manages the version of the archive format
symetrical strong encryption, interface to grypt library
crypto_sym(const secu_string &password, const archive_version &reading_ver, crypto_algo algo, const std::string &salt, const infinint &iteration_count, hash_algo kdf_hash, bool use_pkcs5)
static size_t max_key_len_libdar(crypto_algo algo)
returns the max key length in octets to use to compute a key from a user provided password
static bool is_a_strong_password(crypto_algo algo, const secu_string &password)
check whether the given password is reported as strong in regard to the given cipher
const std::string & get_salt() const
give access to the calculated or provided salt
static size_t max_key_len(crypto_algo algo)
returns the max key length in octets for the given algorithm
the arbitrary large positive integer class
the crypto algoritm definition
per block cryptography implementation
hash_algo
hashing algorithm available
crypto_algo
the different cypher available for encryption (strong or weak)
include macro defined by the configure script and some specific additional ones
libdar namespace encapsulate all libdar symbols
this file contains the definition of secu_string class, a std::string like class but allocated in sec...