Clean up + report in PDF.
[crypto_lab2.git] / labo2-fsharp / CryptoFile / UnitTests.fs
1 namespace CryptoFile
2
3 module UnitTests =
4 open System.IO
5 open System.Text
6 open System.Security.Cryptography
7 open Crypto
8
9 let testRSA () =
10 let kpub, kpriv = generateRSAKeysPair
11 let plaintext = "Are you from the past?"
12 let cipherdata = encryptRSA kpub (Encoding.UTF8.GetBytes plaintext)
13 let decryptedData = decryptRSA kpriv cipherdata
14 let decryptedText = Encoding.UTF8.GetString decryptedData
15
16 assert (plaintext = decryptedText)
17 printfn "testRSA OK"
18
19 let testRSASignature () =
20 let kpub, kpriv = generateRSAKeysPair
21 let plaintext = "Lightspeed is too slow. We'll have to go right to ludicrous speed!"
22 use sha256 = new SHA256Managed ()
23 let signature = signRSA kpriv (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext))
24 assert verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext)) signature
25 assert not (verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes "Hello!")) signature)
26 printfn "testRSASignature OK"
27
28 let testAES () =
29 let plaintext = "There is no place like 127.0.0.1"
30 use memory = new MemoryStream ()
31 let key = Crypto.rand 16
32 let iv = Crypto.rand 16
33
34 let input = encryptAES key iv memory
35 use sw = new StreamWriter (input)
36 sw.Write plaintext
37 sw.Flush ()
38 input.FlushFinalBlock ()
39
40 memory.Position <- 0L
41 let output = decryptAES key iv memory
42 use sr = new StreamReader (output)
43
44 assert (sr.ReadToEnd () = plaintext)
45 printfn "testAES OK"
46
47 let runAllUnitTests () =
48 testRSA ()
49 testRSASignature ()
50 testAES ()