Skip to content

Commit bef3faf

Browse files
Made signer take a signing config by value, made sure stream seek clears stream state, updated body signing api. (aws#78)
1 parent 1d1a2be commit bef3faf

File tree

7 files changed

+34
-23
lines changed

7 files changed

+34
-23
lines changed

aws-common-runtime/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ set(AWS_C_CAL_SHA "v0.2.0")
4747
include(BuildAwsCCal)
4848

4949
set(AWS_C_AUTH_URL "https://github.com/awslabs/aws-c-auth.git")
50-
set(AWS_C_AUTH_SHA "v0.3.2")
50+
set(AWS_C_AUTH_SHA "v0.3.3")
5151
include(BuildAwsCAuth)
5252

5353
add_dependencies(AwsCCompression AwsCCommon)

include/aws/crt/auth/Signing.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ namespace Aws
8282

8383
virtual bool SignRequest(
8484
const std::shared_ptr<Aws::Crt::Http::HttpRequest> &request,
85-
const std::shared_ptr<ISigningConfig> &config,
85+
const ISigningConfig &config,
8686
const OnHttpRequestSigningComplete &completionCallback) = 0;
8787

8888
/**

include/aws/crt/auth/Sigv4Signing.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ namespace Aws
4040
Count = AWS_SIGNING_ALGORITHM_COUNT
4141
};
4242

43+
enum class BodySigningType
44+
{
45+
NoSigning = AWS_BODY_SIGNING_OFF,
46+
SignBody = AWS_BODY_SIGNING_ON,
47+
UnsignedPayload = AWS_BODY_SIGNING_UNSIGNED_PAYLOAD
48+
};
49+
4350
using ShouldSignParameterCb = bool (*)(const Crt::ByteCursor *, void *);
4451

4552
/**
@@ -137,13 +144,13 @@ namespace Aws
137144
* Gets whether or not the signer should add the x-amz-content-sha256 header (with appropriate value) to
138145
* the canonical request.
139146
*/
140-
bool GetSignBody() const noexcept;
147+
BodySigningType GetBodySigningType() const noexcept;
141148

142149
/**
143150
* Sets whether or not the signer should add the x-amz-content-sha256 header (with appropriate value) to
144151
* the canonical request.
145152
*/
146-
void SetSignBody(bool signBody) noexcept;
153+
void SetBodySigningType(BodySigningType bodysigningType) noexcept;
147154

148155
/**
149156
* Get the credentials provider to use for signing.
@@ -180,7 +187,7 @@ namespace Aws
180187
*/
181188
virtual bool SignRequest(
182189
const std::shared_ptr<Aws::Crt::Http::HttpRequest> &request,
183-
const std::shared_ptr<ISigningConfig> &config,
190+
const ISigningConfig &config,
184191
const OnHttpRequestSigningComplete &completionCallback) override;
185192

186193
private:

source/auth/Sigv4Signing.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace Aws
3434

3535
SetSigningAlgorithm(SigningAlgorithm::SigV4Header);
3636
SetShouldNormalizeUriPath(true);
37-
SetSignBody(true);
37+
SetBodySigningType(BodySigningType::SignBody);
3838
SetSigningTimepoint(DateTime::Now());
3939
m_config.config_type = AWS_SIGNING_CONFIG_AWS;
4040
}
@@ -104,9 +104,15 @@ namespace Aws
104104
m_config.should_sign_param = shouldSignParameterCb;
105105
}
106106

107-
bool AwsSigningConfig::GetSignBody() const noexcept { return m_config.sign_body; }
107+
BodySigningType AwsSigningConfig::GetBodySigningType() const noexcept
108+
{
109+
return static_cast<BodySigningType>(m_config.body_signing_type);
110+
}
108111

109-
void AwsSigningConfig::SetSignBody(bool signBody) noexcept { m_config.sign_body = signBody; }
112+
void AwsSigningConfig::SetBodySigningType(BodySigningType bodysigningType) noexcept
113+
{
114+
m_config.body_signing_type = static_cast<enum aws_body_signing_config_type>(bodysigningType);
115+
}
110116

111117
const std::shared_ptr<ICredentialsProvider> &AwsSigningConfig::GetCredentialsProvider() const noexcept
112118
{
@@ -138,8 +144,6 @@ namespace Aws
138144
Allocator *Alloc;
139145
ScopedResource<struct aws_signable> Signable;
140146
OnHttpRequestSigningComplete OnRequestSigningComplete;
141-
// just hold on to this for lifetime, we don't actually use it.
142-
std::shared_ptr<ISigningConfig> Config;
143147
std::shared_ptr<Http::HttpRequest> Request;
144148
};
145149

