Add some tests.
[crypto_lab2.git] / labo2-fsharp / CryptoFile / API.fs
index 1601c97..250bdbe 100644 (file)
@@ -42,7 +42,7 @@ module API =
         Crypto.encryptRSA cryptPubKey (Array.append keyAES <| Array.append keyMAC iv) |> writer.Write
 
         // Plaintext -> cryptoStream -> hmacStream -> cyphertext.
-        let (hmacStream, hmac) = Crypto.HMACStream keyMAC outputStream
+        let hmacStream, hmac = Crypto.HMACStream keyMAC outputStream
         use cryptoStream = Crypto.encryptAES keyAES iv hmacStream
         let cryptoWriter = new BinaryWriter (cryptoStream)
 
@@ -67,7 +67,10 @@ module API =
         use reader = new BinaryReader (inputStream)
         let mac = reader.ReadBytes 32
         let signature = reader.ReadBytes 256
-        let keys = reader.ReadBytes 256 |> Crypto.decryptRSA decryptPrivKey
+        let keys = 
+            try reader.ReadBytes 256 |> Crypto.decryptRSA decryptPrivKey
+            with 
+                | :? Security.Cryptography.CryptographicException -> raise UnableToDecryptAESKeys
         let keyAES = keys.[0..31]
         let keyMAC = keys.[32..63]
         let iv = keys.[64..79]
@@ -76,7 +79,7 @@ module API =
         let mac' = Crypto.ComputeHMAC keyMAC inputStream
         if mac' <> mac then
             raise IntegrityError
-
+        
         // Authentication validation.
         if not <| Crypto.verifySignRSA signaturePubKey mac' signature then
             raise SignatureMismatch