Add some tests.
[crypto_lab2.git] / labo2-fsharp / CryptoFile / UnitTests.fs
diff --git a/labo2-fsharp/CryptoFile/UnitTests.fs b/labo2-fsharp/CryptoFile/UnitTests.fs
new file mode 100644 (file)
index 0000000..fb46eb7
--- /dev/null
@@ -0,0 +1,49 @@
+namespace CryptoFile
+
+module UnitTests =
+    open System.IO
+    open System.Text
+    open System.Security.Cryptography
+    open Crypto
+
+    let testRSA () =
+        let kpub, kpriv = generateRSAKeysPair
+
+        let plaintext = "Hello, World!"
+        printfn "plaintext: %A" plaintext
+
+        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 sha256 = new SHA256Managed ()
+        let signature = signRSA kpriv (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext))
+        assert verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes plaintext)) signature
+        assert not (verifySignRSA kpub (sha256.ComputeHash (Encoding.UTF8.GetBytes "Hello!")) signature)
+        printfn "testRSASignature OK"
+
+    let testAES () =
+        let plaintext = "There is no place like 127.0.0.1"
+        let output = new MemoryStream ()
+        let sr = new StreamReader (output)
+        let key = Crypto.rand 32
+        let iv = Crypto.rand 16
+
+        let input = encryptAES key iv output
+        let sw = new StreamWriter (input)
+
+        sw.Write plaintext
+        assert (sr.ReadToEnd () = plaintext)
+
+    let runAllUnitTests () =
+        testRSA ()
+        testRSASignature ()
\ No newline at end of file