Put the API in an seperate library assembly and create an assembly for testing.
[crypto_lab2.git] / labo2-fsharp / CryptoFile / Tests.fs
diff --git a/labo2-fsharp/CryptoFile/Tests.fs b/labo2-fsharp/CryptoFile/Tests.fs
new file mode 100644 (file)
index 0000000..e1f933b
--- /dev/null
@@ -0,0 +1,31 @@
+namespace CryptoFile
+
+module Tests =
+    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 runAllTests () =
+        testRSA ()
+        testRSASignature ()
\ No newline at end of file