Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Unified Diff: net/quic/crypto/null_decrypter.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/crypto/null_decrypter.h ('k') | net/quic/crypto/null_decrypter_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/crypto/null_decrypter.cc
diff --git a/net/quic/crypto/null_decrypter.cc b/net/quic/crypto/null_decrypter.cc
index 4411b7c0ba1fe460a51f82bf05933041c4c02b7c..8a18172a5c299ded7443f1cbfae583fe8fbd18e2 100644
--- a/net/quic/crypto/null_decrypter.cc
+++ b/net/quic/crypto/null_decrypter.cc
@@ -19,28 +19,31 @@ bool NullDecrypter::SetNoncePrefix(StringPiece nonce_prefix) {
return nonce_prefix.empty();
}
-QuicData* NullDecrypter::DecryptPacket(QuicPacketSequenceNumber /*seq_number*/,
- StringPiece associated_data,
- StringPiece ciphertext) {
- // It's worth duplicating |Decrypt|, above, in order to save a copy by using
- // the shared-data QuicData constructor directly.
+bool NullDecrypter::DecryptPacket(QuicPacketSequenceNumber /*seq_number*/,
+ const StringPiece& associated_data,
+ const StringPiece& ciphertext,
+ char* output,
+ size_t* output_length,
+ size_t max_output_length) {
QuicDataReader reader(ciphertext.data(), ciphertext.length());
-
uint128 hash;
+
if (!ReadHash(&reader, &hash)) {
- return nullptr;
+ return false;
}
StringPiece plaintext = reader.ReadRemainingPayload();
-
- // TODO(rch): avoid buffer copy here
- string buffer = associated_data.as_string();
- plaintext.AppendToString(&buffer);
-
- if (hash != ComputeHash(buffer)) {
- return nullptr;
+ if (plaintext.length() > max_output_length) {
+ LOG(DFATAL) << "Output buffer must be larger than the plaintext.";
+ return false;
+ }
+ if (hash != ComputeHash(associated_data, plaintext)) {
+ return false;
}
- return new QuicData(plaintext.data(), plaintext.length());
+ // Copy the plaintext to output.
+ memcpy(output, plaintext.data(), plaintext.length());
+ *output_length = plaintext.length();
+ return true;
}
StringPiece NullDecrypter::GetKey() const { return StringPiece(); }
@@ -60,8 +63,10 @@ bool NullDecrypter::ReadHash(QuicDataReader* reader, uint128* hash) {
return true;
}
-uint128 NullDecrypter::ComputeHash(const string& data) const {
- uint128 correct_hash = QuicUtils::FNV1a_128_Hash(data.data(), data.length());
+uint128 NullDecrypter::ComputeHash(const StringPiece& data1,
+ const StringPiece& data2) const {
+ uint128 correct_hash = QuicUtils::FNV1a_128_Hash_Two(
+ data1.data(), data1.length(), data2.data(), data2.length());
uint128 mask(GG_UINT64_C(0x0), GG_UINT64_C(0xffffffff));
mask <<= 96;
correct_hash &= ~mask;
« no previous file with comments | « net/quic/crypto/null_decrypter.h ('k') | net/quic/crypto/null_decrypter_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698