Use std::move to avoid making copies of payload. Also cleared some return std::move statements. go/totw/labs/should-i-return-std-move PiperOrigin-RevId: 484023440
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.cc b/quiche/oblivious_http/buffers/oblivious_http_request.cc index 76029a3..5a43eb2 100644 --- a/quiche/oblivious_http/buffers/oblivious_http_request.cc +++ b/quiche/oblivious_http/buffers/oblivious_http_request.cc
@@ -95,23 +95,23 @@ // Request Encapsulation. absl::StatusOr<ObliviousHttpRequest> ObliviousHttpRequest::CreateClientObliviousRequest( - absl::string_view plaintext_payload, absl::string_view hpke_public_key, + std::string plaintext_payload, absl::string_view hpke_public_key, const ObliviousHttpHeaderKeyConfig& ohttp_key_config) { - return EncapsulateWithSeed(plaintext_payload, hpke_public_key, + return EncapsulateWithSeed(std::move(plaintext_payload), hpke_public_key, ohttp_key_config, ""); } absl::StatusOr<ObliviousHttpRequest> ObliviousHttpRequest::CreateClientWithSeedForTesting( - absl::string_view plaintext_payload, absl::string_view hpke_public_key, + std::string plaintext_payload, absl::string_view hpke_public_key, const ObliviousHttpHeaderKeyConfig& ohttp_key_config, absl::string_view seed) { return ObliviousHttpRequest::EncapsulateWithSeed( - plaintext_payload, hpke_public_key, ohttp_key_config, seed); + std::move(plaintext_payload), hpke_public_key, ohttp_key_config, seed); } absl::StatusOr<ObliviousHttpRequest> ObliviousHttpRequest::EncapsulateWithSeed( - absl::string_view plaintext_payload, absl::string_view hpke_public_key, + std::string plaintext_payload, absl::string_view hpke_public_key, const ObliviousHttpHeaderKeyConfig& ohttp_key_config, absl::string_view seed) { if (plaintext_payload.empty() || hpke_public_key.empty()) { @@ -182,7 +182,7 @@ return ObliviousHttpRequest( std::move(client_ctx), std::move(encapsulated_key), ohttp_key_config, - std::move(ciphertext), std::string(plaintext_payload)); + std::move(ciphertext), std::move(plaintext_payload)); } // Request Serialize.
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request.h b/quiche/oblivious_http/buffers/oblivious_http_request.h index 1963693..5ff195c 100644 --- a/quiche/oblivious_http/buffers/oblivious_http_request.h +++ b/quiche/oblivious_http/buffers/oblivious_http_request.h
@@ -60,12 +60,12 @@ // On success, returns obj that callers will use to `EncapsulateAndSerialize` // OHttp request. static absl::StatusOr<ObliviousHttpRequest> CreateClientObliviousRequest( - absl::string_view plaintext_payload, absl::string_view hpke_public_key, + std::string plaintext_payload, absl::string_view hpke_public_key, const ObliviousHttpHeaderKeyConfig& ohttp_key_config); // Same as above but accepts a random number seed for testing. static absl::StatusOr<ObliviousHttpRequest> CreateClientWithSeedForTesting( - absl::string_view plaintext_payload, absl::string_view hpke_public_key, + std::string plaintext_payload, absl::string_view hpke_public_key, const ObliviousHttpHeaderKeyConfig& ohttp_key_config, absl::string_view seed); @@ -104,7 +104,7 @@ std::string req_ciphertext, std::string req_plaintext); static absl::StatusOr<ObliviousHttpRequest> EncapsulateWithSeed( - absl::string_view plaintext_payload, absl::string_view hpke_public_key, + std::string plaintext_payload, absl::string_view hpke_public_key, const ObliviousHttpHeaderKeyConfig& ohttp_key_config, absl::string_view seed);
diff --git a/quiche/oblivious_http/buffers/oblivious_http_request_test.cc b/quiche/oblivious_http/buffers/oblivious_http_request_test.cc index e313bb8..546de96 100644 --- a/quiche/oblivious_http/buffers/oblivious_http_request_test.cc +++ b/quiche/oblivious_http/buffers/oblivious_http_request_test.cc
@@ -116,7 +116,7 @@ uint16_t test_kem_id = EVP_HPKE_DHKEM_X25519_HKDF_SHA256; uint16_t test_kdf_id = EVP_HPKE_HKDF_SHA256; uint16_t test_aead_id = EVP_HPKE_AES_256_GCM; - absl::string_view plaintext = "test"; + std::string plaintext = "test"; auto instance = ObliviousHttpRequest::CreateClientObliviousRequest( plaintext, GetHpkePublicKey(), GetOhttpKeyConfig(test_key_id, test_kem_id, test_kdf_id, test_aead_id));
diff --git a/quiche/oblivious_http/buffers/oblivious_http_response.cc b/quiche/oblivious_http/buffers/oblivious_http_response.cc index 4ab7092..b81ea8e 100644 --- a/quiche/oblivious_http/buffers/oblivious_http_response.cc +++ b/quiche/oblivious_http/buffers/oblivious_http_response.cc
@@ -37,9 +37,9 @@ ObliviousHttpResponse::ObliviousHttpResponse(std::string resp_nonce, std::string resp_ciphertext, std::string resp_plaintext) - : response_nonce_(resp_nonce), - response_ciphertext_(resp_ciphertext), - response_plaintext_(resp_plaintext) {} + : response_nonce_(std::move(resp_nonce)), + response_ciphertext_(std::move(resp_ciphertext)), + response_plaintext_(std::move(resp_plaintext)) {} // Response Decapsulation. // 1. Extract resp_nonce @@ -119,9 +119,10 @@ "Failed to decrypt the response with derived AEAD key and nonce."); } decrypted.resize(decrypted_len); - ObliviousHttpResponse oblivious_response( - std::string(response_nonce), std::string(encrypted_response), decrypted); - return std::move(oblivious_response); + ObliviousHttpResponse oblivious_response(std::string(response_nonce), + std::string(encrypted_response), + std::move(decrypted)); + return oblivious_response; } // Response Encapsulation. @@ -131,7 +132,7 @@ // encrypt) the response back to the Sender(client) absl::StatusOr<ObliviousHttpResponse> ObliviousHttpResponse::CreateServerObliviousResponse( - absl::string_view plaintext_payload, + std::string plaintext_payload, ObliviousHttpRequest::Context& oblivious_http_request_context, QuicheRandom* quiche_random) { if (oblivious_http_request_context.hpke_context_ == nullptr) { @@ -196,9 +197,10 @@ (response_nonce.empty() ? "Generated nonce is empty." : ""), (ciphertext.empty() ? "Generated Encrypted payload is empty." : ""))); } - ObliviousHttpResponse oblivious_response(response_nonce, ciphertext, - std::string(plaintext_payload)); - return std::move(oblivious_response); + ObliviousHttpResponse oblivious_response(std::move(response_nonce), + std::move(ciphertext), + std::move(plaintext_payload)); + return oblivious_response; } // Serialize. @@ -233,7 +235,7 @@ const size_t secret_len = std::max(aead_key_len, aead_nonce_len); CommonAeadParamsResult result{evp_hpke_aead, aead_key_len, aead_nonce_len, secret_len}; - return std::move(result); + return result; } // Common Steps of AEAD key and AEAD nonce derivation common to both @@ -346,7 +348,7 @@ "Failed to initialize AEAD context with derived key."); } CommonOperationsResult result{std::move(aead_ctx), std::move(aead_nonce)}; - return std::move(result); + return result; } } // namespace quiche
diff --git a/quiche/oblivious_http/buffers/oblivious_http_response.h b/quiche/oblivious_http/buffers/oblivious_http_response.h index 40279fc..70198cf 100644 --- a/quiche/oblivious_http/buffers/oblivious_http_response.h +++ b/quiche/oblivious_http/buffers/oblivious_http_response.h
@@ -37,7 +37,7 @@ // string generation. `quiche_random` is required to stay alive only for the // lifetime of this factory method call. static absl::StatusOr<ObliviousHttpResponse> CreateServerObliviousResponse( - absl::string_view plaintext_payload, + std::string plaintext_payload, ObliviousHttpRequest::Context& oblivious_http_request_context, QuicheRandom* quiche_random = nullptr);
diff --git a/quiche/oblivious_http/buffers/oblivious_http_response_test.cc b/quiche/oblivious_http/buffers/oblivious_http_response_test.cc index f19020d..b2147d7 100644 --- a/quiche/oblivious_http/buffers/oblivious_http_response_test.cc +++ b/quiche/oblivious_http/buffers/oblivious_http_response_test.cc
@@ -50,7 +50,7 @@ auto ohttp_key_config = ObliviousHttpHeaderKeyConfig::Create(key_id, kem_id, kdf_id, aead_id); EXPECT_TRUE(ohttp_key_config.ok()); - return std::move(ohttp_key_config.value()); + return ohttp_key_config.value(); } bssl::UniquePtr<EVP_HPKE_CTX> GetSeededClientContext(uint8_t key_id, @@ -90,11 +90,12 @@ ObliviousHttpRequest SetUpObliviousHttpContext(uint8_t key_id, uint16_t kem_id, uint16_t kdf_id, uint16_t aead_id, - absl::string_view plaintext) { + std::string plaintext) { auto ohttp_key_config = GetOhttpKeyConfig(key_id, kem_id, kdf_id, aead_id); auto client_request_encapsulate = ObliviousHttpRequest::CreateClientWithSeedForTesting( - plaintext, GetHpkePublicKey(), ohttp_key_config, GetSeed()); + std::move(plaintext), GetHpkePublicKey(), ohttp_key_config, + GetSeed()); EXPECT_TRUE(client_request_encapsulate.ok()); auto oblivious_request = client_request_encapsulate->EncapsulateAndSerialize();
diff --git a/quiche/oblivious_http/oblivious_http_client.cc b/quiche/oblivious_http/oblivious_http_client.cc index 4379096..8a77c75 100644 --- a/quiche/oblivious_http/oblivious_http_client.cc +++ b/quiche/oblivious_http/oblivious_http_client.cc
@@ -75,17 +75,17 @@ absl::StatusOr<ObliviousHttpRequest> ObliviousHttpClient::CreateObliviousHttpRequest( - absl::string_view plaintext_data) const { + std::string plaintext_data) const { return ObliviousHttpRequest::CreateClientObliviousRequest( - plaintext_data, hpke_public_key_, ohttp_key_config_); + std::move(plaintext_data), hpke_public_key_, ohttp_key_config_); } absl::StatusOr<ObliviousHttpResponse> ObliviousHttpClient::DecryptObliviousHttpResponse( - absl::string_view encrypted_data, + std::string encrypted_data, ObliviousHttpRequest::Context& oblivious_http_request_context) const { return ObliviousHttpResponse::CreateClientObliviousResponse( - encrypted_data, oblivious_http_request_context); + std::move(encrypted_data), oblivious_http_request_context); } } // namespace quiche
diff --git a/quiche/oblivious_http/oblivious_http_client.h b/quiche/oblivious_http/oblivious_http_client.h index 93cf1a2..9527b68 100644 --- a/quiche/oblivious_http/oblivious_http_client.h +++ b/quiche/oblivious_http/oblivious_http_client.h
@@ -54,14 +54,14 @@ // auto encrypted_request2 = // ohttp_client_object.CreateObliviousHttpRequest("binary http string 2"); absl::StatusOr<ObliviousHttpRequest> CreateObliviousHttpRequest( - absl::string_view plaintext_data) const; + std::string plaintext_data) const; // After `CreateObliviousHttpRequest` operation, callers on client-side will // extract `oblivious_http_request_context` from the returned object // `ObliviousHttpRequest` and pass in to this method in order to decrypt the // response that's received from Gateway for the given request at hand. absl::StatusOr<ObliviousHttpResponse> DecryptObliviousHttpResponse( - absl::string_view encrypted_data, + std::string encrypted_data, ObliviousHttpRequest::Context& oblivious_http_request_context) const; private:
diff --git a/quiche/oblivious_http/oblivious_http_client_test.cc b/quiche/oblivious_http/oblivious_http_client_test.cc index 9abfbd3..a2768a5 100644 --- a/quiche/oblivious_http/oblivious_http_client_test.cc +++ b/quiche/oblivious_http/oblivious_http_client_test.cc
@@ -36,17 +36,17 @@ auto ohttp_key_config = ObliviousHttpHeaderKeyConfig::Create(key_id, kem_id, kdf_id, aead_id); EXPECT_TRUE(ohttp_key_config.ok()); - return std::move(ohttp_key_config.value()); + return ohttp_key_config.value(); } bssl::UniquePtr<EVP_HPKE_KEY> ConstructHpkeKey( absl::string_view hpke_key, - const ObliviousHttpHeaderKeyConfig &ohttp_key_config) { + const ObliviousHttpHeaderKeyConfig& ohttp_key_config) { bssl::UniquePtr<EVP_HPKE_KEY> bssl_hpke_key(EVP_HPKE_KEY_new()); EXPECT_NE(bssl_hpke_key, nullptr); EXPECT_TRUE(EVP_HPKE_KEY_init( bssl_hpke_key.get(), ohttp_key_config.GetHpkeKem(), - reinterpret_cast<const uint8_t *>(hpke_key.data()), hpke_key.size())); + reinterpret_cast<const uint8_t*>(hpke_key.data()), hpke_key.size())); return bssl_hpke_key; } @@ -150,7 +150,7 @@ auto client_request_context = std::move(encapsulate_req_on_client.value()).ReleaseContext(); auto decapsulate_resp_on_client = client->DecryptObliviousHttpResponse( - absl::string_view(encapsulate_resp_on_gateway->EncapsulateAndSerialize()), + encapsulate_resp_on_gateway->EncapsulateAndSerialize(), client_request_context); ASSERT_TRUE(decapsulate_resp_on_client.ok()); EXPECT_EQ(decapsulate_resp_on_client->GetPlaintextData(), "test response"); @@ -182,7 +182,7 @@ ObliviousHttpClient::Create(GetHpkePublicKey(), ohttp_key_config); ASSERT_TRUE(client.ok()); auto decapsulate_resp_on_client = client->DecryptObliviousHttpResponse( - absl::string_view(encapsulate_resp_on_gateway->EncapsulateAndSerialize()), + encapsulate_resp_on_gateway->EncapsulateAndSerialize(), gateway_request_context); ASSERT_TRUE(decapsulate_resp_on_client.ok()); EXPECT_EQ(decapsulate_resp_on_client->GetPlaintextData(), "test response");
diff --git a/quiche/oblivious_http/oblivious_http_gateway.cc b/quiche/oblivious_http/oblivious_http_gateway.cc index 0c5cf6b..b2d2e88 100644 --- a/quiche/oblivious_http/oblivious_http_gateway.cc +++ b/quiche/oblivious_http/oblivious_http_gateway.cc
@@ -3,6 +3,7 @@ #include <stdint.h> #include <memory> +#include <string> #include <utility> #include "absl/memory/memory.h" @@ -57,10 +58,11 @@ absl::StatusOr<ObliviousHttpResponse> ObliviousHttpGateway::CreateObliviousHttpResponse( - absl::string_view plaintext_data, + std::string plaintext_data, ObliviousHttpRequest::Context& oblivious_http_request_context) const { return ObliviousHttpResponse::CreateServerObliviousResponse( - plaintext_data, oblivious_http_request_context, quiche_random_); + std::move(plaintext_data), oblivious_http_request_context, + quiche_random_); } } // namespace quiche
diff --git a/quiche/oblivious_http/oblivious_http_gateway.h b/quiche/oblivious_http/oblivious_http_gateway.h index 299f2bb..ae6c746 100644 --- a/quiche/oblivious_http/oblivious_http_gateway.h +++ b/quiche/oblivious_http/oblivious_http_gateway.h
@@ -2,6 +2,7 @@ #define QUICHE_OBLIVIOUS_HTTP_OBLIVIOUS_HTTP_GATEWAY_H_ #include <memory> +#include <string> #include "absl/status/statusor.h" #include "absl/strings/string_view.h" @@ -61,7 +62,7 @@ // `ObliviousHttpRequest` and pass in to this method in order to handle the // response flow back to the client. absl::StatusOr<ObliviousHttpResponse> CreateObliviousHttpResponse( - absl::string_view plaintext_data, + std::string plaintext_data, ObliviousHttpRequest::Context& oblivious_http_request_context) const; private: