示例#1
0
        public EngineSpeedTest(SymmetricEngines Engine, CipherModes Mode, int DataSize, int KeySize, int Rounds, bool Encryption, bool Parallel, TestTypes TestType = TestTypes.FileIO)
        {
            _cipherType = Mode;
            _dataSize = DataSize;
            _roundCount = Rounds;
            _engineType = Engine;
            _isEncryption = Encryption;
            _isParallel = Parallel;
            _keySize = KeySize;
            _keyParam = GetKeyParams();
            _testType = TestType;

            if (IsStreamCipher())
            {
                _streamCipher = GetStreamEngine();
                _streamCipher.Initialize(_keyParam);

                if (_isParallel && _engineType == SymmetricEngines.Fusion || _engineType == SymmetricEngines.Salsa)
                {
                    if (_dataSize > MB100)
                        _blockSize = MB100;
                    else if (DataSize > MB10)
                        _blockSize = MB10;
                    else if (DataSize > MB1)
                        _blockSize = MB1;
                    else
                        _blockSize = 1024;
                }
                else
                {
                    _blockSize = 64000;
                }
            }
            else
            {
                _cipherEngine = GetCipher();
                _cipherEngine.Initialize(_isEncryption, _keyParam);

                // set parallel
                if (_cipherEngine.GetType().Equals(typeof(CTR)))
                    ((CTR)_cipherEngine).IsParallel = _isParallel;
                else if (_cipherEngine.GetType().Equals(typeof(CBC)))
                    ((CBC)_cipherEngine).IsParallel = _isParallel;
                else if (_cipherEngine.GetType().Equals(typeof(CFB)))
                    ((CFB)_cipherEngine).IsParallel = _isParallel;

                // set block
                if (_isParallel && (_cipherType.Equals(CipherModes.CTR) ||
                    _cipherType.Equals(CipherModes.CBC) && !_isEncryption ||
                    _cipherType.Equals(CipherModes.CFB) && !_isEncryption))
                {
                    if (_dataSize > MB100)
                        _blockSize = MB100;
                    else if (DataSize > MB10)
                        _blockSize = MB10;
                    else if (DataSize > MB1)
                        _blockSize = MB1;
                    else
                        _blockSize = 1024;

                    if (_cipherEngine.GetType().Equals(typeof(CTR)))
                        ((CTR)_cipherEngine).ParallelBlockSize = _blockSize;
                    else if (_cipherEngine.GetType().Equals(typeof(CBC)))
                        ((CBC)_cipherEngine).ParallelBlockSize = _blockSize;
                    else if (_cipherEngine.GetType().Equals(typeof(CFB)))
                        ((CFB)_cipherEngine).ParallelBlockSize = _blockSize;
                }
                else
                {
                    _blockSize = _cipherEngine.BlockSize;
                }
            }

            _inputBuffer = new byte[_blockSize];
            _outputBuffer = new byte[_blockSize];
        }
示例#2
0
        public EngineSpeedTest(SymmetricEngines Engine, CipherModes Mode, int DataSize, int KeySize, int Rounds, bool Encryption, bool Parallel, TestTypes TestType = TestTypes.FileIO)
        {
            _cipherType   = Mode;
            _dataSize     = DataSize;
            _roundCount   = Rounds;
            _engineType   = Engine;
            _isEncryption = Encryption;
            _isParallel   = Parallel;
            _keySize      = KeySize;
            _keyParam     = GetKeyParams();
            _testType     = TestType;

            if (IsStreamCipher())
            {
                _streamCipher = GetStreamEngine();
                _streamCipher.Initialize(_keyParam);

                if (_isParallel && _engineType == SymmetricEngines.ChaCha || _engineType == SymmetricEngines.Salsa)
                {
                    if (_dataSize > MB100)
                    {
                        _blockSize = MB100;
                    }
                    else if (DataSize > MB10)
                    {
                        _blockSize = MB10;
                    }
                    else if (DataSize > MB1)
                    {
                        _blockSize = MB1;
                    }
                    else
                    {
                        _blockSize = 1024;
                    }

                    // align block
                    if (_isParallel)
                    {
                        _blockSize -= (_blockSize % (64 * Environment.ProcessorCount));
                    }
                }
                else
                {
                    _blockSize = 64000;
                }
            }
            else
            {
                _cipherEngine = GetCipher();
                _cipherEngine.Initialize(_isEncryption, _keyParam);

                // set parallel
                if (_cipherEngine.GetType().Equals(typeof(CTR)))
                {
                    ((CTR)_cipherEngine).IsParallel = _isParallel;
                }
                else if (_cipherEngine.GetType().Equals(typeof(CBC)))
                {
                    ((CBC)_cipherEngine).IsParallel = _isParallel;
                }
                else if (_cipherEngine.GetType().Equals(typeof(CFB)))
                {
                    ((CFB)_cipherEngine).IsParallel = _isParallel;
                }

                // set block
                if (_isParallel && (_cipherType.Equals(CipherModes.CTR) ||
                                    _cipherType.Equals(CipherModes.CBC) && !_isEncryption ||
                                    _cipherType.Equals(CipherModes.CFB) && !_isEncryption))
                {
                    if (_dataSize > MB100)
                    {
                        _blockSize = MB100;
                    }
                    else if (DataSize > MB10)
                    {
                        _blockSize = MB10;
                    }
                    else if (DataSize > MB1)
                    {
                        _blockSize = MB1;
                    }
                    else
                    {
                        _blockSize = 1024;
                    }

                    // align block
                    if (_isParallel)
                    {
                        _blockSize -= (_blockSize % (16 * Environment.ProcessorCount));
                    }

                    if (_cipherEngine.GetType().Equals(typeof(CTR)))
                    {
                        ((CTR)_cipherEngine).ParallelBlockSize = _blockSize;
                    }
                    else if (_cipherEngine.GetType().Equals(typeof(CBC)))
                    {
                        ((CBC)_cipherEngine).ParallelBlockSize = _blockSize;
                    }
                    else if (_cipherEngine.GetType().Equals(typeof(CFB)))
                    {
                        ((CFB)_cipherEngine).ParallelBlockSize = _blockSize;
                    }
                }
                else
                {
                    _blockSize = _cipherEngine.BlockSize;
                }
            }

            _inputBuffer  = new byte[_blockSize];
            _outputBuffer = new byte[_blockSize];
        }