Beispiel #1
0
        public static CrtResult <String> SignCanonicalRequest(String canonicalRequest, AwsSigningConfig signingConfig)
        {
            if (canonicalRequest == null || signingConfig == null)
            {
                throw new CrtException("Null argument passed to SignRequest");
            }

            if (signingConfig.SignatureType != AwsSignatureType.CANONICAL_REQUEST_VIA_HEADERS &&
                signingConfig.SignatureType != AwsSignatureType.CANONICAL_REQUEST_VIA_QUERY_PARAMS)
            {
                throw new CrtException("Illegal signing type for canonical request signing");
            }

            var nativeConfig = new AwsSigningConfigNative(signingConfig);

            CanonicalRequestSigningCallback callback = new CanonicalRequestSigningCallback();

            callback.OriginalCanonicalRequest = canonicalRequest;

            ulong id = PendingCanonicalRequestSignings.AcquireStrongReference(callback);

            API.SignCanonicalRequestNative(canonicalRequest, nativeConfig, id, API.OnCanonicalRequestSigningComplete);

            return(callback.Result);
        }
Beispiel #2
0
        public static CrtResult <HttpRequest> SignHttpRequest(HttpRequest request, AwsSigningConfig signingConfig)
        {
            if (request == null || signingConfig == null)
            {
                throw new CrtException("Null argument passed to SignRequest");
            }

            if (request.BodyStream != null)
            {
                if (!request.BodyStream.CanSeek)
                {
                    throw new CrtException("Http request payload stream must be seekable in order to be signed");
                }
            }

            var nativeConfig = new AwsSigningConfigNative(signingConfig);

            uint headerCount = 0;

            if (request.Headers != null)
            {
                headerCount = (uint)request.Headers.Length;
            }

            HttpRequestSigningCallback callback = new HttpRequestSigningCallback();

            callback.OriginalRequest  = request;                        /* needed to build final signed request */
            callback.ShouldSignHeader = signingConfig.ShouldSignHeader; /* prevent GC while signing */
            callback.BodyStream       = new CrtStreamWrapper(request.BodyStream);

            ulong id = PendingHttpRequestSignings.AcquireStrongReference(callback);

            API.SignRequestNative(request.Method, request.Uri, request.Headers, headerCount, callback.BodyStream.Delegates, nativeConfig, id, API.OnHttpRequestSigningComplete);

            return(callback.Result);
        }