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

Side by Side Diff: net/quic/core/crypto/crypto_utils.h

Issue 2740453006: Add QuicStringPiece which is actually StringPiece. (Closed)
Patch Set: fix compile error and rebase Created 3 years, 9 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 unified diff | Download patch
« no previous file with comments | « net/quic/core/crypto/crypto_server_test.cc ('k') | net/quic/core/crypto/crypto_utils.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // Some helpers for quic crypto 5 // Some helpers for quic crypto
6 6
7 #ifndef NET_QUIC_CORE_CRYPTO_CRYPTO_UTILS_H_ 7 #ifndef NET_QUIC_CORE_CRYPTO_CRYPTO_UTILS_H_
8 #define NET_QUIC_CORE_CRYPTO_CRYPTO_UTILS_H_ 8 #define NET_QUIC_CORE_CRYPTO_CRYPTO_UTILS_H_
9 9
10 #include <cstddef> 10 #include <cstddef>
11 #include <cstdint> 11 #include <cstdint>
12 #include <string> 12 #include <string>
13 13
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/strings/string_piece.h"
16 #include "net/quic/core/crypto/crypto_handshake.h" 15 #include "net/quic/core/crypto/crypto_handshake.h"
17 #include "net/quic/core/crypto/crypto_handshake_message.h" 16 #include "net/quic/core/crypto/crypto_handshake_message.h"
18 #include "net/quic/core/crypto/crypto_protocol.h" 17 #include "net/quic/core/crypto/crypto_protocol.h"
19 #include "net/quic/core/quic_packets.h" 18 #include "net/quic/core/quic_packets.h"
20 #include "net/quic/core/quic_time.h" 19 #include "net/quic/core/quic_time.h"
21 #include "net/quic/platform/api/quic_export.h" 20 #include "net/quic/platform/api/quic_export.h"
21 #include "net/quic/platform/api/quic_string_piece.h"
22 22
23 namespace net { 23 namespace net {
24 24
25 class QuicRandom; 25 class QuicRandom;
26 26
27 class QUIC_EXPORT_PRIVATE CryptoUtils { 27 class QUIC_EXPORT_PRIVATE CryptoUtils {
28 public: 28 public:
29 // Diversification is a utility class that's used to act like a union type. 29 // Diversification is a utility class that's used to act like a union type.
30 // Values can be created by calling the functions like |NoDiversification|, 30 // Values can be created by calling the functions like |NoDiversification|,
31 // below. 31 // below.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 Mode mode_; 67 Mode mode_;
68 DiversificationNonce* nonce_; 68 DiversificationNonce* nonce_;
69 }; 69 };
70 70
71 // Generates the connection nonce. The nonce is formed as: 71 // Generates the connection nonce. The nonce is formed as:
72 // <4 bytes> current time 72 // <4 bytes> current time
73 // <8 bytes> |orbit| (or random if |orbit| is empty) 73 // <8 bytes> |orbit| (or random if |orbit| is empty)
74 // <20 bytes> random 74 // <20 bytes> random
75 static void GenerateNonce(QuicWallTime now, 75 static void GenerateNonce(QuicWallTime now,
76 QuicRandom* random_generator, 76 QuicRandom* random_generator,
77 base::StringPiece orbit, 77 QuicStringPiece orbit,
78 std::string* nonce); 78 std::string* nonce);
79 79
80 // DeriveKeys populates |crypters->encrypter|, |crypters->decrypter|, and 80 // DeriveKeys populates |crypters->encrypter|, |crypters->decrypter|, and
81 // |subkey_secret| (optional -- may be null) given the contents of 81 // |subkey_secret| (optional -- may be null) given the contents of
82 // |premaster_secret|, |client_nonce|, |server_nonce| and |hkdf_input|. |aead| 82 // |premaster_secret|, |client_nonce|, |server_nonce| and |hkdf_input|. |aead|
83 // determines which cipher will be used. |perspective| controls whether the 83 // determines which cipher will be used. |perspective| controls whether the
84 // server's keys are assigned to |encrypter| or |decrypter|. |server_nonce| is 84 // server's keys are assigned to |encrypter| or |decrypter|. |server_nonce| is
85 // optional and, if non-empty, is mixed into the key derivation. 85 // optional and, if non-empty, is mixed into the key derivation.
86 // |subkey_secret| will have the same length as |premaster_secret|. 86 // |subkey_secret| will have the same length as |premaster_secret|.
87 // 87 //
88 // If the mode of |diversification| is NEVER, the the crypters will be 88 // If the mode of |diversification| is NEVER, the the crypters will be
89 // configured to never perform key diversification. If the mode is 89 // configured to never perform key diversification. If the mode is
90 // NOW (which is only for servers, then the encrypter will be keyed via a 90 // NOW (which is only for servers, then the encrypter will be keyed via a
91 // two-step process that uses the nonce from |diversification|. 91 // two-step process that uses the nonce from |diversification|.
92 // If the mode is PENDING (which is only for servres), then the 92 // If the mode is PENDING (which is only for servres), then the
93 // decrypter will only be keyed to a preliminary state: a call to 93 // decrypter will only be keyed to a preliminary state: a call to
94 // |SetDiversificationNonce| with a diversification nonce will be needed to 94 // |SetDiversificationNonce| with a diversification nonce will be needed to
95 // complete keying. 95 // complete keying.
96 static bool DeriveKeys(base::StringPiece premaster_secret, 96 static bool DeriveKeys(QuicStringPiece premaster_secret,
97 QuicTag aead, 97 QuicTag aead,
98 base::StringPiece client_nonce, 98 QuicStringPiece client_nonce,
99 base::StringPiece server_nonce, 99 QuicStringPiece server_nonce,
100 const std::string& hkdf_input, 100 const std::string& hkdf_input,
101 Perspective perspective, 101 Perspective perspective,
102 Diversification diversification, 102 Diversification diversification,
103 CrypterPair* crypters, 103 CrypterPair* crypters,
104 std::string* subkey_secret); 104 std::string* subkey_secret);
105 105
106 // Performs key extraction to derive a new secret of |result_len| bytes 106 // Performs key extraction to derive a new secret of |result_len| bytes
107 // dependent on |subkey_secret|, |label|, and |context|. Returns false if the 107 // dependent on |subkey_secret|, |label|, and |context|. Returns false if the
108 // parameters are invalid (e.g. |label| contains null bytes); returns true on 108 // parameters are invalid (e.g. |label| contains null bytes); returns true on
109 // success. 109 // success.
110 static bool ExportKeyingMaterial(base::StringPiece subkey_secret, 110 static bool ExportKeyingMaterial(QuicStringPiece subkey_secret,
111 base::StringPiece label, 111 QuicStringPiece label,
112 base::StringPiece context, 112 QuicStringPiece context,
113 size_t result_len, 113 size_t result_len,
114 std::string* result); 114 std::string* result);
115 115
116 // Computes the FNV-1a hash of the provided DER-encoded cert for use in the 116 // Computes the FNV-1a hash of the provided DER-encoded cert for use in the
117 // XLCT tag. 117 // XLCT tag.
118 static uint64_t ComputeLeafCertHash(base::StringPiece cert); 118 static uint64_t ComputeLeafCertHash(QuicStringPiece cert);
119 119
120 // Validates that |server_hello| is actually an SHLO message and that it is 120 // Validates that |server_hello| is actually an SHLO message and that it is
121 // not part of a downgrade attack. 121 // not part of a downgrade attack.
122 // 122 //
123 // Returns QUIC_NO_ERROR if this is the case or returns the appropriate error 123 // Returns QUIC_NO_ERROR if this is the case or returns the appropriate error
124 // code and sets |error_details|. 124 // code and sets |error_details|.
125 static QuicErrorCode ValidateServerHello( 125 static QuicErrorCode ValidateServerHello(
126 const CryptoHandshakeMessage& server_hello, 126 const CryptoHandshakeMessage& server_hello,
127 const QuicVersionVector& negotiated_versions, 127 const QuicVersionVector& negotiated_versions,
128 std::string* error_details); 128 std::string* error_details);
(...skipping 18 matching lines...) Expand all
147 static void HashHandshakeMessage(const CryptoHandshakeMessage& message, 147 static void HashHandshakeMessage(const CryptoHandshakeMessage& message,
148 std::string* output); 148 std::string* output);
149 149
150 private: 150 private:
151 DISALLOW_COPY_AND_ASSIGN(CryptoUtils); 151 DISALLOW_COPY_AND_ASSIGN(CryptoUtils);
152 }; 152 };
153 153
154 } // namespace net 154 } // namespace net
155 155
156 #endif // NET_QUIC_CORE_CRYPTO_CRYPTO_UTILS_H_ 156 #endif // NET_QUIC_CORE_CRYPTO_CRYPTO_UTILS_H_
OLDNEW
« no previous file with comments | « net/quic/core/crypto/crypto_server_test.cc ('k') | net/quic/core/crypto/crypto_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698