@@ -159,16 +163,16 @@ namespace Aws
159163

160164
bool Sigv4HttpRequestSigner::SignRequest(
161165
const std::shared_ptr<Aws::Crt::Http::HttpRequest> &request,
162-
const std::shared_ptr<ISigningConfig> &config,
166+
const ISigningConfig &config,
163167
const OnHttpRequestSigningComplete &completionCallback)
164168
{
165-
if (config->GetType() != SigningConfigType::Aws)
169+
if (config.GetType() != SigningConfigType::Aws)
166170
{
167171
aws_raise_error(AWS_ERROR_INVALID_ARGUMENT);
168172
return false;
169173
}
170174

171-
auto awsSigningConfig = static_cast<const AwsSigningConfig *>(config.get());
175+
auto awsSigningConfig = static_cast<const AwsSigningConfig *>(&config);
172176

173177
if (!awsSigningConfig->GetCredentialsProvider())
174178
{
@@ -184,7 +188,6 @@ namespace Aws
184188
}
185189

186190
signerCallbackData->Alloc = m_allocator;
187-
signerCallbackData->Config = config;
188191
signerCallbackData->OnRequestSigningComplete = completionCallback;
189192
signerCallbackData->Request = request;
190193
signerCallbackData->Signable = ScopedResource<struct aws_signable>(

source/io/Stream.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static int s_aws_input_stream_cpp_seek(
4242
enum aws_stream_seek_basis basis)
4343
{
4444
aws_input_stream_cpp_impl *impl = static_cast<aws_input_stream_cpp_impl *>(stream->impl);
45+
impl->stream->clear();
4546
impl->stream->seekg(Aws::Crt::Io::IStream::off_type(offset), s_stream_seek_basis_to_seekdir(basis));
4647

4748
return AWS_OP_SUCCESS;

source/iot/MqttClient.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ namespace Aws
5555
signerConfig->SetRegion(signingRegionCopy);
5656
signerConfig->SetService(serviceNameCopy);
5757
signerConfig->SetSigningAlgorithm(Crt::Auth::SigningAlgorithm::SigV4QueryParam);
58-
signerConfig->SetSignBody(false);
58+
signerConfig->SetBodySigningType(Crt::Auth::BodySigningType::NoSigning);
5959
signerConfig->SetShouldSignHeadersCallback(s_blackListHeadersFromSigning);
6060
signerConfig->SetCredentialsProvider(credsProviderRef);
6161

@@ -79,7 +79,7 @@ namespace Aws
7979
signerConfig->SetRegion(signingRegionCopy);
8080
signerConfig->SetService(serviceNameCopy);
8181
signerConfig->SetSigningAlgorithm(Crt::Auth::SigningAlgorithm::SigV4QueryParam);
82-
signerConfig->SetSignBody(false);
82+
signerConfig->SetBodySigningType(Crt::Auth::BodySigningType::NoSigning);
8383
signerConfig->SetShouldSignHeadersCallback(s_blackListHeadersFromSigning);
8484
signerConfig->SetCredentialsProvider(credsProviderRef);
8585

@@ -301,7 +301,7 @@ namespace Aws
301301

302302
auto signerConfig = websocketConfig.CreateSigningConfigCb();
303303

304-
websocketConfig.Signer->SignRequest(req, signerConfig, signingComplete);
304+
websocketConfig.Signer->SignRequest(req, *signerConfig, signingComplete);
305305
};
306306

307307
return MqttClientConnectionConfig(
@@ -360,4 +360,4 @@ namespace Aws
360360
return newConnection;
361361
}
362362
} // namespace Iot
363-
} // namespace Aws
363+
} // namespace Aws

tests/Sigv4SigningTest.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,11 @@ static int s_Sigv4SigningTestSimple(struct aws_allocator *allocator, void *ctx)
174174

175175
auto request = s_MakeDummyRequest(allocator);
176176

177-
auto signingConfig = Aws::Crt::MakeShared<AwsSigningConfig>(allocator, allocator);
178-
signingConfig->SetSigningTimepoint(Aws::Crt::DateTime());
179-
signingConfig->SetRegion("test");
180-
signingConfig->SetService("service");
181-
signingConfig->SetCredentialsProvider(provider);
177+
AwsSigningConfig signingConfig(allocator);
178+
signingConfig.SetSigningTimepoint(Aws::Crt::DateTime());
179+
signingConfig.SetRegion("test");
180+
signingConfig.SetService("service");
181+
signingConfig.SetCredentialsProvider(provider);
182182

183183
SignWaiter waiter;
184184

0 commit comments

Comments
 (0)