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 ()