X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=labo2-fsharp%2FCryptoFileTests%2FProgram.fs;h=509b6d7aa331283aa15df900aadd15e3b66be405;hb=HEAD;hp=cc70f97c5ad4fdd41cbb35b6853c62c151ccbb6d;hpb=beda8d83dc421c479bdcf5ee626ec85ee8555a80;p=crypto_lab2.git diff --git a/labo2-fsharp/CryptoFileTests/Program.fs b/labo2-fsharp/CryptoFileTests/Program.fs index cc70f97..509b6d7 100644 --- a/labo2-fsharp/CryptoFileTests/Program.fs +++ b/labo2-fsharp/CryptoFileTests/Program.fs @@ -1,6 +1,7 @@ -module Labo2.Main +module CryptoFileTests.Main open System +open System.IO open CryptoFile let printUsage () = @@ -9,16 +10,37 @@ let printUsage () = \tencrypt: Encrypt a file to \n\ \tdecrypt: Decrypt a file to " 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 then 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 keyPub, keyPriv = API.generatKeysPair () + swPub.Write keyPub + swPriv.Write keyPriv + keyPub, keyPriv + + let getSig : Key * Key = getKey "keys-sign.pub" "keys-sign.priv" + let getCrypt : Key * Key = getKey "keys-crypt.pub" "keys-crypt.priv" + [] 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 () + | [| "tests" |] -> Tests.doSomeTests () | [| "encrypt"; input; output |] -> API.encryptFile input output keySigPriv keyCryptPub | [| "decrypt"; input; outputDir |] -> API.decryptFile input outputDir keySigPub keyCryptPriv | _ -> printUsage () 0 + \ No newline at end of file