\section{Technologieübersicht}

\begin{figure}[hbt]
\centering
\includegraphics[width=\linewidth]{img/classDiagram/HybridCrypt.png}
\caption[HybridCrypt UML]{Die Verwendung und Abhängigkeiten von HybridCrypt.}
\label{fig:HybridCryptUml}
\end{figure}

\subsection{HybridCrypt}

HybridCrypt dient zur Abstraktion der unterliegenden OpenSSL C-Aufrufe. Darüber hinaus kümmert es sich um die komplette Schlüsselverwaltung und auch das einlesen und öffnen von Dateien. Der Schlüssel des Nutzers wird zur Sicherheit nur innerhalb der Klasse vorgehalten und ist bis auf über den Export nicht zu bekommen. Um das Verschlüsseln mit mehreren Schlüsseln zu erlauben, wurde das vorgegeben Dateiformat erweitert und erlaubt somit nun mehrere RSA-Blöcke. Siehe Abb.\ref{fig:CryptLogFileFormat} für eine genauere Erläuterung des Formates.

\begin{figure}[hbt]
	\centering
	\includegraphics[width=\linewidth]{img/fileFormat/CryptLog.png}
	\caption[CryptLog Dateiformat]{Das Dateiformat von CryptLog für verschlüsselte Dateien.}
	\label{fig:CryptLogFileFormat}
\end{figure}

\subsection{CryptException}

Die Hauptfunktion Klasse, ist eine Fehlermeldung für den Nutzer und einen Exitcode für die Konsole zur Verfügung zu stellen. Der Fehlercode kommt aus dem ReturnCode \lstinline|enum|, welches darüber hinaus auch ermöglicht, den Fehlertyp jeder Instanz festzustellen. 

\subsection{Verwendete Bibliotheken}

\subsubsection{Qt}
Qt wurde sowohl für die Oberflächen benutzt, als auch zur Abstraktion von gängigen C++-Datentypen, da die Klassen einfacher zu nutzen sind und viele Fehlerüberprüfung entweder schon erledigt sind bzw. sich mit ein paar einfachen Methoden erledigen lassen.

\subsubsection{OpenSSL}
Für die Verschlüsselung, Generation von Zufallszahlen sowie Im-/Export von Schlüsseln wurde OpenSSL verwendet. OpenSSL bietet die sogenannte EVP-API an, mit der die meisten grundlegenden kryptographischen Primitive versteckt werden. Dies hat den hohen Vorteil, dass viele Fehler, die Kryptographienovizen machen, verhindert werden können. Darüber hinaus, kann dann später auch die Funktionalität mit andere Algorithmen ausgetauscht bzw. sogar erweitert werden, da die EVP-API unabhängig von der unterliegenden Implementierung ist. Für die Zufallszahlen bietet OpenSSL einen stark-kryptographischen Zufallszahlengenerator, der standardmäßig unter Linux ordentlich initialisiert wird, somit musste nicht mehr viel getan werden, als die korrekte Initialisierung zu überprüfen und die Zufallszahlen auszulesen.
