Encrypting should be OK.
[crypto_lab2.git] / labo2-fsharp / CryptoFileTests / Program.fs
index cc70f97..4b83072 100644 (file)
@@ -1,6 +1,7 @@
-module Labo2.Main
+module CryptoFileTests.Main
 
 open System
+open System.IO;
 open CryptoFile
 
 let printUsage () = 
@@ -9,12 +10,34 @@ let printUsage () =
              \tencrypt: Encrypt a file <in> to <out>\n\
              \tdecrypt: Decrypt a file <in> to <out>" System.AppDomain.CurrentDomain.FriendlyName
 
+// Module to store and retreive the keys to and from a file.
+// The private keys are stored in plain file! Do not let anyone access these files!
+module internal Keys =
+    // Try to read the public key and private key from files. If one of a file doesn't exist
+    // a new key pair is created, stored the returned.
+    let getKey (filenamePub: string) (filenamePriv: string) : Key * Key =
+        try
+            use srPub = new StreamReader (filenamePub)
+            use srPriv = new StreamReader (filenamePriv)
+            srPub.ReadToEnd (), srPriv.ReadToEnd ()
+        with
+        | _ ->
+            use swPub = new StreamWriter (filenamePub)
+            use swPriv = new StreamWriter (filenamePriv)
+            let keySigPub, keySigPriv = API.generatKeysPair
+            swPub.Write keySigPub
+            swPriv.Write keySigPriv
+            keySigPub, keySigPriv
+
+    let getSig : Key * Key = getKey "keys-sign.pub" "keys-sign.priv"
+    let getCrypt : Key * Key = getKey "keys-crypt.pub" "keys-crypt.priv"
+
 [<EntryPoint>]
 let main args = 
     printfn "Labo n°2"
 
-    let keySigPub, keySigPriv = API.generatKeysPair
-    let keyCryptPub, keyCryptPriv = API.generatKeysPair
+    let keySigPub, keySigPriv = Keys.getSig
+    let keyCryptPub, keyCryptPriv = Keys.getCrypt
 
     match args with
     | [| "tests" |] -> Tests.runAllTests ()