Ejemplo n.º 1
0
        public IModeBlockCipher <SymmetricCipherResult> GetStandardCipher(
            IBlockCipherEngine engine,
            BlockCipherModesOfOperation modeOfOperation
            )
        {
            switch (modeOfOperation)
            {
            case BlockCipherModesOfOperation.Cbc:
                return(new CbcBlockCipher(engine));

            case BlockCipherModesOfOperation.Cbci:
                return(new CbciBlockCipher(engine));

            case BlockCipherModesOfOperation.CbcCs1:
                return(new CbcCtsBlockCipher(engine, new CiphertextStealingMode1()));

            case BlockCipherModesOfOperation.CbcCs2:
                return(new CbcCtsBlockCipher(engine, new CiphertextStealingMode2()));

            case BlockCipherModesOfOperation.CbcCs3:
                return(new CbcCtsBlockCipher(engine, new CiphertextStealingMode3()));

            case BlockCipherModesOfOperation.CbcMac:
                return(new CbcMacBlockCipher(engine));

            case BlockCipherModesOfOperation.CfbBit:
                return(new CfbBlockCipher(engine, new ShiftRegisterStrategyBit(engine)));

            case BlockCipherModesOfOperation.CfbByte:
                return(new CfbBlockCipher(engine, new ShiftRegisterStrategyByte(engine)));

            case BlockCipherModesOfOperation.CfbBlock:
                return(new CfbBlockCipher(engine, new ShiftRegisterStrategyFullBlock(engine)));

            case BlockCipherModesOfOperation.CfbpBit:
                return(new CfbpBlockCipher(engine, new ShiftRegisterStrategyBit(engine)));

            case BlockCipherModesOfOperation.CfbpByte:
                return(new CfbpBlockCipher(engine, new ShiftRegisterStrategyByte(engine)));

            case BlockCipherModesOfOperation.CfbpBlock:
                return(new CfbpBlockCipher(engine, new ShiftRegisterStrategyFullBlock(engine)));

            case BlockCipherModesOfOperation.Ctr:
                throw new ArgumentException($"{modeOfOperation} not a standard mode, use {nameof(GetCounterCipher)} instead");

            case BlockCipherModesOfOperation.Ecb:
                return(new EcbBlockCipher(engine));

            case BlockCipherModesOfOperation.Ofb:
                return(new OfbBlockCipher(engine));

            case BlockCipherModesOfOperation.Ofbi:
                return(new OfbiBlockCipher(engine));

            default:
                throw new ArgumentException(nameof(modeOfOperation));
            }
        }
Ejemplo n.º 2
0
 public MonteCarloTdesCfb(
     IBlockCipherEngineFactory engineFactory,
     IModeBlockCipherFactory modeFactory,
     IMonteCarloKeyMakerTdes keyMaker,
     int shiftSize,
     BlockCipherModesOfOperation mode
     )
 {
     _algo = modeFactory.GetStandardCipher(
         engineFactory.GetSymmetricCipherPrimitive(BlockCipherEngines.Tdes),
         mode
         );
     _keyMaker = keyMaker;
     Shift     = shiftSize;
 }
Ejemplo n.º 3
0
        public IMonteCarloTester <MCTResult <AlgoArrayResponse>, AlgoArrayResponse> GetInstance(
            BlockCipherModesOfOperation mode
            )
        {
            var keyMaker = new AesMonteCarloKeyMaker();

            switch (mode)
            {
            case BlockCipherModesOfOperation.Ecb:
                return(new MonteCarloAesEcb(_engineFactory, _modeFactory, keyMaker));

            case BlockCipherModesOfOperation.Cbc:
                return(new MonteCarloAesCbc(_engineFactory, _modeFactory, keyMaker));

            case BlockCipherModesOfOperation.CbcCs1:
            case BlockCipherModesOfOperation.CbcCs2:
            case BlockCipherModesOfOperation.CbcCs3:
                return(new MonteCarloAesCbcCts(_engineFactory, _modeFactory, keyMaker, mode));

            case BlockCipherModesOfOperation.CfbBit:
                return(new MonteCarloAesCfb(_engineFactory, _modeFactory, keyMaker, 1, BlockCipherModesOfOperation.CfbBit));

            case BlockCipherModesOfOperation.CfbByte:
                return(new MonteCarloAesCfb(_engineFactory, _modeFactory, keyMaker, 8, BlockCipherModesOfOperation.CfbByte));

            case BlockCipherModesOfOperation.CfbBlock:
                return(new MonteCarloAesCfb(_engineFactory, _modeFactory, keyMaker, 128, BlockCipherModesOfOperation.CfbBlock));

            case BlockCipherModesOfOperation.Ofb:
                return(new MonteCarloAesOfb(_engineFactory, _modeFactory, keyMaker));

            case BlockCipherModesOfOperation.Cbci:
            case BlockCipherModesOfOperation.CbcMac:
            case BlockCipherModesOfOperation.Ccm:
            case BlockCipherModesOfOperation.CfbpBit:
            case BlockCipherModesOfOperation.CfbpByte:
            case BlockCipherModesOfOperation.CfbpBlock:
            case BlockCipherModesOfOperation.Ctr:
            case BlockCipherModesOfOperation.Gcm:
            case BlockCipherModesOfOperation.Ofbi:
                throw new NotSupportedException();

            default:
                throw new ArgumentException(nameof(mode));
            }
        }
