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); }
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); }