Ejemplo n.º 1
0
        public static Stream CreateBlock(this Stream baseStream, BlockOptions options, byte[] key, byte[] iv)
        {
            var compression = options.HasFlag(BlockOptions.Compression);
            var encryption  = options.HasFlag(BlockOptions.Encryption);

            if (compression)
            {
                if (encryption) //compression & encryption
                {
                    var gzipStream = new GZipStream(baseStream, CompressionLevel.Optimal, true);
                    var rijAlg     = Rijndael.Create();
                    rijAlg.Key = key;
                    rijAlg.IV  = iv;
                    var encryptor        = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
                    var encryptionStream = new CryptoStream(gzipStream, encryptor, CryptoStreamMode.Write);
                    return(BlockStream.Create(baseStream, encryptionStream, () =>
                    {
                        encryptionStream.FlushFinalBlock();
                        gzipStream.Close();
                    }, CloseOptions.Flush));
                }
                else //compression
                {
                    var gzipStream = new GZipStream(baseStream, CompressionLevel.Optimal, true);
                    return(BlockStream.Create(baseStream, gzipStream, null, CloseOptions.Flush | CloseOptions.CloseWrapper));
                }
            }
            else
            {
                if (encryption) //encryption
                {
                    var rijAlg = Rijndael.Create();
                    rijAlg.Key = key;
                    rijAlg.IV  = iv;
                    var encryptor        = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
                    var encryptionStream = new CryptoStream(baseStream, encryptor, CryptoStreamMode.Write);
                    return(BlockStream.Create(baseStream, encryptionStream, () =>
                    {
                        encryptionStream.FlushFinalBlock();
                    }, CloseOptions.Flush));
                }
                else
                {
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
Ejemplo n.º 2
0
        private bool MatchesBlockOptionsFilter(string name, BlockOptions options)
        {
            var m = _blocksfilter.Match(name);

            if (m.Success)
            {
                switch (int.Parse(m.Groups[1].Value))
                {
                case 4:
                    return(options.HasFlag(BlockOptions.IPv4));

                case 6:
                    return(options.HasFlag(BlockOptions.IPv6));
                }
            }
            return(false);
        }