private static string GetSignedHeaders(HttpWebRequest request)
        {
            var canonicalHeaders = request.GetCanonicalHeaders();
            var result           = new StringBuilder();

            WriteSignedHeaders(canonicalHeaders, result);
            return(result.ToString());
        }
        public static string GetCanonicalRequest(HttpWebRequest request, byte[] data)
        {
            var canonicalHeaders = request.GetCanonicalHeaders();
            var result           = new StringBuilder();

            result.Append(request.Method);
            result.Append('\n');
            result.Append(GetPath(request.RequestUri));
            result.Append('\n');
            result.Append(request.RequestUri.GetCanonicalQueryString());
            result.Append('\n');
            WriteCanonicalHeaders(canonicalHeaders, result);
            result.Append('\n');
            WriteSignedHeaders(canonicalHeaders, result);
            result.Append('\n');
            WriteRequestPayloadHash(data, result);
            return(result.ToString());
        }