OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/common/ssl_status_serialization.h" | 5 #include "content/common/ssl_status_serialization.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
9 | 9 |
10 namespace { | 10 namespace { |
(...skipping 15 matching lines...) Expand all Loading... | |
26 } // namespace | 26 } // namespace |
27 | 27 |
28 namespace content { | 28 namespace content { |
29 | 29 |
30 std::string SerializeSecurityInfo(const SSLStatus& ssl_status) { | 30 std::string SerializeSecurityInfo(const SSLStatus& ssl_status) { |
31 base::Pickle pickle; | 31 base::Pickle pickle; |
32 pickle.WriteInt(ssl_status.security_style); | 32 pickle.WriteInt(ssl_status.security_style); |
33 pickle.WriteInt(ssl_status.cert_id); | 33 pickle.WriteInt(ssl_status.cert_id); |
34 pickle.WriteUInt32(ssl_status.cert_status); | 34 pickle.WriteUInt32(ssl_status.cert_status); |
35 pickle.WriteInt(ssl_status.security_bits); | 35 pickle.WriteInt(ssl_status.security_bits); |
36 pickle.WriteInt(ssl_status.key_exchange_info); | |
estark
2015/08/26 17:46:41
Can you please update the tests in ssl_status_seri
sigbjorn
2015/08/28 09:32:00
Done.
| |
36 pickle.WriteInt(ssl_status.connection_status); | 37 pickle.WriteInt(ssl_status.connection_status); |
37 pickle.WriteInt(ssl_status.signed_certificate_timestamp_ids.size()); | 38 pickle.WriteInt(ssl_status.signed_certificate_timestamp_ids.size()); |
38 for (SignedCertificateTimestampIDStatusList::const_iterator iter = | 39 for (SignedCertificateTimestampIDStatusList::const_iterator iter = |
39 ssl_status.signed_certificate_timestamp_ids.begin(); | 40 ssl_status.signed_certificate_timestamp_ids.begin(); |
40 iter != ssl_status.signed_certificate_timestamp_ids.end(); ++iter) { | 41 iter != ssl_status.signed_certificate_timestamp_ids.end(); ++iter) { |
41 pickle.WriteInt(iter->id); | 42 pickle.WriteInt(iter->id); |
42 pickle.WriteUInt16(iter->status); | 43 pickle.WriteUInt16(iter->status); |
43 } | 44 } |
44 return std::string(static_cast<const char*>(pickle.data()), pickle.size()); | 45 return std::string(static_cast<const char*>(pickle.data()), pickle.size()); |
45 } | 46 } |
46 | 47 |
47 bool DeserializeSecurityInfo(const std::string& state, SSLStatus* ssl_status) { | 48 bool DeserializeSecurityInfo(const std::string& state, SSLStatus* ssl_status) { |
48 *ssl_status = SSLStatus(); | 49 *ssl_status = SSLStatus(); |
49 | 50 |
50 if (state.empty()) { | 51 if (state.empty()) { |
51 // No SSL used. | 52 // No SSL used. |
52 return true; | 53 return true; |
53 } | 54 } |
54 | 55 |
55 base::Pickle pickle(state.data(), static_cast<int>(state.size())); | 56 base::Pickle pickle(state.data(), static_cast<int>(state.size())); |
56 base::PickleIterator iter(pickle); | 57 base::PickleIterator iter(pickle); |
57 int security_style; | 58 int security_style; |
58 int num_scts_to_read; | 59 int num_scts_to_read; |
59 if (!iter.ReadInt(&security_style) || !iter.ReadInt(&ssl_status->cert_id) || | 60 if (!iter.ReadInt(&security_style) || !iter.ReadInt(&ssl_status->cert_id) || |
60 !iter.ReadUInt32(&ssl_status->cert_status) || | 61 !iter.ReadUInt32(&ssl_status->cert_status) || |
61 !iter.ReadInt(&ssl_status->security_bits) || | 62 !iter.ReadInt(&ssl_status->security_bits) || |
63 !iter.ReadInt(&ssl_status->key_exchange_info) || | |
62 !iter.ReadInt(&ssl_status->connection_status) || | 64 !iter.ReadInt(&ssl_status->connection_status) || |
63 !iter.ReadInt(&num_scts_to_read)) { | 65 !iter.ReadInt(&num_scts_to_read)) { |
64 *ssl_status = SSLStatus(); | 66 *ssl_status = SSLStatus(); |
65 return false; | 67 return false; |
66 } | 68 } |
67 | 69 |
68 if (!CheckSecurityStyle(security_style)) { | 70 if (!CheckSecurityStyle(security_style)) { |
69 *ssl_status = SSLStatus(); | 71 *ssl_status = SSLStatus(); |
70 return false; | 72 return false; |
71 } | 73 } |
72 | 74 |
73 ssl_status->security_style = static_cast<SecurityStyle>(security_style); | 75 ssl_status->security_style = static_cast<SecurityStyle>(security_style); |
74 | 76 |
75 // Sanity check |security_bits|: the only allowed negative value is -1. | 77 // Sanity check |security_bits|: the only allowed negative value is -1. |
estark
2015/08/26 17:46:42
Can you do a similar sanity check for |key_exchang
sigbjorn
2015/08/28 09:32:00
Done.
| |
76 if (ssl_status->security_bits < -1) { | 78 if (ssl_status->security_bits < -1) { |
77 *ssl_status = SSLStatus(); | 79 *ssl_status = SSLStatus(); |
78 return false; | 80 return false; |
79 } | 81 } |
80 | 82 |
81 for (; num_scts_to_read > 0; --num_scts_to_read) { | 83 for (; num_scts_to_read > 0; --num_scts_to_read) { |
82 int id; | 84 int id; |
83 uint16 status; | 85 uint16 status; |
84 if (!iter.ReadInt(&id) || !iter.ReadUInt16(&status)) { | 86 if (!iter.ReadInt(&id) || !iter.ReadUInt16(&status)) { |
85 *ssl_status = SSLStatus(); | 87 *ssl_status = SSLStatus(); |
86 return false; | 88 return false; |
87 } | 89 } |
88 | 90 |
89 ssl_status->signed_certificate_timestamp_ids.push_back( | 91 ssl_status->signed_certificate_timestamp_ids.push_back( |
90 SignedCertificateTimestampIDAndStatus( | 92 SignedCertificateTimestampIDAndStatus( |
91 id, static_cast<net::ct::SCTVerifyStatus>(status))); | 93 id, static_cast<net::ct::SCTVerifyStatus>(status))); |
92 } | 94 } |
93 | 95 |
94 return true; | 96 return true; |
95 } | 97 } |
96 | 98 |
97 } // namespace content | 99 } // namespace content |
OLD | NEW |