From 240930cdb922f3fed2442234ce6fdeaf67aaed33 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Fri, 4 Sep 2015 22:17:14 +0200 Subject: Initialisiere OpenSSL und fÃge Fehlerbehandlung ein MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crypt/hybridcrypt.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++--- crypt/hybridcrypt.h | 22 ++++++++++++++++++--- 2 files changed, 70 insertions(+), 6 deletions(-) (limited to 'crypt') diff --git a/crypt/hybridcrypt.cpp b/crypt/hybridcrypt.cpp index b197f75..0802397 100644 --- a/crypt/hybridcrypt.cpp +++ b/crypt/hybridcrypt.cpp @@ -2,14 +2,56 @@ HybridCrypt::HybridCrypt() { - // Teste ob der Zufallszahlengenerator initialisiert ist - qDebug() << "Zufallszahlengenerator wurde erfolgreich initialisiert: " << isCsprngSeeded(); + // Initialisiere Nutzerschlüssel mit NULL + privateUserkey = NULL; + publicUserkey = NULL; + + // Lade die menschenlesbaren Fehlerstrings für LibCrypto + ERR_load_crypto_strings(); + + // Lade alle Hash- und Verschlüsselungsalgorithmen + OpenSSL_add_all_algorithms(); + + // Lade Konfigurationsdatei und andere wichtige Initialisierungen + OPENSSL_config(NULL); + + // Zeige ob der Zufallszahlengenerator initialisiert wurde + qDebug() << "Zufallszahlengenerator erfolgreich initialisiert: " << + isCsprngSeeded(); +} + +HybridCrypt::~HybridCrypt() +{ + // Räume Nutzerschlüssel auf + if (privateUserkey != NULL) + { + EVP_PKEY_free(privateUserkey); + } + + if (publicUserkey != NULL) + { + EVP_PKEY_free(publicUserkey); + } + + // Räume OpenSSL auf + // Entferne alle Hash- und Verschlüsselungsalgorithmen + EVP_cleanup(); + + // Falls das nächste Ausgelassen wird, könnte ein Speicherleck auftreten, + // wenn die BIO Api verwendet wurde (Base64 transformationen) + CRYPTO_cleanup_all_ex_data(); + + // Lösche den CSPRNG sicher + RAND_cleanup(); + + // Entferne Fehlerstrings + ERR_free_strings(); } void HybridCrypt::encrypt(QString infileName, QString outfileName, QVector recipientKeyfileNames) { - qDebug() << "Zufallszahlengenerator wurde ausreichend geseeded: " << isCsprngSeeded(); + } void HybridCrypt::decrypt(QString infileName, QString outfileName) @@ -42,3 +84,9 @@ bool HybridCrypt::isCsprngSeeded() return RAND_status() == 1; } +void HybridCrypt::throwOpenSslException() +{ + QString errorMsg("OpenSSL Fehler. Fehlermeldung: "); + errorMsg.append(ERR_error_string(ERR_get_error(), NULL)); + throw new CryptException(errorMsg.toStdString(), 5); +} diff --git a/crypt/hybridcrypt.h b/crypt/hybridcrypt.h index 710cf47..c3ce4ef 100644 --- a/crypt/hybridcrypt.h +++ b/crypt/hybridcrypt.h @@ -7,9 +7,13 @@ #include #include +#include #include #include #include +#include + +#include "cryptexception.h" class HybridCrypt { @@ -17,10 +21,16 @@ public: /** * @brief HybridCrypt::HybridCrypt - * Initialisiert den CSPRNG von OpenSSL mittels /dev/random. + * Initialisiert OpenSSL. */ HybridCrypt(); + /** + * @brief HybridCrypt::~HybridCrypt + * Räumt OpenSSL auf. + */ + ~HybridCrypt(); + /** * @brief HybridCrypt::encrypt * Ließt eine Datei ein und schreibt diese verschlüsselt @@ -71,8 +81,8 @@ public: void exportPublicUserKey(QString keyfileName); private: - EVP_PKEY privateUserkey; - EVP_PKEY publicUserkey; + EVP_PKEY *privateUserkey; + EVP_PKEY *publicUserkey; /** * @brief isCsprngSeeded @@ -80,6 +90,12 @@ private: * @return Gibt wahr zurück wenn ausreichend intialisert wurde, ansonsten falsch. */ bool isCsprngSeeded(); + + /** + * @brief throwOpenSslException + * Wirft eine Exception mit dem OpenSSL Fehler. + */ + void throwOpenSslException(); }; #endif // HYBRIDCRYPT_H -- cgit v1.2.3-70-g09d2