let testRSA () =
let kpub, kpriv = generateRSAKeysPair
-
- let plaintext = "Hello, World!"
- printfn "plaintext: %A" plaintext
-
+ let plaintext = "Are you from the past?"
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 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)
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
+ use memory = new MemoryStream ()
+ let key = Crypto.rand 16
let iv = Crypto.rand 16
- let input = encryptAES key iv output
- let sw = new StreamWriter (input)
-
+ 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 ()
\ No newline at end of file
+ testRSASignature ()
+ testAES ()
\ No newline at end of file