diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-05-19 13:13:20 +0200 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-05-19 13:13:20 +0200 |
| commit | 8f5835824c4be7e72195d6c3fce18d85c079c31e (patch) | |
| tree | 002bdc0b07f0aab77a86d9925bf14c5cb5f2c194 /src | |
| parent | ac53eb1848aba14ee7915b45ef6f4321ef4ff1bc (diff) | |
| download | IT-Sicherheit-8f5835824c4be7e72195d6c3fce18d85c079c31e.tar.gz IT-Sicherheit-8f5835824c4be7e72195d6c3fce18d85c079c31e.zip | |
First try of using the EVP null chipher from OpenSSL
Diffstat (limited to 'src')
| -rw-r--r-- | src/crypt/cryptclassnullcipher.cpp | 67 | ||||
| -rw-r--r-- | src/crypt/cryptclassnullcipher.h | 15 |
2 files changed, 80 insertions, 2 deletions
diff --git a/src/crypt/cryptclassnullcipher.cpp b/src/crypt/cryptclassnullcipher.cpp index b4ed284..c30b2e2 100644 --- a/src/crypt/cryptclassnullcipher.cpp +++ b/src/crypt/cryptclassnullcipher.cpp @@ -3,15 +3,80 @@ CryptClassNullCipher::CryptClassNullCipher() : CryptClassBase() { + ERR_load_crypto_strings(); + OpenSSL_add_all_algorithms(); +} +CryptClassNullCipher::~CryptClassNullCipher() +{ + EVP_cleanup(); + ERR_free_strings(); } void CryptClassNullCipher::encrypt() { - m_cryptText = m_clearText; + // int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, + // unsigned char *iv, unsigned char *ciphertext) + + m_cryptText = QByteArray(m_clearText.size() + 50, 0); + + EVP_CIPHER_CTX *ctx; + + int len; + + int ciphertext_len; + + /* Create and initialise the context */ + if (!(ctx = EVP_CIPHER_CTX_new())) + { + qDebug() << "EVP_CIPHER_CTX_new"; + handleErrors(); + } + + /* Initialise the encryption operation. IMPORTANT - ensure you use a key + * and IV size appropriate for your cipher + * In this example we are using 256 bit AES (i.e. a 256 bit key). The + * IV size for *most* modes is the same as the block size. For AES this + * is 128 bits */ + if (1 != EVP_EncryptInit_ex(ctx, EVP_enc_null(), NULL, NULL, NULL)) + { + qDebug() << "EVP_EncryptInit_ex"; + handleErrors(); + } + + /* Provide the message to be encrypted, and obtain the encrypted output. + * EVP_EncryptUpdate can be called multiple times if necessary + */ + if (1 != EVP_EncryptUpdate(ctx, (unsigned char *) m_cryptText.data(), &len, (unsigned char *) m_clearText.data(), m_clearText.length())) + { + qDebug() << "EVP_EncryptUpdate"; + handleErrors(); + } + + ciphertext_len = len; + + /* Finalise the encryption. Further ciphertext bytes may be written at + * this stage. + */ + if (1 != EVP_EncryptFinal_ex(ctx, (unsigned char *) (m_cryptText.data() + len), &len)) + { + qDebug() << "EVP_EncryptFinal_ex"; + handleErrors(); + } + + ciphertext_len += len; + + /* Clean up */ + EVP_CIPHER_CTX_free(ctx); } void CryptClassNullCipher::decrypt() { m_clearText = m_cryptText; } + +void CryptClassNullCipher::handleErrors() +{ + qDebug() << ERR_get_error(); + abort(); +} diff --git a/src/crypt/cryptclassnullcipher.h b/src/crypt/cryptclassnullcipher.h index 6b3c284..ae05ef6 100644 --- a/src/crypt/cryptclassnullcipher.h +++ b/src/crypt/cryptclassnullcipher.h @@ -3,7 +3,11 @@ #include "cryptclassbase.h" +#include <QDebug> + #include <openssl/evp.h> +#include <openssl/err.h> +#include <openssl/conf.h> /** @@ -23,10 +27,16 @@ public: //Methods /** * \brief Class Constructor. * - * Class Constructor. Does nothing. + * Class Constructor. Initializes openssl. */ CryptClassNullCipher(); + /** + * \brief Class Destructor. + * + * Class Destructor. Deinitializes openssl. + */ + ~CryptClassNullCipher(); /** * \brief Overloaded Method to encrypt present unencrypted data using the current key. @@ -44,6 +54,9 @@ public: //Methods * Data is copied from m_cryptText to m_clearText. */ virtual void decrypt(); + +private: + void handleErrors(); }; #endif // CRYPTCLASSNULLCIPHER_H |
