Clean up + report update.
authorUmmon <greg.burri@gmail.com>
Sat, 29 Nov 2014 09:36:28 +0000 (10:36 +0100)
committerUmmon <greg.burri@gmail.com>
Sat, 29 Nov 2014 09:36:28 +0000 (10:36 +0100)
labo2-fsharp/CryptoFile/UnitTests.fs
rapport/main.tex

index fb46eb7..e43d7b4 100644 (file)
@@ -8,23 +8,17 @@ module UnitTests =
 
     let testRSA () =
         let kpub, kpriv = generateRSAKeysPair
-
-        let plaintext = "Hello, World!"
-        printfn "plaintext: %A" plaintext
-
+        let plaintext = "Are you from the past?"
         let cipherdata = encryptRSA kpub (Encoding.UTF8.GetBytes plaintext)
-        printfn "cipherdata: (size: %A) %A" cipherdata.Length cipherdata
-
         let decryptedData = decryptRSA kpriv cipherdata
         let decryptedText = Encoding.UTF8.GetString decryptedData
-        printfn "decryptedtext: %A" decryptedText
 
         assert (plaintext = decryptedText)
         printfn "testRSA OK"
 
     let testRSASignature () =
         let kpub, kpriv = generateRSAKeysPair
-        let plaintext = "Hello, World!"
+        let plaintext = "Lightspeed is too slow. We'll have to go right to ludicrous speed!"
         let sha256 = new SHA256Managed ()
         let signature = signRSA kpriv (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext))
         assert verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext)) signature
@@ -33,17 +27,24 @@ module UnitTests =
 
     let testAES () =
         let plaintext = "There is no place like 127.0.0.1"
-        let output = new MemoryStream ()
-        let sr = new StreamReader (output)
+        let memory = new MemoryStream ()
         let key = Crypto.rand 32
         let iv = Crypto.rand 16
 
-        let input = encryptAES key iv output
+        let input = encryptAES key iv memory
         let sw = new StreamWriter (input)
-
         sw.Write plaintext
+        sw.Flush ()
+        input.FlushFinalBlock ()
+
+        memory.Position <- 0L
+        let output = decryptAES key iv memory
+        let sr = new StreamReader (output)
+
         assert (sr.ReadToEnd () = plaintext)
+        printfn "testAES OK"
 
     let runAllUnitTests () =
         testRSA ()
-        testRSASignature ()
\ No newline at end of file
+        testRSASignature ()
+        testAES ()
\ No newline at end of file
index 508355d..2addf92 100644 (file)
@@ -123,18 +123,18 @@ container = header, ciphertext ;
 header = mac[256], signature[2048], keys[2048] ;
 ciphertext = AES(plaintext) ;
 plaintext = meta-data, file-content ;
-meta-data = meta-data-size[int32], { key-value-pair } ;
+meta-data = nb-meta-data[byte], { key-value-pair } ;
 key-value-pair = key[string], value[string] ;
 string = size[vint], content-utf8 ;
 \end{lstlisting}
 
-\texttt{meta-data-size} permet de connaître la taille des méta-données afin de les déchiffrer au préalable du contenu du fichier.
+\texttt{nb-meta-data} est le nombre de pair clef-valeur des méta-données.
 
 \texttt{keys} correspond aux clefs $k_c$ et $k_a$ ainsi qu'a l'\emph{IV} le tout chiffré avec \emph{RSA-2048}. La taille des données chiffrées est égale à $k_c + k_a + iv = 256 + 256 + 128 = 640\,bits$.
 
 Les méta-données (\texttt{meta-data}) peuvent contenir, par exemple, le nom du fichier, sa date de création, ses droits, ou tout autres données associées.
 
-Le type \texttt{vint} correspond à un entier de taille variable, initialement occupant un octets.
+Le type \texttt{vint} correspond à un entier de taille variable, initialement occupant un octet.
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -223,9 +223,9 @@ La \emph{ĺibrary} \emph{CryptoFile} est composé de trois fichiers :
 
 \begin{itemize}
    \item \emph{Types.fs} : Quelques types publics.
-   \item \emph{Crypto.fs} : Contient toutes les primitives cryptographique nécessaire.
-   \item \emph{UnitTests.fs} : Contient quelques tests unitaires du module \emph{Crypto}.
-   \item \emph{API.fs} : Contient l'interface publique de la \emph{library}. Elle est détaillée ci après.
+   \item \emph{Crypto.fs} : Toutes les primitives cryptographique nécessaire.
+   \item \emph{UnitTests.fs} : Quelques tests unitaires du module \emph{Crypto}.
+   \item \emph{API.fs} : L'interface publique de la \emph{library}. Elle est détaillée ci-après.
 \end{itemize}
 
 \subsubsection{API}
@@ -246,9 +246,25 @@ module API =
 \end{lstlisting}
 
 
+\subsection{Mesures de performance}
 
-17 Mo de mémoire et 19 s pour chiffrer un fichier de 404 Mo
+Quelques mesures sur un fichier de 871 MiB.
 
+Chiffrement :
+
+\begin{itemize}
+   \item Temps : 42 s.
+   \item Mémoire utilisée : 15 MiB.
+   \item Taux \emph{CPU} : un cœur à 100 \%
+\end{itemize}
+
+Déchiffrement :
+
+\begin{itemize}
+   \item Temps : 55 s.
+   \item Mémoire utilisée : 20 MiB.
+   \item Taux \emph{CPU} : un cœur à 100 \%
+\end{itemize}
 
 
 \section{Analyse de la sécurité de l'implémentation}