#ifndef HYBRIDCRYPT_H #define HYBRIDCRYPT_H #include #include #include #include #include #include #include #include class HybridCrypt { public: /** * @brief HybridCrypt::HybridCrypt * Initialisiert den CSPRNG von OpenSSL mittels /dev/random. */ HybridCrypt(); /** * @brief HybridCrypt::encrypt * Ließt eine Datei ein und schreibt diese verschlüsselt * mit den übergebenen Schlüsseln und dem Nutzerschlüssel. * @param infileName Der Name der zu verschlüsselnde Datei. * @param outfileName Der Name der verschlüsselten Datei (wird angelegt/überschrieben). * @param recipientKeyfileNames Die Schlüssel der empfänger, mit denen die Datei verschlüsselt wird. */ void encrypt(QString infileName, QString outfileName, QVector recipientKeyfileNames); /** * @brief HybridCrypt::decrypt * Entschlüsselt die übergeben Datei mit dem Nutzerschlüssel und schreibt diese entschlüsselt. * @param infileName Der Name der zu entschlüsselnden Datei. * @param outfileName Der Name der entschlüsselten Datei (wird angelegt/überschrieben). */ void decrypt(QString infileName, QString outfileName); /** * @brief HybridCrypt::createKeypair * Erzeugt sicher ein neues RSA Schlüsselpaar zur Verwendung in #encrypt und #decrypt. * Sollte mittel #exportUserKeypair exportiert werden. */ void createKeypair(); /** * @brief HybridCrypt::importUserKeypair * Importiert das Schlüsselpaar des Nutzers zur Verwendung in #encrypt und #decrypt. * @param keyfileName Der Name der Schlüsseldatei im (PEM|DER|NET|ASC) Format, die importiert werden soll. * @param password Das Password mit dem der private Schlüssel in der Datei verschlüsselt ist. */ void importUserKeypair(QString keyfileName, QString password); /** * @brief HybridCrypt::exportUserKeypair * Exportiert das Schlüsselpaar des Nutzers im (PEM|DER|NET|ASC) Format. * @param keyfileName Der Name der Datei in die das Schlüsselpaar exportiert wird. * @param password Das Password mit dem der private Schlüssel des Nutzers verschlüsselt wird. */ void exportUserKeypair(QString keyfileName, QString password); /** * @brief HybridCrypt::exportPublicUserKey * Exportiert den öffentlichen Schlüssel des Nutzers im (PEM|DER|NET|ASC) Format. * @param keyfileName Der Name der Datei in den der öffentliche Schlüssel exportiert wird. */ void exportPublicUserKey(QString keyfileName); private: EVP_PKEY privateUserkey; EVP_PKEY publicUserkey; /** * @brief isCsprngSeeded * Gibt an, ob der Zufallszahlengenerator von OpenSSL mit ausreichend Entropie initialisiert wurde. * @return Gibt wahr zurück wenn ausreichend intialisert wurde, ansonsten falsch. */ bool isCsprngSeeded(); }; #endif // HYBRIDCRYPT_H