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);
150 static void get_IV_cipher_and_hashing(
const archive_version & ver, U_I main_cipher, U_I & cipher, U_I & hashing);
159 static void make_ivec(
const infinint & ref,
162 const gcry_cipher_hd_t & IVkey);
166 const std::string & salt,
173 const std::string & salt,
181 static std::string generate_salt(U_I size);
183#ifdef LIBDAR_NO_OPTIMIZATION
184 static bool self_tested;
185 static void self_test(
void);
189 void nullify() {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
190 void detruit() {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
191 void copy_from(
const crypto_sym & ref) {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
192 void move_from(
crypto_sym && ref) {
throw Ecompilation(gettext(
"Strong encryption support (libgcrypt)")); };
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
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
set of datastructures used to interact with a catalogue object
the crypto algoritm definition
this file contains the definition of secu_string class, a std::string like class but allocated in sec...