projects
/
crypto_lab2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add some tests.
[crypto_lab2.git]
/
labo2-fsharp
/
CryptoFile
/
API.fs
diff --git
a/labo2-fsharp/CryptoFile/API.fs
b/labo2-fsharp/CryptoFile/API.fs
index
1601c97
..
250bdbe
100644
(file)
--- 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.
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)
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
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]
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
let mac' = Crypto.ComputeHMAC keyMAC inputStream
if mac' <> mac then
raise IntegrityError
-
+
// Authentication validation.
if not <| Crypto.verifySignRSA signaturePubKey mac' signature then
raise SignatureMismatch
// Authentication validation.
if not <| Crypto.verifySignRSA signaturePubKey mac' signature then
raise SignatureMismatch