- // Write metadata.
- let metaData = new Metadata ([filename, fileInfo.Name; creationTimeKey, fileInfo.CreationTimeUtc.Ticks.ToString ()])
- let metaDataStream = new MemoryStream ()
- metaData.WriteTo metaDataStream
- cryptoWriter.Write (int metaDataStream.Length)
- printfn "meta size: %A" (int metaDataStream.Length)
- metaDataStream.Position <- 0L
- metaDataStream.CopyTo cryptoStream
+ // Write the file metadata.
+ let metaData = new Metadata ([MetaData.filename, fileInfo.Name
+ MetaData.creationTimeKey, fileInfo.CreationTimeUtc.Ticks.ToString ()])
+ metaData.WriteTo cryptoStream
+
+ // Write the content of the file.
+ inputStream.CopyTo cryptoStream
+ cryptoStream.FlushFinalBlock ()
+
+ // Write the HMAC at the begining of the file.
+ outputStream.Position <- 0L
+ writer.Write hmac.Hash
+
+ // Write the signature.
+ Crypto.signRSA signaturePrivKey hmac.Hash |> writer.Write