public byte[] Update(byte[] b, int off, int len) { if (aes) { if (initiated) return cipher.Update(b, off, len); else { int left = Math.Min(iv.Length - ivptr, len); System.Array.Copy(b, off, iv, ivptr, left); off += left; len -= left; ivptr += left; if (ivptr == iv.Length) { cipher = new AESCipher(false, key, iv); initiated = true; if (len > 0) return cipher.Update(b, off, len); } return null; } } else { byte[] b2 = new byte[len]; arcfour.EncryptARCFOUR(b, off, len, b2, 0); return b2; } }
public byte[] Update(byte[] b, int off, int len) { if (aes) { if (initiated) { return(cipher.Update(b, off, len)); } else { int left = Math.Min(iv.Length - ivptr, len); System.Array.Copy(b, off, iv, ivptr, left); off += left; len -= left; ivptr += left; if (ivptr == iv.Length) { cipher = new AESCipher(false, key, iv); initiated = true; if (len > 0) { return(cipher.Update(b, off, len)); } } return(null); } } else { byte[] b2 = new byte[len]; arcfour.EncryptARCFOUR(b, off, len, b2, 0); return(b2); } }
public OutputStreamEncryption(Stream outc, byte[] key, int off, int len, int revision) { this.outc = outc; aes = revision == AES_128; if (aes) { byte[] iv = IVGenerator.GetIV(); byte[] nkey = new byte[len]; System.Array.Copy(key, off, nkey, 0, len); cipher = new AESCipher(true, nkey, iv); Write(iv, 0, iv.Length); } else { arcfour = new ARCFOUREncryption(); arcfour.PrepareARCFOURKey(key, off, len); } }