summaryrefslogtreecommitdiff
path: root/chromium/net/third_party/quiche/src/quic/core/quic_connection_id.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/third_party/quiche/src/quic/core/quic_connection_id.cc')
-rw-r--r--chromium/net/third_party/quiche/src/quic/core/quic_connection_id.cc182
1 files changed, 0 insertions, 182 deletions
diff --git a/chromium/net/third_party/quiche/src/quic/core/quic_connection_id.cc b/chromium/net/third_party/quiche/src/quic/core/quic_connection_id.cc
deleted file mode 100644
index a8cb4c0f377..00000000000
--- a/chromium/net/third_party/quiche/src/quic/core/quic_connection_id.cc
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "quic/core/quic_connection_id.h"
-
-#include <cstddef>
-#include <cstdint>
-#include <cstring>
-#include <iomanip>
-#include <string>
-
-#include "absl/strings/escaping.h"
-#include "third_party/boringssl/src/include/openssl/siphash.h"
-#include "quic/core/crypto/quic_random.h"
-#include "quic/core/quic_types.h"
-#include "quic/platform/api/quic_bug_tracker.h"
-#include "quic/platform/api/quic_flag_utils.h"
-#include "quic/platform/api/quic_flags.h"
-#include "quic/platform/api/quic_logging.h"
-#include "common/quiche_endian.h"
-
-namespace quic {
-
-namespace {
-
-// QuicConnectionIdHasher can be used to generate a stable connection ID hash
-// function that will return the same value for two equal connection IDs for
-// the duration of process lifetime. It is meant to be used as input to data
-// structures that do not outlast process lifetime. A new key is generated once
-// per process to prevent attackers from crafting connection IDs in such a way
-// that they always land in the same hash bucket.
-class QuicConnectionIdHasher {
- public:
- inline QuicConnectionIdHasher()
- : QuicConnectionIdHasher(QuicRandom::GetInstance()) {}
-
- explicit inline QuicConnectionIdHasher(QuicRandom* random) {
- random->RandBytes(&sip_hash_key_, sizeof(sip_hash_key_));
- }
-
- inline size_t Hash(const char* input, size_t input_len) const {
- return static_cast<size_t>(SIPHASH_24(
- sip_hash_key_, reinterpret_cast<const uint8_t*>(input), input_len));
- }
-
- private:
- uint64_t sip_hash_key_[2];
-};
-
-} // namespace
-
-QuicConnectionId::QuicConnectionId() : QuicConnectionId(nullptr, 0) {
- static_assert(offsetof(QuicConnectionId, padding_) ==
- offsetof(QuicConnectionId, length_),
- "bad offset");
- static_assert(sizeof(QuicConnectionId) <= 16, "bad size");
-}
-
-QuicConnectionId::QuicConnectionId(const char* data, uint8_t length) {
- length_ = length;
- if (length_ == 0) {
- return;
- }
- if (length_ <= sizeof(data_short_)) {
- memcpy(data_short_, data, length_);
- return;
- }
- data_long_ = reinterpret_cast<char*>(malloc(length_));
- QUICHE_CHECK_NE(nullptr, data_long_);
- memcpy(data_long_, data, length_);
-}
-
-QuicConnectionId::~QuicConnectionId() {
- if (length_ > sizeof(data_short_)) {
- free(data_long_);
- data_long_ = nullptr;
- }
-}
-
-QuicConnectionId::QuicConnectionId(const QuicConnectionId& other)
- : QuicConnectionId(other.data(), other.length()) {}
-
-QuicConnectionId& QuicConnectionId::operator=(const QuicConnectionId& other) {
- set_length(other.length());
- memcpy(mutable_data(), other.data(), length_);
- return *this;
-}
-
-const char* QuicConnectionId::data() const {
- if (length_ <= sizeof(data_short_)) {
- return data_short_;
- }
- return data_long_;
-}
-
-char* QuicConnectionId::mutable_data() {
- if (length_ <= sizeof(data_short_)) {
- return data_short_;
- }
- return data_long_;
-}
-
-uint8_t QuicConnectionId::length() const {
- return length_;
-}
-
-void QuicConnectionId::set_length(uint8_t length) {
- char temporary_data[sizeof(data_short_)];
- if (length > sizeof(data_short_)) {
- if (length_ <= sizeof(data_short_)) {
- // Copy data from data_short_ to data_long_.
- memcpy(temporary_data, data_short_, length_);
- data_long_ = reinterpret_cast<char*>(malloc(length));
- QUICHE_CHECK_NE(nullptr, data_long_);
- memcpy(data_long_, temporary_data, length_);
- } else {
- // Resize data_long_.
- char* realloc_result =
- reinterpret_cast<char*>(realloc(data_long_, length));
- QUICHE_CHECK_NE(nullptr, realloc_result);
- data_long_ = realloc_result;
- }
- } else if (length_ > sizeof(data_short_)) {
- // Copy data from data_long_ to data_short_.
- memcpy(temporary_data, data_long_, length);
- free(data_long_);
- data_long_ = nullptr;
- memcpy(data_short_, temporary_data, length);
- }
- length_ = length;
-}
-
-bool QuicConnectionId::IsEmpty() const {
- return length_ == 0;
-}
-
-size_t QuicConnectionId::Hash() const {
- static const QuicConnectionIdHasher hasher = QuicConnectionIdHasher();
- return hasher.Hash(data(), length_);
-}
-
-std::string QuicConnectionId::ToString() const {
- if (IsEmpty()) {
- return std::string("0");
- }
- return absl::BytesToHexString(absl::string_view(data(), length_));
-}
-
-std::ostream& operator<<(std::ostream& os, const QuicConnectionId& v) {
- os << v.ToString();
- return os;
-}
-
-bool QuicConnectionId::operator==(const QuicConnectionId& v) const {
- return length_ == v.length_ && memcmp(data(), v.data(), length_) == 0;
-}
-
-bool QuicConnectionId::operator!=(const QuicConnectionId& v) const {
- return !(v == *this);
-}
-
-bool QuicConnectionId::operator<(const QuicConnectionId& v) const {
- if (length_ < v.length_) {
- return true;
- }
- if (length_ > v.length_) {
- return false;
- }
- return memcmp(data(), v.data(), length_) < 0;
-}
-
-QuicConnectionId EmptyQuicConnectionId() {
- return QuicConnectionId();
-}
-
-static_assert(kQuicDefaultConnectionIdLength == sizeof(uint64_t),
- "kQuicDefaultConnectionIdLength changed");
-static_assert(kQuicDefaultConnectionIdLength == PACKET_8BYTE_CONNECTION_ID,
- "kQuicDefaultConnectionIdLength changed");
-
-} // namespace quic