OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/crypto/null_decrypter.h" | 5 #include "net/quic/crypto/null_decrypter.h" |
6 #include "net/quic/quic_utils.h" | 6 #include "net/quic/quic_utils.h" |
7 #include "net/quic/quic_data_reader.h" | 7 #include "net/quic/quic_data_reader.h" |
8 | 8 |
9 using base::StringPiece; | 9 using base::StringPiece; |
10 using std::string; | 10 using std::string; |
11 | 11 |
12 namespace net { | 12 namespace net { |
13 | 13 |
14 NullDecrypter::NullDecrypter() {} | 14 NullDecrypter::NullDecrypter() { |
| 15 } |
15 | 16 |
16 bool NullDecrypter::SetKey(StringPiece key) { return key.empty(); } | 17 bool NullDecrypter::SetKey(StringPiece key) { |
| 18 return key.empty(); |
| 19 } |
17 | 20 |
18 bool NullDecrypter::SetNoncePrefix(StringPiece nonce_prefix) { | 21 bool NullDecrypter::SetNoncePrefix(StringPiece nonce_prefix) { |
19 return nonce_prefix.empty(); | 22 return nonce_prefix.empty(); |
20 } | 23 } |
21 | 24 |
22 bool NullDecrypter::Decrypt(StringPiece /*nonce*/, | 25 bool NullDecrypter::Decrypt(StringPiece /*nonce*/, |
23 StringPiece associated_data, | 26 StringPiece associated_data, |
24 StringPiece ciphertext, | 27 StringPiece ciphertext, |
25 unsigned char* output, | 28 unsigned char* output, |
26 size_t* output_length) { | 29 size_t* output_length) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 // TODO(rch): avoid buffer copy here | 64 // TODO(rch): avoid buffer copy here |
62 string buffer = associated_data.as_string(); | 65 string buffer = associated_data.as_string(); |
63 plaintext.AppendToString(&buffer); | 66 plaintext.AppendToString(&buffer); |
64 | 67 |
65 if (hash != ComputeHash(buffer)) { | 68 if (hash != ComputeHash(buffer)) { |
66 return NULL; | 69 return NULL; |
67 } | 70 } |
68 return new QuicData(plaintext.data(), plaintext.length()); | 71 return new QuicData(plaintext.data(), plaintext.length()); |
69 } | 72 } |
70 | 73 |
71 StringPiece NullDecrypter::GetKey() const { return StringPiece(); } | 74 StringPiece NullDecrypter::GetKey() const { |
| 75 return StringPiece(); |
| 76 } |
72 | 77 |
73 StringPiece NullDecrypter::GetNoncePrefix() const { return StringPiece(); } | 78 StringPiece NullDecrypter::GetNoncePrefix() const { |
| 79 return StringPiece(); |
| 80 } |
74 | 81 |
75 bool NullDecrypter::ReadHash(QuicDataReader* reader, uint128* hash) { | 82 bool NullDecrypter::ReadHash(QuicDataReader* reader, uint128* hash) { |
76 uint64 lo; | 83 uint64 lo; |
77 uint32 hi; | 84 uint32 hi; |
78 if (!reader->ReadUInt64(&lo) || | 85 if (!reader->ReadUInt64(&lo) || !reader->ReadUInt32(&hi)) { |
79 !reader->ReadUInt32(&hi)) { | |
80 return false; | 86 return false; |
81 } | 87 } |
82 *hash = hi; | 88 *hash = hi; |
83 *hash <<= 64; | 89 *hash <<= 64; |
84 *hash += lo; | 90 *hash += lo; |
85 return true; | 91 return true; |
86 } | 92 } |
87 | 93 |
88 uint128 NullDecrypter::ComputeHash(const string& data) const { | 94 uint128 NullDecrypter::ComputeHash(const string& data) const { |
89 uint128 correct_hash = QuicUtils::FNV1a_128_Hash(data.data(), data.length()); | 95 uint128 correct_hash = QuicUtils::FNV1a_128_Hash(data.data(), data.length()); |
90 uint128 mask(GG_UINT64_C(0x0), GG_UINT64_C(0xffffffff)); | 96 uint128 mask(GG_UINT64_C(0x0), GG_UINT64_C(0xffffffff)); |
91 mask <<= 96; | 97 mask <<= 96; |
92 correct_hash &= ~mask; | 98 correct_hash &= ~mask; |
93 return correct_hash; | 99 return correct_hash; |
94 } | 100 } |
95 | 101 |
96 } // namespace net | 102 } // namespace net |
OLD | NEW |