internal /*public*/ void CompleteTransforms(TextWriter output, bool enableMac, byte[] macKey) { int len = 0; // convert to bytes if (_recyclable) { // still using the original recyclable char buffer // -- can use recyclable byte buffer _byteBuffer = (byte[])_byteBufferAllocator.GetBuffer(); if (_freePos > 0) { len = Encoding.UTF8.GetBytes(_charBuffer, 0, _freePos, _byteBuffer, 0); } // do the mac encoding if requested if (enableMac) { // the size of the output array depends on the key length and encryption type // so we can't use the recyclable buffers after this byte[] data = MachineKey.GetEncodedData(_byteBuffer, macKey, 0, ref len); string serialized = Convert.ToBase64String(data, 0, len); output.Write(serialized); } else { char[] base64chars = (char[])_charBufferAllocatorBase64.GetBuffer(); len = Convert.ToBase64CharArray(_byteBuffer, 0, len, base64chars, 0); output.Write(base64chars, 0, len); _charBufferAllocatorBase64.ReuseBuffer(base64chars); } } else { _byteBuffer = Encoding.UTF8.GetBytes(_charBuffer, 0, _freePos); len = _byteBuffer.Length; if (enableMac) { _byteBuffer = MachineKey.GetEncodedData(_byteBuffer, macKey, 0, ref len); } string serialized = Convert.ToBase64String(_byteBuffer); output.Write(serialized); } }