diff options
Diffstat (limited to 'src/crypt/cryptclassnullcipher.cpp')
| -rw-r--r-- | src/crypt/cryptclassnullcipher.cpp | 67 |
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(); +} |
