diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-09-14 14:45:26 +0200 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-09-15 13:12:40 +0200 |
| commit | 0764b73f6a61160ad6765f17073110d8236b68d1 (patch) | |
| tree | 6c94a0e280634c323766a1471fdc0be1b778a9c5 /crypt | |
| parent | c529186d9c9f71054ea1cf92bfb4c25721d5cf78 (diff) | |
| download | src-0764b73f6a61160ad6765f17073110d8236b68d1.tar.gz src-0764b73f6a61160ad6765f17073110d8236b68d1.zip | |
Importiere nur RSA Schlüssel
Diffstat (limited to 'crypt')
| -rw-r--r-- | crypt/hybridcrypt.cpp | 33 | ||||
| -rw-r--r-- | crypt/hybridcrypt.h | 27 |
2 files changed, 47 insertions, 13 deletions
diff --git a/crypt/hybridcrypt.cpp b/crypt/hybridcrypt.cpp index fbe6791..c408bf1 100644 --- a/crypt/hybridcrypt.cpp +++ b/crypt/hybridcrypt.cpp @@ -22,7 +22,7 @@ HybridCrypt::HybridCrypt() HybridCrypt::~HybridCrypt() { // Räume Nutzerschlüssel auf - freeKeyIfNotNull(); + freeEvpKey(&userKeypair); // Räume OpenSSL auf // Entferne alle Hash- und Verschlüsselungsalgorithmen @@ -55,7 +55,7 @@ void HybridCrypt::createKeypair() if (isCsprngSeeded()) { // Räume den alten Schlüssel vorher ab - freeKeyIfNotNull(); + freeEvpKey(&userKeypair); // Lege Schlüsselkontextvariable an EVP_PKEY_CTX *ctx = NULL; @@ -92,7 +92,7 @@ void HybridCrypt::createKeypair() void HybridCrypt::importUserKeypair(QString keyfileName, QString password) { // Räume den alten Schlüssel vorher ab - freeKeyIfNotNull(); + freeEvpKey(&userKeypair); FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "r"); @@ -114,6 +114,9 @@ void HybridCrypt::importUserKeypair(QString keyfileName, QString password) { throwOpenSslException(); } + + // Wirf Exception, falls kein RSA Schlüssel importiert wurde + throwExceptionIfEvpKeyIsNotRsa(&userKeypair); } void HybridCrypt::exportUserKeypair(QString keyfileName, QString password) @@ -171,11 +174,20 @@ void HybridCrypt::exportPublicUserKey(QString keyfileName) } } +/* + * Private Funktionen + */ + bool HybridCrypt::isCsprngSeeded() { return RAND_status() == 1; } +bool HybridCrypt::isKeyRsa(EVP_PKEY *key) +{ + return EVP_PKEY_type(key->type) == EVP_PKEY_RSA; +} + void HybridCrypt::throwOpenSslException() { QString errorMsg("OpenSSL Fehler. Fehlermeldung: "); @@ -183,12 +195,17 @@ void HybridCrypt::throwOpenSslException() throw CryptException(errorMsg.toStdString(), 5); } - -void HybridCrypt::freeKeyIfNotNull() +void HybridCrypt::throwExceptionIfEvpKeyIsNotRsa(EVP_PKEY **key) { - if (userKeypair != NULL) + if (!isKeyRsa(*key)) { - EVP_PKEY_free(userKeypair); - userKeypair = NULL; + freeEvpKey(key); + throw CryptException("Nur RSA Schlüssel werden unterstüzt.", 6); } } + +void HybridCrypt::freeEvpKey(EVP_PKEY **key) +{ + EVP_PKEY_free(*key); + *key = NULL; +} diff --git a/crypt/hybridcrypt.h b/crypt/hybridcrypt.h index 28f5dfb..602844e 100644 --- a/crypt/hybridcrypt.h +++ b/crypt/hybridcrypt.h @@ -4,10 +4,11 @@ #include <cstdio> #include <QByteArray> +#include <QDataStream> +#include <QDebug> #include <QFile> #include <QString> #include <QVector> -#include <QDebug> #include <openssl/conf.h> #include <openssl/evp.h> @@ -96,16 +97,32 @@ private: bool isCsprngSeeded(); /** + * @brief isKeyRsa + * Überprüft, ob der Schlüssel vom Typ RSA ist. + * @param key Der Schlüssel, der überprüft wird. + * @return Gibt wahr zurück, falls Key vom Typ RSA ist, ansonsten flasch. + */ + bool isKeyRsa(EVP_PKEY *key); + + /** * @brief throwOpenSslException - * Wirft eine Exception mit dem OpenSSL Fehler. + * Wirft eine CryptException mit dem OpenSSL Fehler. */ void throwOpenSslException(); /** - * @brief freeKeyIfNotNull - * Gibt den Speicher vom Nutzerschlüssel frei, falls er existiert. + * @brief throwExceptionIfEvpKeyIsNotRsa + * Wirft eine CryptException, falls der Schlüssel nicht RSA ist. + * @param key Der Pointer, der auf NULL gesetzt wird, nachdem der Schlüssel abgräumt wurde. + */ + void throwExceptionIfEvpKeyIsNotRsa(EVP_PKEY **key); + + /** + * @brief freeEvpKey + * Räumt den Schlüssel hinter key ab. + * @param key Der Pointer, der auf NULL gesetzt wird. */ - void freeKeyIfNotNull(); + void freeEvpKey(EVP_PKEY **key); }; #endif // HYBRIDCRYPT_H |
