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/crypto/crypto_handshake.h" | 5 #include "net/quic/crypto/crypto_handshake.h" |
6 | 6 |
7 #include <ctype.h> | 7 #include <ctype.h> |
8 | 8 |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
463 if (!has_changed) { | 463 if (!has_changed) { |
464 return; | 464 return; |
465 } | 465 } |
466 | 466 |
467 // If the proof has changed then it needs to be revalidated. | 467 // If the proof has changed then it needs to be revalidated. |
468 SetProofInvalid(); | 468 SetProofInvalid(); |
469 certs_ = certs; | 469 certs_ = certs; |
470 server_config_sig_ = signature.as_string(); | 470 server_config_sig_ = signature.as_string(); |
471 } | 471 } |
472 | 472 |
473 void QuicCryptoClientConfig::CachedState::ClearProof() { | |
474 SetProofInvalid(); | |
475 certs_.clear(); | |
476 server_config_sig_.clear(); | |
477 } | |
478 | |
473 void QuicCryptoClientConfig::CachedState::SetProofValid() { | 479 void QuicCryptoClientConfig::CachedState::SetProofValid() { |
474 server_config_valid_ = true; | 480 server_config_valid_ = true; |
475 } | 481 } |
476 | 482 |
477 void QuicCryptoClientConfig::CachedState::SetProofInvalid() { | 483 void QuicCryptoClientConfig::CachedState::SetProofInvalid() { |
478 server_config_valid_ = false; | 484 server_config_valid_ = false; |
479 ++generation_counter_; | 485 ++generation_counter_; |
480 } | 486 } |
481 | 487 |
482 const string& QuicCryptoClientConfig::CachedState::server_config() const { | 488 const string& QuicCryptoClientConfig::CachedState::server_config() const { |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
815 if (rej.GetStringPiece(kSourceAddressTokenTag, &token)) { | 821 if (rej.GetStringPiece(kSourceAddressTokenTag, &token)) { |
816 cached->set_source_address_token(token); | 822 cached->set_source_address_token(token); |
817 } | 823 } |
818 | 824 |
819 StringPiece nonce; | 825 StringPiece nonce; |
820 if (rej.GetStringPiece(kServerNonceTag, &nonce)) { | 826 if (rej.GetStringPiece(kServerNonceTag, &nonce)) { |
821 out_params->server_nonce = nonce.as_string(); | 827 out_params->server_nonce = nonce.as_string(); |
822 } | 828 } |
823 | 829 |
824 StringPiece proof, cert_bytes; | 830 StringPiece proof, cert_bytes; |
825 if (rej.GetStringPiece(kPROF, &proof) && | 831 bool has_proof = rej.GetStringPiece(kPROF, &proof); |
826 rej.GetStringPiece(kCertificateTag, &cert_bytes)) { | 832 bool has_cert = rej.GetStringPiece(kCertificateTag, &cert_bytes); |
833 if (has_proof && has_cert) { | |
827 vector<string> certs; | 834 vector<string> certs; |
828 if (!CertCompressor::DecompressChain(cert_bytes, out_params->cached_certs, | 835 if (!CertCompressor::DecompressChain(cert_bytes, out_params->cached_certs, |
829 common_cert_sets, &certs)) { | 836 common_cert_sets, &certs)) { |
830 *error_details = "Certificate data invalid"; | 837 *error_details = "Certificate data invalid"; |
wtc
2013/08/15 16:33:05
It seems that we should also call cached->ClearPro
| |
831 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; | 838 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; |
832 } | 839 } |
833 | 840 |
834 cached->SetProof(certs, proof); | 841 cached->SetProof(certs, proof); |
842 } else { | |
843 cached->ClearProof(); | |
844 if (has_proof && !has_cert) { | |
845 *error_details = "Certificate missing"; | |
846 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; | |
847 } | |
848 | |
849 if (!has_proof && has_cert) { | |
850 *error_details = "Proof missing"; | |
851 return QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER; | |
852 } | |
835 } | 853 } |
836 | 854 |
837 return QUIC_NO_ERROR; | 855 return QUIC_NO_ERROR; |
838 } | 856 } |
839 | 857 |
840 QuicErrorCode QuicCryptoClientConfig::ProcessServerHello( | 858 QuicErrorCode QuicCryptoClientConfig::ProcessServerHello( |
841 const CryptoHandshakeMessage& server_hello, | 859 const CryptoHandshakeMessage& server_hello, |
842 QuicGuid guid, | 860 QuicGuid guid, |
843 QuicCryptoNegotiatedParameters* out_params, | 861 QuicCryptoNegotiatedParameters* out_params, |
844 string* error_details) { | 862 string* error_details) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
888 | 906 |
889 ChannelIDSigner* QuicCryptoClientConfig::channel_id_signer() const { | 907 ChannelIDSigner* QuicCryptoClientConfig::channel_id_signer() const { |
890 return channel_id_signer_.get(); | 908 return channel_id_signer_.get(); |
891 } | 909 } |
892 | 910 |
893 void QuicCryptoClientConfig::SetChannelIDSigner(ChannelIDSigner* signer) { | 911 void QuicCryptoClientConfig::SetChannelIDSigner(ChannelIDSigner* signer) { |
894 channel_id_signer_.reset(signer); | 912 channel_id_signer_.reset(signer); |
895 } | 913 } |
896 | 914 |
897 } // namespace net | 915 } // namespace net |
OLD | NEW |