diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-09-04 22:17:14 +0200 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-09-04 22:17:14 +0200 |
| commit | 240930cdb922f3fed2442234ce6fdeaf67aaed33 (patch) | |
| tree | 3f62c482c35e35034cedc91d5d9f11facbaae465 | |
| parent | a1aa74e5edb90266637c529dd96dd3487ac7d712 (diff) | |
| download | src-240930cdb922f3fed2442234ce6fdeaf67aaed33.tar.gz src-240930cdb922f3fed2442234ce6fdeaf67aaed33.zip | |
Initialisiere OpenSSL und fÃge Fehlerbehandlung ein
| -rw-r--r-- | crypt/hybridcrypt.cpp | 54 | ||||
| -rw-r--r-- | crypt/hybridcrypt.h | 22 |
2 files changed, 70 insertions, 6 deletions
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<QString> 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 <QVector> #include <QDebug> +#include <openssl/conf.h> #include <openssl/evp.h> #include <openssl/err.h> #include <openssl/rand.h> +#include <openssl/rsa.h> + +#include "cryptexception.h" class HybridCrypt { @@ -17,11 +21,17 @@ 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 * mit den übergebenen Schlüsseln und dem Nutzerschlüssel. @@ -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 |
