diff --git a/src/crypto/SymmetricCipher.cpp b/src/crypto/SymmetricCipher.cpp index 98d48196..016103b2 100644 --- a/src/crypto/SymmetricCipher.cpp +++ b/src/crypto/SymmetricCipher.cpp @@ -74,6 +74,11 @@ bool SymmetricCipher::reset() return m_backend->reset(); } +int SymmetricCipher::keySize() const +{ + return m_backend->keySize(); +} + int SymmetricCipher::blockSize() const { return m_backend->blockSize(); diff --git a/src/crypto/SymmetricCipher.h b/src/crypto/SymmetricCipher.h index 4f1d50c1..81e13f38 100644 --- a/src/crypto/SymmetricCipher.h +++ b/src/crypto/SymmetricCipher.h @@ -70,6 +70,7 @@ public: } bool reset(); + int keySize() const; int blockSize() const; QString errorString() const; diff --git a/src/crypto/SymmetricCipherBackend.h b/src/crypto/SymmetricCipherBackend.h index 78ec60c6..dd493d2d 100644 --- a/src/crypto/SymmetricCipherBackend.h +++ b/src/crypto/SymmetricCipherBackend.h @@ -33,6 +33,7 @@ public: Q_REQUIRED_RESULT virtual bool processInPlace(QByteArray& data, quint64 rounds) = 0; virtual bool reset() = 0; + virtual int keySize() const = 0; virtual int blockSize() const = 0; virtual QString errorString() const = 0; diff --git a/src/crypto/SymmetricCipherGcrypt.cpp b/src/crypto/SymmetricCipherGcrypt.cpp index c88dbd8c..ed031c00 100644 --- a/src/crypto/SymmetricCipherGcrypt.cpp +++ b/src/crypto/SymmetricCipherGcrypt.cpp @@ -26,7 +26,6 @@ SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, Sy , m_algo(gcryptAlgo(algo)) , m_mode(gcryptMode(mode)) , m_direction(direction) - , m_blockSize(-1) { } @@ -95,14 +94,6 @@ bool SymmetricCipherGcrypt::init() return false; } - size_t blockSizeT; - error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, nullptr, &blockSizeT); - if (error != 0) { - setErrorString(error); - return false; - } - - m_blockSize = blockSizeT; return true; } @@ -237,9 +228,28 @@ bool SymmetricCipherGcrypt::reset() return true; } +int SymmetricCipherGcrypt::keySize() const +{ + gcry_error_t error; + size_t keySizeT; + + error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_KEYLEN, nullptr, &keySizeT); + if (error != 0) + return -1; + + return keySizeT; +} + int SymmetricCipherGcrypt::blockSize() const { - return m_blockSize; + gcry_error_t error; + size_t blockSizeT; + + error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, nullptr, &blockSizeT); + if (error != 0) + return -1; + + return blockSizeT; } QString SymmetricCipherGcrypt::errorString() const diff --git a/src/crypto/SymmetricCipherGcrypt.h b/src/crypto/SymmetricCipherGcrypt.h index d3ad8d15..108bc14e 100644 --- a/src/crypto/SymmetricCipherGcrypt.h +++ b/src/crypto/SymmetricCipherGcrypt.h @@ -39,6 +39,7 @@ public: Q_REQUIRED_RESULT bool processInPlace(QByteArray& data, quint64 rounds); bool reset(); + int keySize() const; int blockSize() const; QString errorString() const; @@ -54,7 +55,6 @@ private: const SymmetricCipher::Direction m_direction; QByteArray m_key; QByteArray m_iv; - int m_blockSize; QString m_errorString; };