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) { | |
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) { | |
Eran M. (Google)
2013/11/26 21:33:22
nit: You could return here if the previous reads f
alcutter
2013/11/26 23:00:05
Done.
| |
60 int num_scts_to_read; | |
61 pickle_read_ok = pickle.ReadInt(&iter, &num_scts_to_read); | |
62 int id; | |
63 net::SignedCertificateTimestampVerificationStatus status; | |
64 for (; num_scts_to_read > 0 && pickle_read_ok; --num_scts_to_read) { | |
65 pickle_read_ok &= pickle.ReadInt(&iter, &id) && | |
66 pickle.ReadUInt16(&iter, &status); | |
67 if (pickle_read_ok) | |
68 signed_certificate_timestamp_ids->push_back( | |
69 content::SignedCertificateTimestampIDAndStatus(id, status)); | |
70 } | |
71 } | |
72 | |
73 return pickle_read_ok; | |
46 } | 74 } |
47 | 75 |
48 } // namespace content | 76 } // namespace content |
OLD | NEW |