private List <ResultType> RunFixityCheck(FileInfo binaryFiles, AlgorithmTypes useAlgorithm, string valueToCompare = null)
        {
            List <ResultType> checkResult = new List <ResultType>();

            string currentCalculation = string.Empty, url = string.Empty, urlPart = string.Empty;

            try
            {
                switch (useAlgorithm)
                {
                default:
                case AlgorithmTypes.MD5:
                {
                    urlPart            = "checksum-md5";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateMD5Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA1:
                {
                    urlPart            = "checksum-sha1";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA1Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA224:
                {
                    urlPart            = "checksum-sha224";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA224Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA256:
                {
                    urlPart            = "checksum-sha256";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA256Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA384:
                {
                    urlPart            = "checksum-sha384";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA384Checksum(binaryFiles, url);
                }
                break;

                case AlgorithmTypes.SHA512:
                {
                    urlPart            = "checksum-sha512";
                    url                = String.Format("http://{0}:{1}/hooks/{3}?file={2}", ApplicationSettings.ChecksumServerName, ApplicationSettings.ChecksumServerPort, binaryFiles.FullName, urlPart);
                    currentCalculation = ChecksumHelper.CreateSHA512Checksum(binaryFiles, url);
                }
                break;
                }
            }
            catch (Exception e)
            {
                checkResult.Add(new ResultType
                {
                    Type = ResultType.InfoType.Message,
                    Data = new string[] { binaryFiles.FullName, "Failed to run fixity checksum!", e.Message, e.StackTrace }
                });
            }
            finally {
                if (!String.IsNullOrEmpty(currentCalculation) && HashType.ProcessingMode == ExecutionMode.OnlyCalculate)
                {
                    checkResult.Add(new ResultType
                    {
                        Type = ResultType.InfoType.Action,
                        Data = new string[] { binaryFiles.FullName, currentCalculation }
                    });
                }

                if (!String.IsNullOrEmpty(currentCalculation) && HashType.ProcessingMode == ExecutionMode.CalculateAndCompare)
                {
                    if (currentCalculation.Equals(valueToCompare, StringComparison.InvariantCultureIgnoreCase))
                    {
                        checkResult.Add(new ResultType
                        {
                            Type = ResultType.InfoType.Action,
                            Data = new string[] { binaryFiles.FullName,
                                                  useAlgorithm.ToString(),
                                                  string.Format("Our calculation : {0}", currentCalculation),
                                                  string.Format("Provided value : {0}", valueToCompare), }
                        });
                    }
                    else
                    {
                        checkResult.Add(new ResultType
                        {
                            Type = ResultType.InfoType.Message,
                            Data = new string[] { String.Format("Fixity comparison with file '{0}' using algorithm '{1}' failed!{2}Our calculation: {3}{2}Provided value:{4}  ", binaryFiles.FullName, useAlgorithm, Environment.NewLine, currentCalculation, valueToCompare) }
                        });
                    }
                }
            }

            return(checkResult);
        }