private void Stream_Closing(object sender, EventArgs e) { if (_pMode != CryptoStreamMode.Write) { throw new InvalidOperationException(); } CloseNotifyStream closeNotifyStream = (CloseNotifyStream)sender; int num1 = checked ((int)(_pPosition % _pTransform.OutputBlockSize)); if (num1 == 0) { num1 = 16; } byte[] buffer = new byte[checked (num1 - 1 + 1)]; closeNotifyStream.Write(buffer, 0, buffer.Length); _pSha.TransformFinalBlock(new byte[0], 0, 0); string s = ""; int num2 = 0; int num3 = checked (_pSha.Hash.Length - 1); int index = num2; while (index <= num3) { s += _pSha.Hash[index].ToString("X2"); checked { ++index; } } byte[] bytes = Encoding.UTF8.GetBytes(s); if (bytes.Length != 64) { throw new IOException(); } closeNotifyStream.Write(bytes, 0, bytes.Length); }
public CarotCryptStream(Stream basestream, ICryptoTransform transformer, long length, bool fooImWriteStream) { _pTransform = transformer; _pMode = CryptoStreamMode.Write; _pSha = new SHA256Managed(); _pLength = length; _pPosition = 0L; byte[] buffer = new byte[64]; Encoding.UTF8.GetBytes("CarotDAV Encryption 1.0 ").CopyTo(buffer, 0); basestream.Write(buffer, 0, buffer.Length); CloseNotifyStream closeNotifyStream = new CloseNotifyStream(basestream); closeNotifyStream.ClosingEvent += Stream_Closing; closeNotifyStream.ClosedEvent += Stream_Closed; _pStream = new CryptoStream(closeNotifyStream, _pTransform, _pMode); }