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/hybridcrypt.cpp | |
| parent | c529186d9c9f71054ea1cf92bfb4c25721d5cf78 (diff) | |
| download | src-0764b73f6a61160ad6765f17073110d8236b68d1.tar.gz src-0764b73f6a61160ad6765f17073110d8236b68d1.zip | |
Importiere nur RSA Schlüssel
Diffstat (limited to 'crypt/hybridcrypt.cpp')
| -rw-r--r-- | crypt/hybridcrypt.cpp | 33 |
1 files changed, 25 insertions, 8 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; +} |
