namespace CryptoFile module UnitTests = open System.IO open System.Text open System.Security.Cryptography open Crypto let testRSA () = let kpub, kpriv = generateRSAKeysPair () let plaintext = "Are you from the past?" let cipherdata = encryptRSA kpub (Encoding.UTF8.GetBytes plaintext) let decryptedData = decryptRSA kpriv cipherdata let decryptedText = Encoding.UTF8.GetString decryptedData assert (plaintext = decryptedText) printfn "testRSA OK" let testRSASignature () = let kpub, kpriv = generateRSAKeysPair () let plaintext = "Lightspeed is too slow. We'll have to go right to ludicrous speed!" use 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" use memory = new MemoryStream () let key = Crypto.rand 16 let iv = Crypto.rand 16 let input = encryptAES key iv memory use sw = new StreamWriter (input) sw.Write plaintext sw.Flush () input.FlushFinalBlock () memory.Position <- 0L let output = decryptAES key iv memory use sr = new StreamReader (output) assert (sr.ReadToEnd () = plaintext) printfn "testAES OK" let runAllUnitTests () = testRSA () testRSASignature () testAES ()