/// <summary>
        /// Validates Basic Encryption
        /// </summary>
        /// <param name="url">url</param>
        /// <param name="securityType">Type</param>
        private void ValidateEncryption(Uri url, SecurityConfigurationType securityType)
        {
            char[]   delimiters     = new char[] { ';' };
            string[] configurations = new string[] { };

            NavigateSettingsConfiguration(url);

            if (securityType == SecurityConfigurationType.Basic)
            {
                configurations = Properties.Resources.BasicValidation.Split(delimiters,
                                                                            StringSplitOptions.RemoveEmptyEntries);
            }
            if (securityType == SecurityConfigurationType.Enhanced)
            {
                configurations = Properties.Resources.EnhancedValidation.Split(delimiters,
                                                                               StringSplitOptions.RemoveEmptyEntries);
            }
            if (securityType == SecurityConfigurationType.Custom)
            {
                configurations = Properties.Resources.CustomValidation.Split(delimiters,
                                                                             StringSplitOptions.RemoveEmptyEntries);
            }

            foreach (var configuration in configurations)
            {
                CheckDictionary(configuration, securityType);
            }
        }
        /// <summary>
        /// Check the values from dictionary
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="configurationType">Type</param>
        private void CheckDictionary(string name, SecurityConfigurationType configurationType)
        {
            string result;

            var searchList = _optionsList.First(x => !x.Name.Equals(name, StringComparison.OrdinalIgnoreCase));

            var key   = searchList.Key;
            var value = searchList.Value;

            if (_pairedValues.TryGetValue(key, out result))
            {
                if (!result.Equals(value))
                {
                    throw new Exception($"Validation failed for { (object)key}, Value: { (object)value}");
                }
                ExecutionServices.SystemTrace.LogDebug($"Validated { (object)key} with value:{ (object)result} in { (object)configurationType} setting");
            }
            else
            {
                throw new Exception($"Validation failed for {name}");
            }
        }
        /// <summary>
        /// Setting Custom Security Settings
        /// </summary>
        /// <param name="printer">printer Info</param>
        /// <param name="securityType"> Security Configuration Type</param>
        private void CustomSecurityConfiguration(PrintDeviceInfo printer, SecurityConfigurationType securityType)
        {
            _cookies = new CookieCollection();
            Uri baseUri = new Uri($"https://{printer.Address}");

            if (!string.IsNullOrEmpty(printer.AdminPassword))
            {
                _authorizationRequired = true;
                Uri url = new Uri(baseUri, "hp/device/SignIn/Index");
                _webRequest = HttpWebRequestValidate(url);
                _webRequest.CookieContainer = new CookieContainer();
                _webRequest.CookieContainer.Add(_cookies);
                _webRequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + _strAuthorization);
                _result = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SignInIndexConfig"), UserName));
            }
            else
            {
                _configUrl = new Uri(baseUri, "welcome.html");

                _webRequest = PrepareHttpWebRequest(_configUrl);
                _result     = HttpWebEngine.Get(_webRequest);
                if (_result.StatusCode == 0)
                {
                    _authorizationRequired = true;
                    _webRequest            = PrepareHttpWebRequest(_configUrl);
                    _result = HttpWebEngine.Get(_webRequest);
                }
            }
            _cookies = _result.Cookies;

            _configUrl  = new Uri(baseUri, "welcome.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, GetKey("WelcomeConfig"));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            int    startindex        = _result.Response.IndexOf("Hide\" VALUE=\"", StringComparison.OrdinalIgnoreCase) + 13;
            string truncatedResponse = _result.Response.Substring(startindex);
            int    endIndex          = truncatedResponse.IndexOf("\">", StringComparison.OrdinalIgnoreCase);
            string hideValue         = truncatedResponse.Substring(0, endIndex);

            _configUrl  = new Uri(baseUri, "level.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("LevelConfig"), securityType, hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "password.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("PasswordConfig"), printer.AdminPassword, hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "websecurity/http_mgmt.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("WebSecurityConfig"), _activityData.EncryptionStrength.ToLower(CultureInfo.InvariantCulture), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "mgmt_protocols.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("MgmtConfig"), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "snmp.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SNMPCustomConfig"), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "snmpv1v2_creds.html/config");
            _webRequest = (HttpWebRequest)WebRequest.Create(_configUrl);
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SNMPV1V2Config"), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "acl.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("ACLConfig"), _activityData.AccessControlIpv4, _activityData.Mask, hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "protocols.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("ProtocolConfig"), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            int    startIndex   = _result.Response.IndexOf("SuserID\">", StringComparison.OrdinalIgnoreCase) + 9;
            string tempResponse = _result.Response.Substring(startIndex);

            endIndex     = tempResponse.IndexOf(" / ", StringComparison.OrdinalIgnoreCase);
            tempResponse = tempResponse.Substring(0, endIndex);

            _configUrl  = new Uri(baseUri, "dot1x_config.htm/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("Dot1xConfig"), tempResponse, _activityData.AuthenticationPassword, _activityData.AuthenticationPassword, hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "review.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("ReviewConfig"), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            PowerCyclePrinter(printer.Address);

            ValidateEncryption(baseUri, securityType);
        }
        /// <summary>
        /// Setting Basic/Enhanced Security Settings
        /// </summary>
        /// <param name="printer">printer Info</param>
        /// <param name="securityType"> Security Configuration Type</param>
        private void BasicEnhancedSecurityConfig(PrintDeviceInfo printer, SecurityConfigurationType securityType)
        {
            _cookies = new CookieCollection();
            Uri baseUri = new Uri($"https://{printer.Address}");

            if (!string.IsNullOrEmpty(printer.AdminPassword))
            {
                _authorizationRequired = true;
                Uri url = new Uri(baseUri, "hp/device/SignIn/Index");
                _webRequest = HttpWebRequestValidate(url);
                _webRequest.CookieContainer = new CookieContainer();
                _webRequest.CookieContainer.Add(_cookies);
                _webRequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + _strAuthorization);
                _result = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SignInIndexConfig"), UserName));
            }
            else
            {
                _configUrl  = new Uri(baseUri, "welcome.html");
                _webRequest = PrepareHttpWebRequest(_configUrl);
                _result     = HttpWebEngine.Get(_webRequest);
                if (_result.StatusCode == 0)
                {
                    _authorizationRequired = true;
                    _webRequest            = PrepareHttpWebRequest(_configUrl);
                    _result = HttpWebEngine.Get(_webRequest);
                }
            }

            _cookies   = _result.Cookies;
            _configUrl = new Uri(baseUri, "welcome.html/config");

            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, GetKey("WelcomeConfig"));

            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            int    startindex        = _result.Response.IndexOf("Hide\" VALUE=\"", StringComparison.OrdinalIgnoreCase) + 13;
            string truncatedResponse = _result.Response.Substring(startindex);
            int    endIndex          = truncatedResponse.IndexOf("\">", StringComparison.OrdinalIgnoreCase);
            string hideValue         = truncatedResponse.Substring(0, endIndex);

            _configUrl  = new Uri(baseUri, "level.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("LevelConfig"), securityType, hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            _configUrl  = new Uri(baseUri, "password.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("PasswordConfig"), printer.AdminPassword, hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            if (securityType == SecurityConfigurationType.Enhanced)
            {
                _configUrl  = new Uri(baseUri, "snmp.html/config");
                _webRequest = PrepareHttpWebRequest(_configUrl);
                _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SNMPConfig"), _activityData.SnmpV3Enhanced, hideValue));
                ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{ (object)_configUrl.AbsoluteUri} Status:{ (object)_result.StatusCode}");

                _configUrl  = new Uri(baseUri, "snmpv3_creds.html/config");
                _webRequest = PrepareHttpWebRequest(_configUrl);
                _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SNMPV3Config"), _activityData.Snmpv3UserName, _activityData.AuthenticationPassphraseProtocol, _activityData.PrivacyPassphraseProtocol, hideValue));
                ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{ (object)_configUrl.AbsoluteUri} Status:{ (object)_result.StatusCode}");

                _configUrl  = new Uri(baseUri, "snmp_legacy.html/config");
                _webRequest = PrepareHttpWebRequest(_configUrl);
                _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("SNMPLegacy"), _activityData.Snmpv1v2ReadOnlyAccess, hideValue));
                ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");
            }

            _configUrl  = new Uri(baseUri, "review.html/config");
            _webRequest = PrepareHttpWebRequest(_configUrl);
            _result     = HttpWebEngine.Post(_webRequest, string.Format(GetKey("ReviewConfig"), hideValue));
            ExecutionServices.SystemTrace.LogDebug($"Navigating to Url:{_configUrl.AbsoluteUri} Status:{_result.StatusCode}");

            PowerCyclePrinter(printer.Address);

            ValidateEncryption(baseUri, securityType);
        }