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]; }
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]; }