protected override void InitCipher(byte[] iv, bool isEncrypt)
        {
            base.InitCipher(iv, isEncrypt);
            _crypto?.Dispose();

            if (cipherFamily == CipherFamily.Rc4Md5)
            {
                Span <byte> temp    = stackalloc byte[keyLen + ivLen];
                var         realKey = new byte[MD5Length];
                key.CopyTo(temp);
                iv.CopyTo(temp.Slice(keyLen));
                MD5Utils.Fast440(temp, realKey);

                _crypto = StreamCryptoCreate.Rc4(realKey);
                return;
            }

            _crypto = cipherFamily switch
            {
                CipherFamily.AesCfb => StreamCryptoCreate.AesCfb(isEncrypt, key, iv),
                CipherFamily.Chacha20 => StreamCryptoCreate.ChaCha20(key, iv),
                CipherFamily.Rc4 => StreamCryptoCreate.Rc4(key),
                _ => throw new NotSupportedException()
            };
        }
예제 #2
0
        public void Test(string keyHex, string ivHex, string hex, string hex2)
        {
            var key = keyHex.FromHex();
            var iv  = ivHex.FromHex();

            Test(new BcAESCFBStreamCrypto(true, key, iv), hex, hex2);
            Test(new BcAESCFBStreamCrypto(false, key, iv), hex2, hex);
            Test(StreamCryptoCreate.AesCfb(true, key, iv), hex, hex2);
            Test(StreamCryptoCreate.AesCfb(false, key, iv), hex2, hex);
        }
 protected override IStreamCrypto CreateCrypto(bool isEncrypt, ReadOnlySpan <byte> key, ReadOnlySpan <byte> iv)
 {
     return(StreamCryptoCreate.AesCfb(isEncrypt, key, iv));
 }
예제 #4
0
 public void AESCFB()
 {
     Test(StreamCryptoCreate.AesCfb(true, _randomKey16, _randomIv16), _randombytes.Span);
 }