aws-crt-cpp
C++ wrapper around the aws-c-* libraries. Provides Cross-Platform Transport Protocols and SSL/TLS implementations for C++.
Loading...
Searching...
No Matches
Sigv4Signing.h
Go to the documentation of this file.
1#pragma once
7#include <aws/crt/Exports.h>
8
9#include <aws/crt/DateTime.h>
10#include <aws/crt/Types.h>
12
13struct aws_signing_config_aws;
14
15namespace Aws
16{
17 namespace Crt
18 {
19 namespace Auth
20 {
21 class Credentials;
22 class ICredentialsProvider;
23
28 {
33 SigV4 = AWS_SIGNING_ALGORITHM_V4,
34
39 SigV4A = AWS_SIGNING_ALGORITHM_V4_ASYMMETRIC,
40 };
41
45 enum class SignatureType
46 {
51 HttpRequestViaHeaders = AWS_ST_HTTP_REQUEST_HEADERS,
52
57 HttpRequestViaQueryParams = AWS_ST_HTTP_REQUEST_QUERY_PARAMS,
58
62 HttpRequestChunk = AWS_ST_HTTP_REQUEST_CHUNK,
63
69 HttpRequestEvent = AWS_ST_HTTP_REQUEST_EVENT,
70 };
71
76 namespace SignedBodyValue
77 {
83 AWS_CRT_CPP_API const char *EmptySha256Str();
84
90
101
103 AWS_CRT_CPP_API extern const char *UnsignedPayload;
105 AWS_CRT_CPP_API extern const char *EmptySha256;
110 } // namespace SignedBodyValue
111
116 {
120 None = AWS_SBHT_NONE,
121
125 XAmzContentSha256 = AWS_SBHT_X_AMZ_CONTENT_SHA256,
126 };
127
128 using ShouldSignHeaderCb = bool (*)(const Crt::ByteCursor *, void *);
129
135 {
136 public:
138 virtual ~AwsSigningConfig();
139
140 virtual SigningConfigType GetType() const noexcept override { return SigningConfigType::Aws; }
141
145 SigningAlgorithm GetSigningAlgorithm() const noexcept;
146
150 void SetSigningAlgorithm(SigningAlgorithm algorithm) noexcept;
151
155 SignatureType GetSignatureType() const noexcept;
156
160 void SetSignatureType(SignatureType signatureType) noexcept;
161
165 const Crt::String &GetRegion() const noexcept;
166
170 void SetRegion(const Crt::String &region) noexcept;
171
175 const Crt::String &GetService() const noexcept;
176
180 void SetService(const Crt::String &service) noexcept;
181
185 DateTime GetSigningTimepoint() const noexcept;
186
190 void SetSigningTimepoint(const DateTime &date) noexcept;
191
192 /*
193 * We assume the uri will be encoded once in preparation for transmission. Certain services
194 * do not decode before checking signature, requiring us to actually double-encode the uri in the
195 * canonical request in order to pass a signature check.
196 */
197
202 bool GetUseDoubleUriEncode() const noexcept;
203
208 void SetUseDoubleUriEncode(bool useDoubleUriEncode) noexcept;
209
213 bool GetShouldNormalizeUriPath() const noexcept;
214
218 void SetShouldNormalizeUriPath(bool shouldNormalizeUriPath) noexcept;
219
224 bool GetOmitSessionToken() const noexcept;
225
230 void SetOmitSessionToken(bool omitSessionToken) noexcept;
231
235 ShouldSignHeaderCb GetShouldSignHeaderCallback() const noexcept;
236
241 void SetShouldSignHeaderCallback(ShouldSignHeaderCb shouldSignHeaderCb) noexcept;
242
246 void *GetShouldSignHeaderUserData() const noexcept;
247
251 void SetShouldSignHeaderUserData(void *userData) noexcept;
252
257 const Crt::String &GetSignedBodyValue() const noexcept;
258
266 void SetSignedBodyValue(const Crt::String &signedBodyValue) noexcept;
267
271 SignedBodyHeaderType GetSignedBodyHeader() const noexcept;
272
276 void SetSignedBodyHeader(SignedBodyHeaderType signedBodyHeader) noexcept;
277
282 uint64_t GetExpirationInSeconds() const noexcept;
283
287 void SetExpirationInSeconds(uint64_t expirationInSeconds) noexcept;
288
289 /*
290 * For Sigv4 signing, either the credentials provider or the credentials must be set.
291 * Credentials, if set, takes precedence over the provider.
292 */
293
297 const std::shared_ptr<ICredentialsProvider> &GetCredentialsProvider() const noexcept;
298
302 void SetCredentialsProvider(const std::shared_ptr<ICredentialsProvider> &credsProvider) noexcept;
303
307 const std::shared_ptr<Credentials> &GetCredentials() const noexcept;
308
312 void SetCredentials(const std::shared_ptr<Credentials> &credentials) noexcept;
313
315 const struct aws_signing_config_aws *GetUnderlyingHandle() const noexcept;
316
317 private:
318 Allocator *m_allocator;
319 std::shared_ptr<ICredentialsProvider> m_credentialsProvider;
320 std::shared_ptr<Credentials> m_credentials;
321 struct aws_signing_config_aws m_config;
322 Crt::String m_signingRegion;
323 Crt::String m_serviceName;
324 Crt::String m_signedBodyValue;
325 };
326
332 {
333 public:
335 virtual ~Sigv4HttpRequestSigner() = default;
336
337 bool IsValid() const override { return true; }
338
342 virtual bool SignRequest(
343 const std::shared_ptr<Aws::Crt::Http::HttpRequest> &request,
344 const ISigningConfig &config,
345 const OnHttpRequestSigningComplete &completionCallback) override;
346
347 private:
348 Allocator *m_allocator;
349 };
350 } // namespace Auth
351 } // namespace Crt
352} // namespace Aws
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition Sigv4Signing.h:135
virtual SigningConfigType GetType() const noexcept override
Definition Sigv4Signing.h:140
Definition Credentials.h:38
Definition Credentials.h:112
Definition Signing.h:68
Definition Signing.h:46
Definition Sigv4Signing.h:332
bool IsValid() const override
Definition Sigv4Signing.h:337
Definition DateTime.h:53
AWS_CRT_CPP_API const char * StreamingAws4HmacSha256Payload
Definition Sigv4Signing.cpp:35
AWS_CRT_CPP_API const char * StreamingAws4HmacSha256Events
Definition Sigv4Signing.cpp:41
AWS_CRT_CPP_API const char * EmptySha256Str()
Definition Sigv4Signing.cpp:24
AWS_CRT_CPP_API const char * StreamingAws4HmacSha256EventsStr()
Definition Sigv4Signing.cpp:42
AWS_CRT_CPP_API const char * UnsignedPayload
Definition Sigv4Signing.cpp:29
AWS_CRT_CPP_API const char * StreamingAws4HmacSha256PayloadStr()
Definition Sigv4Signing.cpp:36
AWS_CRT_CPP_API const char * UnsignedPayloadStr()
Definition Sigv4Signing.cpp:30
AWS_CRT_CPP_API const char * EmptySha256
Definition Sigv4Signing.cpp:23
SigningAlgorithm
Definition Sigv4Signing.h:28
SigningConfigType
Definition Signing.h:30
SignedBodyHeaderType
Definition Sigv4Signing.h:116
std::function< void(const std::shared_ptr< Aws::Crt::Http::HttpRequest > &, int)> OnHttpRequestSigningComplete
Definition Signing.h:39
bool(*)(const Crt::ByteCursor *, void *) ShouldSignHeaderCb
Definition Sigv4Signing.h:128
SignatureType
Definition Sigv4Signing.h:46
aws_byte_cursor ByteCursor
Definition Types.h:31
aws_allocator Allocator
Definition Allocator.h:14
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition Types.h:45
Definition Allocator.h:11
Definition StringView.h:862