X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=labo2-fsharp%2FCryptoFile%2FCrypto.fs;h=560cd1316378b366fe731f3acbf07a55d2dee2b2;hb=2fcf3ed38874e9aa6d2ccd6b9917bd3113d76aee;hp=836d636af67b37e72fabf38ed5984659b518b75a;hpb=137157b6dbd5efb99b486a30da6e10b0a175f530;p=crypto_lab2.git diff --git a/labo2-fsharp/CryptoFile/Crypto.fs b/labo2-fsharp/CryptoFile/Crypto.fs index 836d636..560cd13 100644 --- a/labo2-fsharp/CryptoFile/Crypto.fs +++ b/labo2-fsharp/CryptoFile/Crypto.fs @@ -1,11 +1,11 @@ namespace CryptoFile +open System +open System.IO +open System.Security.Cryptography + // Some cryptography primitives specific to CryptoFile. module internal Crypto = - open System - open System.IO - open System.Security.Cryptography - type Data = byte[] let rsaKeySize = 2048 @@ -62,7 +62,7 @@ module internal Crypto = /// Returns an encrypted output stream. let encryptAES (key: byte[]) (iv: byte[]) (outputStream: Stream) : CryptoStream = assert (key.Length = 32 && iv.Length = 16) - use aes = new AesManaged () + use aes = new AesCryptoServiceProvider () // Default mode is CBC. aes.KeySize <- 256 let encryptor = aes.CreateEncryptor (key, iv) new CryptoStream (outputStream, encryptor, CryptoStreamMode.Write) @@ -70,24 +70,18 @@ module internal Crypto = /// Returns a decrypted input stream. let decryptAES (key: byte[]) (iv: byte[]) (inputStream: Stream) : CryptoStream = assert (key.Length = 32 && iv.Length = 16) - use aes = new AesManaged () + use aes = new AesCryptoServiceProvider () aes.KeySize <- 256 let decryptor = aes.CreateDecryptor (key, iv) new CryptoStream (inputStream, decryptor, CryptoStreamMode.Read) + // Create a stream to compute the HMAC-SHA256 against all data being written. let HMACStream (key: byte[]) (outputStream: Stream) : Stream * HMACSHA256 = assert (key.Length = 32) let hmac = new HMACSHA256 (key) new CryptoStream (outputStream, hmac, CryptoStreamMode.Write) :> Stream, hmac - (*type HMACStream (buffer: byte[], output: Stream) = - inherit Stream () - override this.CanRead with get () = false - override this.CanSeek with get () = false - override this.CanWrite with get () = true - override this.Length with get () = raise <| new NotSupportedException () - override this.Position with get () = raise <| new NotSupportedException () - and set _ = raise <| new NotSupportedException () - override this.Flush () = - output.Flush () - override this.Read (_: byte[], _: int, _: int) = raise <| new NotSupportedException ()*) \ No newline at end of file + let ComputeHMAC (key: byte[]) (inputStream: Stream) : byte[] = + assert (key.Length = 32) + let hmac = new HMACSHA256 (key) + hmac.ComputeHash inputStream \ No newline at end of file