diff options
Diffstat (limited to 'crypt/hybridcrypt.cpp')
| -rw-r--r-- | crypt/hybridcrypt.cpp | 67 |
1 files changed, 41 insertions, 26 deletions
diff --git a/crypt/hybridcrypt.cpp b/crypt/hybridcrypt.cpp index 6d0f202..fbe6791 100644 --- a/crypt/hybridcrypt.cpp +++ b/crypt/hybridcrypt.cpp @@ -91,59 +91,79 @@ void HybridCrypt::createKeypair() void HybridCrypt::importUserKeypair(QString keyfileName, QString password) { - if (isCsprngSeeded()) + // Räume den alten Schlüssel vorher ab + freeKeyIfNotNull(); + + FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "r"); + + // Datei existiert nicht + if (keyfile == NULL) { - // Räume den alten Schlüssel vorher ab - freeKeyIfNotNull(); + throw CryptException("Datei nicht gefunden: " + keyfileName.toStdString(), 1); + } + + // Ließ den Schlüssel des Nutzers ein + userKeypair = PEM_read_PrivateKey(keyfile, NULL, NULL, + (void *) password.toStdString().c_str()); + + // Räume die Ressourcen auf + fclose(keyfile); - FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "r"); + // Wirf einen Fehler, falls OpenSSL ein Problem hatte + if (userKeypair == NULL) + { + throwOpenSslException(); + } +} + +void HybridCrypt::exportUserKeypair(QString keyfileName, QString password) +{ + if (userKeypair != NULL && isCsprngSeeded()) + { + FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "w+"); - // Datei existiert nicht + // Teste, ob die Datei zum Schreiben geöffnet werden konnte if (keyfile == NULL) { - throw CryptException("Datei nicht gefunden: " + keyfileName.toStdString(), 1); + throw CryptException("Konnte Datei nicht schreiben: " + + keyfileName.toStdString(), 1); } - // Ließ den Schlüssel des Nutzers ein - userKeypair = PEM_read_PrivateKey(keyfile, NULL, NULL, - (void *) password.toStdString().c_str()); + // Wenn password ein Leerstring ist, verschlüssele den privaten Schlüssel nicht + int opensslReturnError = PEM_write_PKCS8PrivateKey(keyfile, userKeypair, + (password.isEmpty()) ? NULL : EVP_aes_256_cbc(), NULL, 0, NULL, + (void *) password.toStdString().c_str()); // Räume die Ressourcen auf fclose(keyfile); // Wirf einen Fehler, falls OpenSSL ein Problem hatte - if (userKeypair == NULL) + if (!opensslReturnError) { throwOpenSslException(); } } } -void HybridCrypt::exportUserKeypair(QString keyfileName, QString password) +void HybridCrypt::exportPublicUserKey(QString keyfileName) { - if (userKeypair != NULL && isCsprngSeeded()) + if (userKeypair != NULL) { FILE *keyfile = fopen(keyfileName.toStdString().c_str(), "w+"); - // Teste ob die Datei zum Schreiben geöffnet werden konnte + // Teste, ob die Datei zum Schreiben geöffnet werden konnte if (keyfile == NULL) { throw CryptException("Konnte Datei nicht schreiben: " + keyfileName.toStdString(), 1); } - // Wird benutzt um die OpenSSL Fehler aufzufangen - int opensslReturnError = 0; - - // Wenn password ein Leerstring ist, verschlüssele den privaten Schlüssel nicht - opensslReturnError = PEM_write_PKCS8PrivateKey(keyfile, userKeypair, - (password.isEmpty()) ? NULL : EVP_aes_256_cbc(), NULL, 0, NULL, - (void *) password.toStdString().c_str()); + int opensslReturnError = PEM_write_PUBKEY(keyfile, userKeypair); // Räume die Ressourcen auf fclose(keyfile); - // Wirf einen Fehler, falls OpenSSL ein Problem hatte + // Wirft einen Fehler, falls OpenSSL ein Problem hatte if (!opensslReturnError) { throwOpenSslException(); @@ -151,11 +171,6 @@ void HybridCrypt::exportUserKeypair(QString keyfileName, QString password) } } -void HybridCrypt::exportPublicUserKey(QString keyfileName) -{ - -} - bool HybridCrypt::isCsprngSeeded() { return RAND_status() == 1; |
