summaryrefslogtreecommitdiffstats
path: root/src/crypt
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypt')
-rw-r--r--src/crypt/cryptclassnullcipher.cpp67
-rw-r--r--src/crypt/cryptclassnullcipher.h15
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