let decrypt () =
API.decryptFile cipherFilename "." keySigPub keyCryptPriv
- let writeByteToCipherFileAt byte position =
- using (new FileStream (cipherFilename, FileMode.Open, FileAccess.Write))
+ let incrementByteCipherFileAt position =
+ using (new FileStream (cipherFilename, FileMode.Open, FileAccess.ReadWrite))
(fun fs -> fs.Position <- position
- fs.Write ([| byte |], 0, 1))
+ let byte = fs.ReadByte () |> byte
+ fs.Position <- position
+ fs.Write ([| byte + 1uy |], 0, 1)) // Automatically modulo 256.
encrypt ()
File.Delete plainFilename
assert (File.ReadAllText plainFilename = fileContent)
printfn "== Altering the MAC..."
- writeByteToCipherFileAt 0uy 0L
+ incrementByteCipherFileAt 0L
try
decrypt ()
assert false
printfn "== Altering the signature..."
encrypt ()
- writeByteToCipherFileAt 0uy 32L
+ incrementByteCipherFileAt 32L
try
decrypt ()
assert false
printfn "== Altering the keys..."
encrypt ()
- writeByteToCipherFileAt 0uy (32L + 256L)
+ incrementByteCipherFileAt (32L + 256L)
try
decrypt ()
assert false
with
| error -> assert (error :? UnableToDecryptAESKeys)
- printfn "== Altering the cyphering..."
+ printfn "== Altering the cyphertext..."
encrypt ()
- writeByteToCipherFileAt 0uy (32L + 256L + 256L)
+ incrementByteCipherFileAt (32L + 256L + 256L)
try
decrypt ()
assert false