Add some tests.
[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
12 let plaintext = "Hello, World!"
13 printfn "plaintext: %A" plaintext
14
15 let cipherdata = encryptRSA kpub (Encoding.UTF8.GetBytes plaintext)
16 printfn "cipherdata: (size: %A) %A" cipherdata.Length cipherdata
17
18 let decryptedData = decryptRSA kpriv cipherdata
19 let decryptedText = Encoding.UTF8.GetString decryptedData
20 printfn "decryptedtext: %A" decryptedText
21
22 assert (plaintext = decryptedText)
23 printfn "testRSA OK"
24
25 let testRSASignature () =
26 let kpub, kpriv = generateRSAKeysPair
27 let plaintext = "Hello, World!"
28 let sha256 = new SHA256Managed ()
29 let signature = signRSA kpriv (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext))
30 assert verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext)) signature
31 assert not (verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes "Hello!")) signature)
32 printfn "testRSASignature OK"
33
34 let testAES () =
35 let plaintext = "There is no place like 127.0.0.1"
36 let output = new MemoryStream ()
37 let sr = new StreamReader (output)
38 let key = Crypto.rand 32
39 let iv = Crypto.rand 16
40
41 let input = encryptAES key iv output
42 let sw = new StreamWriter (input)
43
44 sw.Write plaintext
45 assert (sr.ReadToEnd () = plaintext)
46
47 let runAllUnitTests () =
48 testRSA ()
49 testRSASignature ()