summaryrefslogtreecommitdiffstats
path: root/src/crypt/cryptclassnullcipher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crypt/cryptclassnullcipher.cpp')
-rw-r--r--src/crypt/cryptclassnullcipher.cpp67
1 files changed, 66 insertions, 1 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();
+}