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 content { | 10 namespace content { |
11 | 11 |
12 std::string SerializeSecurityInfo(int cert_id, | 12 std::string SerializeSecurityInfo(int cert_id, |
13 net::CertStatus cert_status, | 13 net::CertStatus cert_status, |
14 int security_bits, | 14 int security_bits, |
15 int ssl_connection_status) { | 15 int ssl_connection_status, |
16 const SignedCertificateTimestampIDStatusList& | |
17 signed_certificate_timestamp_ids) { | |
wtc
2013/11/28 16:15:07
Nit: We should reformat the parameter lists of the
alcutter
2013/11/28 16:42:18
Done.
| |
16 Pickle pickle; | 18 Pickle pickle; |
17 pickle.WriteInt(cert_id); | 19 pickle.WriteInt(cert_id); |
18 pickle.WriteUInt32(cert_status); | 20 pickle.WriteUInt32(cert_status); |
19 pickle.WriteInt(security_bits); | 21 pickle.WriteInt(security_bits); |
20 pickle.WriteInt(ssl_connection_status); | 22 pickle.WriteInt(ssl_connection_status); |
23 pickle.WriteInt(signed_certificate_timestamp_ids.size()); | |
24 for (SignedCertificateTimestampIDStatusList::const_iterator iter = | |
25 signed_certificate_timestamp_ids.begin(); | |
26 iter != signed_certificate_timestamp_ids.end(); ++iter) { | |
27 pickle.WriteInt(iter->id); | |
28 pickle.WriteUInt16(iter->status); | |
29 } | |
21 return std::string(static_cast<const char*>(pickle.data()), pickle.size()); | 30 return std::string(static_cast<const char*>(pickle.data()), pickle.size()); |
22 } | 31 } |
23 | 32 |
24 bool DeserializeSecurityInfo(const std::string& state, | 33 bool DeserializeSecurityInfo(const std::string& state, |
25 int* cert_id, | 34 int* cert_id, |
26 net::CertStatus* cert_status, | 35 net::CertStatus* cert_status, |
27 int* security_bits, | 36 int* security_bits, |
28 int* ssl_connection_status) { | 37 int* ssl_connection_status, |
29 DCHECK(cert_id && cert_status && security_bits && ssl_connection_status); | 38 SignedCertificateTimestampIDStatusList* |
39 signed_certificate_timestamp_ids) { | |
40 DCHECK(cert_id && cert_status && security_bits && ssl_connection_status && | |
41 signed_certificate_timestamp_ids); | |
30 if (state.empty()) { | 42 if (state.empty()) { |
31 // No SSL used. | 43 // No SSL used. |
32 *cert_id = 0; | 44 *cert_id = 0; |
33 // The following are not applicable and are set to the default values. | 45 // The following are not applicable and are set to the default values. |
34 *cert_status = 0; | 46 *cert_status = 0; |
35 *security_bits = -1; | 47 *security_bits = -1; |
36 *ssl_connection_status = 0; | 48 *ssl_connection_status = 0; |
49 signed_certificate_timestamp_ids->clear(); | |
37 return false; | 50 return false; |
38 } | 51 } |
39 | 52 |
40 Pickle pickle(state.data(), static_cast<int>(state.size())); | 53 Pickle pickle(state.data(), static_cast<int>(state.size())); |
41 PickleIterator iter(pickle); | 54 PickleIterator iter(pickle); |
42 return pickle.ReadInt(&iter, cert_id) && | 55 bool pickle_read_ok = pickle.ReadInt(&iter, cert_id) && |
43 pickle.ReadUInt32(&iter, cert_status) && | 56 pickle.ReadUInt32(&iter, cert_status) && |
44 pickle.ReadInt(&iter, security_bits) && | 57 pickle.ReadInt(&iter, security_bits) && |
45 pickle.ReadInt(&iter, ssl_connection_status); | 58 pickle.ReadInt(&iter, ssl_connection_status); |
59 if (!pickle_read_ok) | |
60 return pickle_read_ok; | |
61 | |
62 int num_scts_to_read; | |
63 pickle_read_ok = pickle.ReadInt(&iter, &num_scts_to_read); | |
64 int id; | |
65 uint16 status; | |
66 for (; num_scts_to_read > 0 && pickle_read_ok; --num_scts_to_read) { | |
wtc
2013/11/28 16:15:07
We should check pickle_read_ok before num_scts_to_
alcutter
2013/11/28 16:42:18
Yes, good catch.
| |
67 pickle_read_ok &= pickle.ReadInt(&iter, &id) && | |
wtc
2013/11/28 16:15:07
Change "&=" to "=". If we get here, pickle_read_ok
alcutter
2013/11/28 16:42:18
Done.
| |
68 pickle.ReadUInt16(&iter, &status); | |
69 if (pickle_read_ok) | |
70 signed_certificate_timestamp_ids->push_back( | |
71 SignedCertificateTimestampIDAndStatus( | |
72 id, | |
73 static_cast<net::ct::SCTVerifyStatus>(status))); | |
wtc
2013/11/28 16:15:07
Nit: add curly braces around this if statement bec
alcutter
2013/11/28 16:42:18
Done.
| |
74 } | |
75 | |
76 return pickle_read_ok; | |
46 } | 77 } |
47 | 78 |
48 } // namespace content | 79 } // namespace content |
OLD | NEW |