#include "cryptaes.h" CryptAes::CryptAes() : CryptClassEvp() { m_iv = QByteArray(16, 0); } const EVP_CIPHER *CryptAes::algorithm() { switch (m_keyLength) { case 128: return EVP_aes_128_cbc(); break; case 192: return EVP_aes_192_cbc(); break; case 256: return EVP_aes_256_cbc(); break; } return EVP_enc_null(); } void CryptAes::encrypt() { EVP_MD_CTX *ctx; /* Create and initialise the context */ if (!(ctx = EVP_MD_CTX_create())) { handleOpenSslError(); } /* Initialise the encryption operation. IMPORTANT - ensure you use a key * and IV size appropriate for your cipher */ if (1 != EVP_DigestInit_ex(ctx, EVP_sha256(), NULL)) { handleOpenSslError(); } /* Provide the message to be encrypted, and obtain the encrypted output. * EVP_EncryptUpdate can be called multiple times if necessary */ if (1 != EVP_DigestUpdate(ctx, m_key.data(), m_key.size())) { handleOpenSslError(); } m_key = QByteArray(256, 0); /* Finalise the encryption. Further ciphertext bytes may be written at * this stage. */ if (1 != EVP_DigestFinal_ex(ctx, (unsigned char *) m_key.data(), NULL)) { handleOpenSslError(); } EVP_MD_CTX_destroy(ctx); CryptClassEvp::encrypt(); } void CryptAes::decrypt() { EVP_MD_CTX *ctx; /* Create and initialise the context */ if (!(ctx = EVP_MD_CTX_create())) { handleOpenSslError(); } /* Initialise the encryption operation. IMPORTANT - ensure you use a key * and IV size appropriate for your cipher */ if (1 != EVP_DigestInit_ex(ctx, EVP_sha256(), NULL)) { handleOpenSslError(); } /* Provide the message to be encrypted, and obtain the encrypted output. * EVP_EncryptUpdate can be called multiple times if necessary */ if (1 != EVP_DigestUpdate(ctx, m_key.data(), m_key.size())) { handleOpenSslError(); } m_key = QByteArray(256, 0); /* Finalise the encryption. Further ciphertext bytes may be written at * this stage. */ if (1 != EVP_DigestFinal_ex(ctx, (unsigned char *) m_key.data(), NULL)) { handleOpenSslError(); } EVP_MD_CTX_destroy(ctx); CryptClassEvp::decrypt(); }