X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=labo2-fsharp%2FCryptoFile%2FAPI.fs;h=250bdbe22786dc140cb8b343961646b51e2cc383;hb=61a8b3492e89e883b23c158eb52ba2b070234df8;hp=1601c97a8fb4fbb00e37d762c378f75f507c6832;hpb=19a9446e4042d5e451f1ae0534ffba242d33879e;p=crypto_lab2.git diff --git a/labo2-fsharp/CryptoFile/API.fs b/labo2-fsharp/CryptoFile/API.fs index 1601c97..250bdbe 100644 --- a/labo2-fsharp/CryptoFile/API.fs +++ b/labo2-fsharp/CryptoFile/API.fs @@ -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