public AuthorizationResult Authorize(HttpRequestBase request)
        {
            var requestData = new AuthorizeRequestData(request.Form);

            if (!VerifyDataIsIntact(requestData))
            {
                return(AuthorizationResult.MissingData);
            }

            if (!VerifyTimestamp(requestData.Timestamp))
            {
                return(AuthorizationResult.Expired);
            }

            var consumer = _consumerRepository.GetConsumerByPublicKey(requestData.PublicKey);

            if (consumer == null)
            {
                return(AuthorizationResult.NonExistantConsumer);
            }

            if (!VerifySignature(consumer.PrivateKey, requestData))
            {
                return(AuthorizationResult.BadSignature);
            }

            return(AuthorizationResult.Success);
        }
        private bool VerifyDataIsIntact(AuthorizeRequestData data)
        {
            if (string.IsNullOrWhiteSpace(data.PublicKey) ||
                string.IsNullOrWhiteSpace(data.Signature) ||
                string.IsNullOrWhiteSpace(data.SignatureMethod) ||
                string.IsNullOrWhiteSpace(data.Timestamp))
                return false;

            return true;
        }
        private bool VerifyDataIsIntact(AuthorizeRequestData data)
        {
            if (string.IsNullOrWhiteSpace(data.PublicKey) ||
                string.IsNullOrWhiteSpace(data.Signature) ||
                string.IsNullOrWhiteSpace(data.SignatureMethod) ||
                string.IsNullOrWhiteSpace(data.Timestamp))
            {
                return(false);
            }

            return(true);
        }
        private bool VerifySignature(string privateKey, AuthorizeRequestData requestData)
        {
            var signatureGenerator = _signatureGeneratorFactory.GetGenerator(requestData.SignatureMethod);
            var signature = requestData.Signature;

            var data = requestData.GetDataForSignature();

            var hash = signatureGenerator.Generate(privateKey, data);

            if (hash == signature)
                return true;

            return false;
        }
        private bool VerifySignature(string privateKey, AuthorizeRequestData requestData)
        {
            var signatureGenerator = _signatureGeneratorFactory.GetGenerator(requestData.SignatureMethod);
            var signature          = requestData.Signature;

            var data = requestData.GetDataForSignature();

            var hash = signatureGenerator.Generate(privateKey, data);

            if (hash == signature)
            {
                return(true);
            }

            return(false);
        }
        public AuthorizationResult Authorize(HttpRequestBase request)
        {
            var requestData = new AuthorizeRequestData(request.Form);

            if (!VerifyDataIsIntact(requestData))
                return AuthorizationResult.MissingData;

            if (!VerifyTimestamp(requestData.Timestamp))
                return AuthorizationResult.Expired;

            var consumer = _consumerRepository.GetConsumerByPublicKey(requestData.PublicKey);
            if (consumer == null)
                return AuthorizationResult.NonExistantConsumer;

            if (!VerifySignature(consumer.PrivateKey, requestData))
                return AuthorizationResult.BadSignature;

            return AuthorizationResult.Success;
        }