- module internal Metadata =
- let filenameKey = "filename"
- let modificationTimeKey = "file-modification-time"
+ module internal MetadataKeys =
+ let filename = "filename"
+ let modificationTime = "file-modification-time"
+
+ let internal (@@) a1 a2 = Array.append a1 a2
let generatKeysPair : Key * Key = Crypto.generateRSAKeysPair
let encryptFile (inputFilePath : string) (outputFilePath : string) (signaturePrivKey: Key) (cryptPubKey : Key) =
let generatKeysPair : Key * Key = Crypto.generateRSAKeysPair
let encryptFile (inputFilePath : string) (outputFilePath : string) (signaturePrivKey: Key) (cryptPubKey : Key) =
- let keyAES, keyMAC, iv = Crypto.rand 32, Crypto.rand 32, Crypto.rand 16
+ let keyAES, keyMAC, iv = Crypto.rand 16, Crypto.rand 32, Crypto.rand 16
use outputStream = new FileStream (outputFilePath, FileMode.Create, FileAccess.Write)
let writer = new BinaryWriter (outputStream)
use outputStream = new FileStream (outputFilePath, FileMode.Create, FileAccess.Write)
let writer = new BinaryWriter (outputStream)
// Plaintext -> cryptoStream -> hmacStream -> cyphertext.
let hmacStream, hmac = Crypto.HMACStream keyMAC outputStream
// Plaintext -> cryptoStream -> hmacStream -> cyphertext.
let hmacStream, hmac = Crypto.HMACStream keyMAC outputStream
- let metaData = new Metadata ([Metadata.filenameKey, fileInfo.Name
- Metadata.modificationTimeKey, fileInfo.LastWriteTimeUtc.Ticks.ToString ()])
+ let metaData = new Metadata ([MetadataKeys.filename, fileInfo.Name
+ MetadataKeys.modificationTime, fileInfo.LastWriteTimeUtc.Ticks.ToString ()])
let decryptFile (sourceFilePath : string) (targetDirPath : string) (signaturePubKey: Key) (decryptPrivKey : Key) =
use inputStream = new FileStream (sourceFilePath, FileMode.Open, FileAccess.Read)
use reader = new BinaryReader (inputStream)
let decryptFile (sourceFilePath : string) (targetDirPath : string) (signaturePubKey: Key) (decryptPrivKey : Key) =
use inputStream = new FileStream (sourceFilePath, FileMode.Open, FileAccess.Read)
use reader = new BinaryReader (inputStream)
try reader.ReadBytes 256 |> Crypto.decryptRSA decryptPrivKey
with
| :? Security.Cryptography.CryptographicException -> raise UnableToDecryptAESKeys
try reader.ReadBytes 256 |> Crypto.decryptRSA decryptPrivKey
with
| :? Security.Cryptography.CryptographicException -> raise UnableToDecryptAESKeys
- let filePath = Path.Combine (targetDirPath, metadata.get Metadata.filenameKey)
- let modificationTime = new DateTime (metadata.get Metadata.modificationTimeKey |> int64)
+ let filePath = Path.Combine (targetDirPath, metadata.get MetadataKeys.filename)
+ let modificationTime = new DateTime (metadata.get MetadataKeys.modificationTime |> int64)
let fileInfo = new FileInfo (filePath)
using (fileInfo.Create ()) <| fun outputStream -> cryptoStream.CopyTo outputStream
fileInfo.LastWriteTimeUtc <- modificationTime
let fileInfo = new FileInfo (filePath)
using (fileInfo.Create ()) <| fun outputStream -> cryptoStream.CopyTo outputStream
fileInfo.LastWriteTimeUtc <- modificationTime