| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/core/crypto/common_cert_set.h" | 5 #include "net/quic/core/crypto/common_cert_set.h" |
| 6 | 6 |
| 7 #include <cstddef> | 7 #include <cstddef> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
| 11 #include "net/quic/core/quic_utils.h" | 11 #include "net/quic/core/quic_utils.h" |
| 12 | 12 |
| 13 using base::StringPiece; | |
| 14 | 13 |
| 15 namespace net { | 14 namespace net { |
| 16 | 15 |
| 17 namespace common_cert_set_2 { | 16 namespace common_cert_set_2 { |
| 18 #include "net/quic/core/crypto/common_cert_set_2.c" | 17 #include "net/quic/core/crypto/common_cert_set_2.c" |
| 19 } | 18 } |
| 20 | 19 |
| 21 namespace common_cert_set_3 { | 20 namespace common_cert_set_3 { |
| 22 #include "net/quic/core/crypto/common_cert_set_3.c" | 21 #include "net/quic/core/crypto/common_cert_set_3.c" |
| 23 } | 22 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 46 common_cert_set_3::kLens, common_cert_set_3::kHash, | 45 common_cert_set_3::kLens, common_cert_set_3::kHash, |
| 47 }, | 46 }, |
| 48 }; | 47 }; |
| 49 | 48 |
| 50 const uint64_t kSetHashes[] = { | 49 const uint64_t kSetHashes[] = { |
| 51 common_cert_set_2::kHash, common_cert_set_3::kHash, | 50 common_cert_set_2::kHash, common_cert_set_3::kHash, |
| 52 }; | 51 }; |
| 53 | 52 |
| 54 // Compare returns a value less than, equal to or greater than zero if |a| is | 53 // Compare returns a value less than, equal to or greater than zero if |a| is |
| 55 // lexicographically less than, equal to or greater than |b|, respectively. | 54 // lexicographically less than, equal to or greater than |b|, respectively. |
| 56 int Compare(StringPiece a, const unsigned char* b, size_t b_len) { | 55 int Compare(QuicStringPiece a, const unsigned char* b, size_t b_len) { |
| 57 size_t len = a.size(); | 56 size_t len = a.size(); |
| 58 if (len > b_len) { | 57 if (len > b_len) { |
| 59 len = b_len; | 58 len = b_len; |
| 60 } | 59 } |
| 61 int n = memcmp(a.data(), b, len); | 60 int n = memcmp(a.data(), b, len); |
| 62 if (n != 0) { | 61 if (n != 0) { |
| 63 return n; | 62 return n; |
| 64 } | 63 } |
| 65 | 64 |
| 66 if (a.size() < b_len) { | 65 if (a.size() < b_len) { |
| 67 return -1; | 66 return -1; |
| 68 } else if (a.size() > b_len) { | 67 } else if (a.size() > b_len) { |
| 69 return 1; | 68 return 1; |
| 70 } | 69 } |
| 71 return 0; | 70 return 0; |
| 72 } | 71 } |
| 73 | 72 |
| 74 // CommonCertSetsQUIC implements the CommonCertSets interface using the default | 73 // CommonCertSetsQUIC implements the CommonCertSets interface using the default |
| 75 // certificate sets. | 74 // certificate sets. |
| 76 class CommonCertSetsQUIC : public CommonCertSets { | 75 class CommonCertSetsQUIC : public CommonCertSets { |
| 77 public: | 76 public: |
| 78 // CommonCertSets interface. | 77 // CommonCertSets interface. |
| 79 StringPiece GetCommonHashes() const override { | 78 QuicStringPiece GetCommonHashes() const override { |
| 80 return StringPiece(reinterpret_cast<const char*>(kSetHashes), | 79 return QuicStringPiece(reinterpret_cast<const char*>(kSetHashes), |
| 81 sizeof(uint64_t) * arraysize(kSetHashes)); | 80 sizeof(uint64_t) * arraysize(kSetHashes)); |
| 82 } | 81 } |
| 83 | 82 |
| 84 StringPiece GetCert(uint64_t hash, uint32_t index) const override { | 83 QuicStringPiece GetCert(uint64_t hash, uint32_t index) const override { |
| 85 for (size_t i = 0; i < arraysize(kSets); i++) { | 84 for (size_t i = 0; i < arraysize(kSets); i++) { |
| 86 if (kSets[i].hash == hash) { | 85 if (kSets[i].hash == hash) { |
| 87 if (index < kSets[i].num_certs) { | 86 if (index < kSets[i].num_certs) { |
| 88 return StringPiece( | 87 return QuicStringPiece( |
| 89 reinterpret_cast<const char*>(kSets[i].certs[index]), | 88 reinterpret_cast<const char*>(kSets[i].certs[index]), |
| 90 kSets[i].lens[index]); | 89 kSets[i].lens[index]); |
| 91 } | 90 } |
| 92 break; | 91 break; |
| 93 } | 92 } |
| 94 } | 93 } |
| 95 | 94 |
| 96 return StringPiece(); | 95 return QuicStringPiece(); |
| 97 } | 96 } |
| 98 | 97 |
| 99 bool MatchCert(StringPiece cert, | 98 bool MatchCert(QuicStringPiece cert, |
| 100 StringPiece common_set_hashes, | 99 QuicStringPiece common_set_hashes, |
| 101 uint64_t* out_hash, | 100 uint64_t* out_hash, |
| 102 uint32_t* out_index) const override { | 101 uint32_t* out_index) const override { |
| 103 if (common_set_hashes.size() % sizeof(uint64_t) != 0) { | 102 if (common_set_hashes.size() % sizeof(uint64_t) != 0) { |
| 104 return false; | 103 return false; |
| 105 } | 104 } |
| 106 | 105 |
| 107 for (size_t i = 0; i < common_set_hashes.size() / sizeof(uint64_t); i++) { | 106 for (size_t i = 0; i < common_set_hashes.size() / sizeof(uint64_t); i++) { |
| 108 uint64_t hash; | 107 uint64_t hash; |
| 109 memcpy(&hash, common_set_hashes.data() + i * sizeof(uint64_t), | 108 memcpy(&hash, common_set_hashes.data() + i * sizeof(uint64_t), |
| 110 sizeof(uint64_t)); | 109 sizeof(uint64_t)); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 } // anonymous namespace | 157 } // anonymous namespace |
| 159 | 158 |
| 160 CommonCertSets::~CommonCertSets() {} | 159 CommonCertSets::~CommonCertSets() {} |
| 161 | 160 |
| 162 // static | 161 // static |
| 163 const CommonCertSets* CommonCertSets::GetInstanceQUIC() { | 162 const CommonCertSets* CommonCertSets::GetInstanceQUIC() { |
| 164 return CommonCertSetsQUIC::GetInstance(); | 163 return CommonCertSetsQUIC::GetInstance(); |
| 165 } | 164 } |
| 166 | 165 |
| 167 } // namespace net | 166 } // namespace net |
| OLD | NEW |