diff options
| -rw-r--r-- | src/crypt/cryptclassnullcipher.cpp | 56 |
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() |
