--- /dev/null
+module CryptoFileTests.Tests
+
+open System.IO
+open CryptoFile
+
+let doSomeTests () =
+ printfn "===== Unit tests"
+ CryptoFile.UnitTests.runAllUnitTests ()
+ printfn "===== Unit tests OK"
+
+ printfn "===== API tests"
+ let plainFilename = "test.txt"
+ let cipherFilename = "test.cipher"
+ let fileContent = "Screw the NSA"
+
+ File.WriteAllText (plainFilename, fileContent)
+
+ let keyCryptPub, keyCryptPriv = API.generatKeysPair
+ let keySigPub, keySigPriv = API.generatKeysPair
+
+ let encrypt () =
+ API.encryptFile plainFilename cipherFilename keySigPriv keyCryptPub
+
+ let decrypt () =
+ API.decryptFile cipherFilename "." keySigPub keyCryptPriv
+
+ let writeByteToCipherFileAt byte position =
+ using (new FileStream (cipherFilename, FileMode.Open, FileAccess.Write))
+ (fun fs -> fs.Position <- position
+ fs.Write ([| byte |], 0, 1))
+
+ encrypt ()
+ File.Delete plainFilename
+ decrypt ()
+ assert (File.ReadAllText plainFilename = fileContent)
+
+ printfn "== Altering the MAC..."
+ writeByteToCipherFileAt 0uy 0L
+ try
+ decrypt ()
+ assert false
+ with
+ | error -> assert (error :? IntegrityError)
+
+ printfn "== Altering the signature..."
+ encrypt ()
+ writeByteToCipherFileAt 0uy 32L
+ try
+ decrypt ()
+ assert false
+ with
+ | error -> assert (error :? SignatureMismatch)
+
+ printfn "== Altering the keys..."
+ encrypt ()
+ writeByteToCipherFileAt 0uy (32L + 256L)
+ try
+ decrypt ()
+ assert false
+ with
+ | error -> assert (error :? UnableToDecryptAESKeys)
+
+ printfn "== Altering the cyphering..."
+ encrypt ()
+ writeByteToCipherFileAt 0uy (32L + 256L + 256L)
+ try
+ decrypt ()
+ assert false
+ with
+ | error -> assert (error :? IntegrityError)
+
+ File.Delete cipherFilename
+ File.Delete plainFilename
+
+ printfn "===== API tests OK"