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() }; }
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)); }
public void AESCFB() { Test(StreamCryptoCreate.AesCfb(true, _randomKey16, _randomIv16), _randombytes.Span); }