private byte[] UserIdentificationData()
        {
            using (var result = new MemoryStream())
            {
                if (!string.IsNullOrEmpty(_userID))
                {
                    _srp = new SrpClient();

                    var login = Encoding.UTF8.GetBytes(_userID);
                    result.WriteByte(IscCodes.CNCT_login);
                    result.WriteByte((byte)login.Length);
                    result.Write(login, 0, login.Length);

                    var pluginName = Encoding.ASCII.GetBytes(SrpClient.PluginName);
                    result.WriteByte(IscCodes.CNCT_plugin_name);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);
                    result.WriteByte(IscCodes.CNCT_plugin_list);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);

                    var specificData = Encoding.ASCII.GetBytes(_srp.PublicKeyHex);
                    WriteMultiPartHelper(result, IscCodes.CNCT_specific_data, specificData);
                }
                else
                {
                    _sspi = new SspiHelper();

                    var pluginName = Encoding.ASCII.GetBytes(SspiHelper.PluginName);
                    result.WriteByte(IscCodes.CNCT_plugin_name);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);
                    result.WriteByte(IscCodes.CNCT_plugin_list);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);

                    var specificData = _sspi.InitializeClientSecurity();
                    WriteMultiPartHelper(result, IscCodes.CNCT_specific_data, specificData);
                }

                var user = Encoding.UTF8.GetBytes(Environment.GetEnvironmentVariable("USERNAME"));
                result.WriteByte(IscCodes.CNCT_user);
                result.WriteByte((byte)user.Length);
                result.Write(user, 0, user.Length);

                var host = Encoding.UTF8.GetBytes(Dns.GetHostName());
                result.WriteByte(IscCodes.CNCT_host);
                result.WriteByte((byte)host.Length);
                result.Write(host, 0, host.Length);

                result.WriteByte(IscCodes.CNCT_client_crypt);
                result.WriteByte(4);
                result.Write(new byte[] { 0, 0, 0, 0 }, 0, 4);

                result.WriteByte(IscCodes.CNCT_user_verification);
                result.WriteByte(0);

                return(result.ToArray());
            }
        }
        private byte[] UserIdentificationData(out SrpClient srp, out SspiHelper sspi)
        {
            srp  = null;
            sspi = null;

            using (var result = new MemoryStream())
            {
                var userString = Environment.GetEnvironmentVariable("USERNAME") ?? Environment.GetEnvironmentVariable("USER") ?? string.Empty;
                var user       = Encoding.UTF8.GetBytes(userString);
                result.WriteByte(IscCodes.CNCT_user);
                result.WriteByte((byte)user.Length);
                result.Write(user, 0, user.Length);

                var host = Encoding.UTF8.GetBytes(Dns.GetHostName());
                result.WriteByte(IscCodes.CNCT_host);
                result.WriteByte((byte)host.Length);
                result.Write(host, 0, host.Length);

                result.WriteByte(IscCodes.CNCT_user_verification);
                result.WriteByte(0);

                if (!string.IsNullOrEmpty(_userID))
                {
                    srp = new SrpClient();

                    var login = Encoding.UTF8.GetBytes(_userID);
                    result.WriteByte(IscCodes.CNCT_login);
                    result.WriteByte((byte)login.Length);
                    result.Write(login, 0, login.Length);

                    var pluginName = Encoding.ASCII.GetBytes(SrpClient.PluginName);
                    result.WriteByte(IscCodes.CNCT_plugin_name);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);
                    result.WriteByte(IscCodes.CNCT_plugin_list);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);

                    var specificData = Encoding.ASCII.GetBytes(srp.PublicKeyHex);
                    WriteMultiPartHelper(result, IscCodes.CNCT_specific_data, specificData);

                    result.WriteByte(IscCodes.CNCT_client_crypt);
                    result.WriteByte(4);
                    result.Write(TypeEncoder.EncodeInt32(WireCryptOptionValue(_wireCrypt)), 0, 4);
                }
                else
                {
                    sspi = new SspiHelper();

                    var pluginName = Encoding.ASCII.GetBytes(SspiHelper.PluginName);
                    result.WriteByte(IscCodes.CNCT_plugin_name);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);
                    result.WriteByte(IscCodes.CNCT_plugin_list);
                    result.WriteByte((byte)pluginName.Length);
                    result.Write(pluginName, 0, pluginName.Length);

                    var specificData = sspi.InitializeClientSecurity();
                    WriteMultiPartHelper(result, IscCodes.CNCT_specific_data, specificData);

                    result.WriteByte(IscCodes.CNCT_client_crypt);
                    result.WriteByte(4);
                    result.Write(TypeEncoder.EncodeInt32(IscCodes.WIRE_CRYPT_DISABLED), 0, 4);
                }

                return(result.ToArray());
            }
        }