Ejemplo n.º 4
0
        public MonteCarloAesCfb(
            IBlockCipherEngineFactory engineFactory,
            IModeBlockCipherFactory modeFactory,
            IMonteCarloKeyMakerAes keyMaker,
            int shiftSize,
            BlockCipherModesOfOperation mode
            )
        {
            var engine = engineFactory.GetSymmetricCipherPrimitive(BlockCipherEngines.Aes);

            _algo = modeFactory.GetStandardCipher(
                engine,
                mode
                );
            _keyMaker      = keyMaker;
            _blockSizeBits = engine.BlockSizeBits;
            Shift          = shiftSize;
        }
Ejemplo n.º 5
0
        public IAeadModeBlockCipher GetAeadCipher(
            IBlockCipherEngine engine,
            BlockCipherModesOfOperation modeOfOperation
            )
        {
            switch (modeOfOperation)
            {
            case BlockCipherModesOfOperation.Ccm:
                return(new CcmBlockCipher(engine, new ModeBlockCipherFactory(), new AES_CCMInternals()));

            case BlockCipherModesOfOperation.Gcm:
                return(new GcmBlockCipher(engine, new ModeBlockCipherFactory(), new AES_GCMInternals(new ModeBlockCipherFactory(), new BlockCipherEngineFactory())));

            case BlockCipherModesOfOperation.GcmSiv:
                return(new GcmSivBlockCipher(engine, new ModeBlockCipherFactory(), new AES_GCMInternals(new ModeBlockCipherFactory(), new BlockCipherEngineFactory())));

            default:
                throw new InvalidOperationException();
            }
        }
Ejemplo n.º 6
0
 public MonteCarloAesCbcCts(IBlockCipherEngineFactory engineFactory, IModeBlockCipherFactory modeFactory, IMonteCarloKeyMakerAes keyMaker, BlockCipherModesOfOperation mode)
 {
     _algo = modeFactory.GetStandardCipher(
         engineFactory.GetSymmetricCipherPrimitive(BlockCipherEngines.Aes),
         mode
         );
     _keyMaker = keyMaker;
 }
Ejemplo n.º 7
0
        public IMonteCarloTester <MCTResult <AlgoArrayResponse>, AlgoArrayResponse> GetInstance(BlockCipherModesOfOperation mode)
        {
            switch (mode)
            {
            case BlockCipherModesOfOperation.Ecb:
                return(new MonteCarloTdesEcb(_engineFactory, _modeFactory, new TDES_ECB.MonteCarloKeyMaker()));

            case BlockCipherModesOfOperation.Cbc:
                return(new MonteCarloTdesCbc(_engineFactory, _modeFactory, new TDES_CBC.MonteCarloKeyMaker()));

            case BlockCipherModesOfOperation.CfbBit:
                return(new MonteCarloTdesCfb(_engineFactory, _modeFactory, new TDES_CFB.MonteCarloKeyMaker(),
                                             1, mode));

            case BlockCipherModesOfOperation.CfbByte:
                return(new MonteCarloTdesCfb(_engineFactory, _modeFactory, new TDES_CFB.MonteCarloKeyMaker(),
                                             8, mode));

            case BlockCipherModesOfOperation.CfbBlock:
                return(new MonteCarloTdesCfb(_engineFactory, _modeFactory, new TDES_CFB.MonteCarloKeyMaker(),
                                             64, mode));

            case BlockCipherModesOfOperation.Ofb:
                return(new MonteCarloTdesOfb(_engineFactory, _modeFactory, new TDES_OFB.MonteCarloKeyMaker()));

            case BlockCipherModesOfOperation.Cbci:
                return(new MonteCarloTdesCbci(_engineFactory, _modeFactory, new TDES_CBCI.MonteCarloKeyMaker()));

            case BlockCipherModesOfOperation.CfbpBit:
                return(new MonteCarloTdesCfbp(_engineFactory, _modeFactory, new TDES_CFBP.MonteCarloKeyMaker(), mode));

            case BlockCipherModesOfOperation.CfbpByte:
                return(new MonteCarloTdesCfbp(_engineFactory, _modeFactory, new TDES_CFBP.MonteCarloKeyMaker(), mode));

            case BlockCipherModesOfOperation.CfbpBlock:
                return(new MonteCarloTdesCfbp(_engineFactory, _modeFactory, new TDES_CFBP.MonteCarloKeyMaker(), mode));

            case BlockCipherModesOfOperation.Ofbi:
                return(new MonteCarloTdesOfbi(_engineFactory, _modeFactory, new TDES_OFBI.MonteCarloKeyMaker()));

            case BlockCipherModesOfOperation.CbcMac:
            case BlockCipherModesOfOperation.Ccm:
            case BlockCipherModesOfOperation.Ctr:
            case BlockCipherModesOfOperation.Gcm:
                throw new NotSupportedException(nameof(mode));

            default:
                throw new ArgumentException(nameof(mode));
            }
        }
Ejemplo n.º 8
0
        public MonteCarloTdesCfbp(IBlockCipherEngineFactory engineFactory, IModeBlockCipherFactory modeFactory, IMonteCarloKeyMakerTdes keyMaker, BlockCipherModesOfOperation mode)
        {
            _algo = modeFactory.GetStandardCipher(
                engineFactory.GetSymmetricCipherPrimitive(BlockCipherEngines.Tdes),
                mode
                );
            _keyMaker = keyMaker;
            switch (mode)
            {
            case BlockCipherModesOfOperation.CfbpBit:
                Shift = 1;
                break;

            case BlockCipherModesOfOperation.CfbpByte:
                Shift = 8;
                break;

            case BlockCipherModesOfOperation.CfbpBlock:
                Shift = 64;
                break;

            default:
                throw new ArgumentException(nameof(mode));
            }
        }