summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/crypt/cryptclassnullcipher.cpp56
1 files changed, 50 insertions, 6 deletions
diff --git a/src/crypt/cryptclassnullcipher.cpp b/src/crypt/cryptclassnullcipher.cpp
index c30b2e2..eb3d81a 100644
--- a/src/crypt/cryptclassnullcipher.cpp
+++ b/src/crypt/cryptclassnullcipher.cpp
@@ -29,7 +29,6 @@ void CryptClassNullCipher::encrypt()
/* Create and initialise the context */
if (!(ctx = EVP_CIPHER_CTX_new()))
{
- qDebug() << "EVP_CIPHER_CTX_new";
handleErrors();
}
@@ -47,9 +46,9 @@ void CryptClassNullCipher::encrypt()
/* 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()))
+ if (1 != EVP_EncryptUpdate(ctx, (unsigned char *) m_cryptText.data(), &len,
+ (unsigned char *) m_clearText.data(), m_clearText.length()))
{
- qDebug() << "EVP_EncryptUpdate";
handleErrors();
}
@@ -58,9 +57,9 @@ void CryptClassNullCipher::encrypt()
/* 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))
+ if (1 != EVP_EncryptFinal_ex(ctx, (unsigned char *)(m_cryptText.data() + len),
+ &len))
{
- qDebug() << "EVP_EncryptFinal_ex";
handleErrors();
}
@@ -72,7 +71,52 @@ void CryptClassNullCipher::encrypt()
void CryptClassNullCipher::decrypt()
{
- m_clearText = m_cryptText;
+ m_clearText = QByteArray(m_cryptText.size() + 50, 0);
+
+ EVP_CIPHER_CTX *ctx;
+
+ int len;
+
+ int plaintext_len;
+
+ /* Create and initialise the context */
+ if (!(ctx = EVP_CIPHER_CTX_new()))
+ {
+ handleErrors();
+ }
+
+ /* Initialise the decryption 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_DecryptInit_ex(ctx, EVP_enc_null(), NULL, NULL, NULL))
+ {
+ handleErrors();
+ }
+
+ /* Provide the message to be decrypted, and obtain the plaintext output.
+ * EVP_DecryptUpdate can be called multiple times if necessary
+ */
+ if (1 != EVP_DecryptUpdate(ctx, (unsigned char*) m_clearText.data(), &len, (unsigned char*) m_cryptText.data(), m_cryptText.length()))
+ {
+ handleErrors();
+ }
+
+ plaintext_len = len;
+
+ /* Finalise the decryption. Further plaintext bytes may be written at
+ * this stage.
+ */
+ if (1 != EVP_DecryptFinal_ex(ctx, (unsigned char*) m_cryptText.data() + len, &len))
+ {
+ handleErrors();
+ }
+
+ plaintext_len += len;
+
+ /* Clean up */
+ EVP_CIPHER_CTX_free(ctx);
}
void CryptClassNullCipher::handleErrors()