Exemplo n.º 3
0
        public byte[] UserIdentificationData()
        {
            using (var result = new MemoryStream(1024))
            {
                var userString = Environment.GetEnvironmentVariable("USERNAME") ?? Environment.GetEnvironmentVariable("USER") ?? string.Empty;
                var user       = Encoding.UTF8.GetBytes(userString);
                result.WriteByte(IscCodes.CNCT_user);
                result.WriteByte((byte)user.Length);
                result.Write(user, 0, user.Length);

                var host = Encoding.UTF8.GetBytes(Dns.GetHostName());
                result.WriteByte(IscCodes.CNCT_host);
                result.WriteByte((byte)host.Length);
                result.Write(host, 0, host.Length);

                result.WriteByte(IscCodes.CNCT_user_verification);
                result.WriteByte(0);

                if (!string.IsNullOrEmpty(User))
                {
                    var login = Encoding.UTF8.GetBytes(User);
                    result.WriteByte(IscCodes.CNCT_login);
                    result.WriteByte((byte)login.Length);
                    result.Write(login, 0, login.Length);

                    var pluginNameBytes = Encoding.ASCII.GetBytes(_srp256.Name);
                    result.WriteByte(IscCodes.CNCT_plugin_name);
                    result.WriteByte((byte)pluginNameBytes.Length);
                    result.Write(pluginNameBytes, 0, pluginNameBytes.Length);
                    var specificData = Encoding.ASCII.GetBytes(_srp256.PublicKeyHex);
                    WriteMultiPartHelper(result, IscCodes.CNCT_specific_data, specificData);

                    var plugins      = string.Join(",", new[] { _srp256.Name, _srp.Name });
                    var pluginsBytes = Encoding.ASCII.GetBytes(plugins);
                    result.WriteByte(IscCodes.CNCT_plugin_list);
                    result.WriteByte((byte)pluginsBytes.Length);
                    result.Write(pluginsBytes, 0, pluginsBytes.Length);

                    result.WriteByte(IscCodes.CNCT_client_crypt);
                    result.WriteByte(4);
                    result.Write(TypeEncoder.EncodeInt32(WireCryptOptionValue(WireCrypt)), 0, 4);
                }
                else
                {
                    var pluginNameBytes = Encoding.ASCII.GetBytes(_sspi.Name);
                    result.WriteByte(IscCodes.CNCT_plugin_name);
                    result.WriteByte((byte)pluginNameBytes.Length);
                    result.Write(pluginNameBytes, 0, pluginNameBytes.Length);
                    var specificData = _sspi.InitializeClientSecurity();
                    WriteMultiPartHelper(result, IscCodes.CNCT_specific_data, specificData);

                    result.WriteByte(IscCodes.CNCT_plugin_list);
                    result.WriteByte((byte)pluginNameBytes.Length);
                    result.Write(pluginNameBytes, 0, pluginNameBytes.Length);

                    result.WriteByte(IscCodes.CNCT_client_crypt);
                    result.WriteByte(4);
                    result.Write(TypeEncoder.EncodeInt32(IscCodes.WIRE_CRYPT_DISABLED), 0, 4);
                }

                return(result.ToArray());
            }
        }