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

Side by Side Diff: net/quic/core/crypto/aead_base_encrypter.cc

Issue 2867693004: Snapshot of all changes to get jumbo in blink and content.
Patch Set: Exclude certain files from jumbo because of a Windows problem Created 3 years, 3 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
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 #include "net/quic/core/crypto/aead_base_encrypter.h" 5 #include "net/quic/core/crypto/aead_base_encrypter.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "net/quic/core/quic_utils.h" 9 #include "net/quic/core/quic_utils.h"
10 #include "net/quic/platform/api/quic_aligned.h" 10 #include "net/quic/platform/api/quic_aligned.h"
11 #include "net/quic/platform/api/quic_logging.h" 11 #include "net/quic/platform/api/quic_logging.h"
12 #include "third_party/boringssl/src/include/openssl/err.h" 12 #include "third_party/boringssl/src/include/openssl/err.h"
13 #include "third_party/boringssl/src/include/openssl/evp.h" 13 #include "third_party/boringssl/src/include/openssl/evp.h"
14 14
15 namespace net { 15 namespace net {
16 16
17 namespace { 17 namespace {
18 18
19 // The maximum size in bytes of the nonce, including 8 bytes of sequence number. 19 // The maximum size in bytes of the nonce, including 8 bytes of sequence number.
20 // ChaCha20 uses only the 8 byte sequence number and AES-GCM uses 12 bytes. 20 // ChaCha20 uses only the 8 byte sequence number and AES-GCM uses 12 bytes.
21 const size_t kMaxNonceSize = 12; 21 const size_t kMaxNonceSize = 12;
22 22
23 // In debug builds only, log OpenSSL error stack. Then clear OpenSSL error 23 // In debug builds only, log OpenSSL error stack. Then clear OpenSSL error
24 // stack. 24 // stack.
25 void DLogOpenSslErrors() { 25 void DLogOpenSslErrors2() {
26 #ifdef NDEBUG 26 #ifdef NDEBUG
27 while (ERR_get_error()) { 27 while (ERR_get_error()) {
28 } 28 }
29 #else 29 #else
30 while (unsigned long error = ERR_get_error()) { 30 while (unsigned long error = ERR_get_error()) {
31 char buf[120]; 31 char buf[120];
32 ERR_error_string_n(error, buf, arraysize(buf)); 32 ERR_error_string_n(error, buf, arraysize(buf));
33 QUIC_DLOG(ERROR) << "OpenSSL error: " << buf; 33 QUIC_DLOG(ERROR) << "OpenSSL error: " << buf;
34 } 34 }
35 #endif 35 #endif
(...skipping 20 matching lines...) Expand all
56 DCHECK_EQ(key.size(), key_size_); 56 DCHECK_EQ(key.size(), key_size_);
57 if (key.size() != key_size_) { 57 if (key.size() != key_size_) {
58 return false; 58 return false;
59 } 59 }
60 memcpy(key_, key.data(), key.size()); 60 memcpy(key_, key.data(), key.size());
61 61
62 EVP_AEAD_CTX_cleanup(ctx_.get()); 62 EVP_AEAD_CTX_cleanup(ctx_.get());
63 63
64 if (!EVP_AEAD_CTX_init(ctx_.get(), aead_alg_, key_, key_size_, auth_tag_size_, 64 if (!EVP_AEAD_CTX_init(ctx_.get(), aead_alg_, key_, key_size_, auth_tag_size_,
65 nullptr)) { 65 nullptr)) {
66 DLogOpenSslErrors(); 66 DLogOpenSslErrors2();
67 return false; 67 return false;
68 } 68 }
69 69
70 return true; 70 return true;
71 } 71 }
72 72
73 bool AeadBaseEncrypter::SetNoncePrefix(QuicStringPiece nonce_prefix) { 73 bool AeadBaseEncrypter::SetNoncePrefix(QuicStringPiece nonce_prefix) {
74 DCHECK_EQ(nonce_prefix.size(), nonce_prefix_size_); 74 DCHECK_EQ(nonce_prefix.size(), nonce_prefix_size_);
75 if (nonce_prefix.size() != nonce_prefix_size_) { 75 if (nonce_prefix.size() != nonce_prefix_size_) {
76 return false; 76 return false;
77 } 77 }
78 memcpy(nonce_prefix_, nonce_prefix.data(), nonce_prefix.size()); 78 memcpy(nonce_prefix_, nonce_prefix.data(), nonce_prefix.size());
79 return true; 79 return true;
80 } 80 }
81 81
82 bool AeadBaseEncrypter::Encrypt(QuicStringPiece nonce, 82 bool AeadBaseEncrypter::Encrypt(QuicStringPiece nonce,
83 QuicStringPiece associated_data, 83 QuicStringPiece associated_data,
84 QuicStringPiece plaintext, 84 QuicStringPiece plaintext,
85 unsigned char* output) { 85 unsigned char* output) {
86 DCHECK_EQ(nonce.size(), nonce_prefix_size_ + sizeof(QuicPacketNumber)); 86 DCHECK_EQ(nonce.size(), nonce_prefix_size_ + sizeof(QuicPacketNumber));
87 87
88 size_t ciphertext_len; 88 size_t ciphertext_len;
89 if (!EVP_AEAD_CTX_seal( 89 if (!EVP_AEAD_CTX_seal(
90 ctx_.get(), output, &ciphertext_len, 90 ctx_.get(), output, &ciphertext_len,
91 plaintext.size() + auth_tag_size_, 91 plaintext.size() + auth_tag_size_,
92 reinterpret_cast<const uint8_t*>(nonce.data()), nonce.size(), 92 reinterpret_cast<const uint8_t*>(nonce.data()), nonce.size(),
93 reinterpret_cast<const uint8_t*>(plaintext.data()), plaintext.size(), 93 reinterpret_cast<const uint8_t*>(plaintext.data()), plaintext.size(),
94 reinterpret_cast<const uint8_t*>(associated_data.data()), 94 reinterpret_cast<const uint8_t*>(associated_data.data()),
95 associated_data.size())) { 95 associated_data.size())) {
96 DLogOpenSslErrors(); 96 DLogOpenSslErrors2();
97 return false; 97 return false;
98 } 98 }
99 99
100 return true; 100 return true;
101 } 101 }
102 102
103 bool AeadBaseEncrypter::EncryptPacket(QuicVersion /*version*/, 103 bool AeadBaseEncrypter::EncryptPacket(QuicVersion /*version*/,
104 QuicPacketNumber packet_number, 104 QuicPacketNumber packet_number,
105 QuicStringPiece associated_data, 105 QuicStringPiece associated_data,
106 QuicStringPiece plaintext, 106 QuicStringPiece plaintext,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 149
150 QuicStringPiece AeadBaseEncrypter::GetNoncePrefix() const { 150 QuicStringPiece AeadBaseEncrypter::GetNoncePrefix() const {
151 if (nonce_prefix_size_ == 0) { 151 if (nonce_prefix_size_ == 0) {
152 return QuicStringPiece(); 152 return QuicStringPiece();
153 } 153 }
154 return QuicStringPiece(reinterpret_cast<const char*>(nonce_prefix_), 154 return QuicStringPiece(reinterpret_cast<const char*>(nonce_prefix_),
155 nonce_prefix_size_); 155 nonce_prefix_size_);
156 } 156 }
157 157
158 } // namespace net 158 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/congestion_control/rtt_stats.cc ('k') | net/quic/core/crypto/crypto_secret_boxer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698