eb8a2902805fe33956e32b1309f771c1a70028ec
1
module CryptoFileTests.Tests
7 printfn
"===== Unit tests"
8 CryptoFile.UnitTests.runAllUnitTests
()
9 printfn
"===== Unit tests OK"
11 printfn
"===== API tests"
12 let plainFilename = "test.txt"
13 let cipherFilename = "test.cipher"
14 let fileContent = "Screw the NSA"
16 File.WriteAllText (plainFilename, fileContent)
18 let keyCryptPub, keyCryptPriv
= API.generatKeysPair
19 let keySigPub, keySigPriv
= API.generatKeysPair
22 API.encryptFile
plainFilename cipherFilename keySigPriv keyCryptPub
25 API.decryptFile
cipherFilename "." keySigPub keyCryptPriv
27 let incrementByteCipherFileAt position
=
28 using
(new FileStream (cipherFilename, FileMode.Open, FileAccess.ReadWrite))
29 (fun fs
-> fs
.Position <- position
30 let byte = fs
.ReadByte () |> byte
31 fs
.Position <- position
32 fs
.Write ([| byte + 1uy |], 0, 1)) // Automatically modulo 256.
35 File.Delete plainFilename
37 assert (File.ReadAllText plainFilename = fileContent)
39 printfn
"== Altering the MAC..."
40 incrementByteCipherFileAt 0L
45 | error -> assert (error :? IntegrityError)
47 printfn
"== Altering the signature..."
49 incrementByteCipherFileAt 32L
54 | error -> assert (error :? SignatureMismatch)
56 printfn
"== Altering the keys..."
58 incrementByteCipherFileAt (32L + 256L)
63 | error -> assert (error :? UnableToDecryptAESKeys)
65 printfn
"== Altering the cyphertext..."
67 incrementByteCipherFileAt (32L + 256L + 256L)
72 | error -> assert (error :? IntegrityError)
74 File.Delete cipherFilename
75 File.Delete plainFilename
77 printfn
"===== API tests OK"