Beispiel #1
0
        internal bool OpenStream()
        {
            if (Mode == StreamMode.GetHeader || Mode == StreamMode.PushHeader)
            {
                parent.ExceptionHandler.CloseConnection("InvalidOperation",
                                                        $"You should not try to open a file stream with {Mode}",
                                                        nameof(FTEventArgs), nameof(OpenStream));
                return(false);
            }
            FileStream fileStream;
            FileMode   fileMode;
            FileAccess fileAccess;
            FileShare  fileShare;

            System.Security.Cryptography.CryptoStreamMode streamMode;
            CryptographicOperation operation;

            if (Mode == StreamMode.GetFile)
            {
                fileMode   = FileMode.Create;
                fileAccess = FileAccess.Write;
                fileShare  = FileShare.None;
                streamMode = System.Security.Cryptography.CryptoStreamMode.Write;
                operation  = CryptographicOperation.Decrypt;
            }
            else // Mode == StreamMode.PushFile
            {
                fileMode   = FileMode.Open;
                fileAccess = FileAccess.Read;
                fileShare  = FileShare.Read;
                streamMode = System.Security.Cryptography.CryptoStreamMode.Read;
                operation  = CryptographicOperation.Encrypt;
            }
            try
            {
                fileStream = new FileStream(Path, fileMode, fileAccess, fileShare);
            }
            catch (Exception ex)
            {
                parent.ExceptionHandler.CloseConnection(ex);
                return(false);
            }
            if (FileMeta.FileEncryption == ContentAlgorithm.None || !FileMeta.Available)
            {
                Stream = new ShaStream(fileStream, streamMode);
            }
            else if (FileMeta.FileEncryption == ContentAlgorithm.Aes256Cbc)
            {
                Stream = new AesShaStream(fileStream, FileMeta.FileKey, streamMode, operation);
            }
            else
            {
                parent.ExceptionHandler.CloseConnection("InvalidFileAlgorithm",
                                                        "Cannot run file transfer with " + FileMeta.FileEncryption,
                                                        nameof(FTEventArgs), nameof(OpenStream));
                return(false);
            }
            return(true);
        }
Beispiel #2
0
        public void TestWriteMode(string input)
        {
            byte[]       buffer     = Util.GetBytes(input);
            MemoryStream baseStream = new MemoryStream();
            ShaStream    stream     = new ShaStream(baseStream, CryptoStreamMode.Write);

            stream.Write(buffer, 0, buffer.Length);
            stream.FlushFinalBlock();
            stream.Dispose();
            Assert.IsFalse(baseStream.CanRead);
            Assert.IsFalse(baseStream.CanWrite);
        }