diff options
author | alcutter@google.com <alcutter@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-29 00:02:12 +0000 |
---|---|---|
committer | alcutter@google.com <alcutter@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-29 00:02:12 +0000 |
commit | 0bbd63b3074d6ed8f65b9c90663b9e2b3b02c25c (patch) | |
tree | 5cf02601b0d60415ab65cfca9be171fa6627d753 /content/common | |
parent | 580ec6b79c40a7e58e896e4f0063ad9eca5d16a3 (diff) | |
download | chromium_src-0bbd63b3074d6ed8f65b9c90663b9e2b3b02c25c.zip chromium_src-0bbd63b3074d6ed8f65b9c90663b9e2b3b02c25c.tar.gz chromium_src-0bbd63b3074d6ed8f65b9c90663b9e2b3b02c25c.tar.bz2 |
SignedCertificateTimestamp storing & serialization code.
This patch builds on Eran's CT wiring patch:
https://codereview.chromium.org/76443006/
BUG=309578
Review URL: https://codereview.chromium.org/88643002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237849 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common')
-rw-r--r-- | content/common/ssl_status_serialization.cc | 53 | ||||
-rw-r--r-- | content/common/ssl_status_serialization.h | 26 |
2 files changed, 59 insertions, 20 deletions
diff --git a/content/common/ssl_status_serialization.cc b/content/common/ssl_status_serialization.cc index 87593a5..c15beb8 100644 --- a/content/common/ssl_status_serialization.cc +++ b/content/common/ssl_status_serialization.cc @@ -9,15 +9,25 @@ namespace content { -std::string SerializeSecurityInfo(int cert_id, - net::CertStatus cert_status, - int security_bits, - int ssl_connection_status) { +std::string SerializeSecurityInfo( + int cert_id, + net::CertStatus cert_status, + int security_bits, + int ssl_connection_status, + const SignedCertificateTimestampIDStatusList& + signed_certificate_timestamp_ids) { Pickle pickle; pickle.WriteInt(cert_id); pickle.WriteUInt32(cert_status); pickle.WriteInt(security_bits); pickle.WriteInt(ssl_connection_status); + pickle.WriteInt(signed_certificate_timestamp_ids.size()); + for (SignedCertificateTimestampIDStatusList::const_iterator iter = + signed_certificate_timestamp_ids.begin(); + iter != signed_certificate_timestamp_ids.end(); ++iter) { + pickle.WriteInt(iter->id); + pickle.WriteUInt16(iter->status); + } return std::string(static_cast<const char*>(pickle.data()), pickle.size()); } @@ -25,8 +35,11 @@ bool DeserializeSecurityInfo(const std::string& state, int* cert_id, net::CertStatus* cert_status, int* security_bits, - int* ssl_connection_status) { - DCHECK(cert_id && cert_status && security_bits && ssl_connection_status); + int* ssl_connection_status, + SignedCertificateTimestampIDStatusList* + signed_certificate_timestamp_ids) { + DCHECK(cert_id && cert_status && security_bits && ssl_connection_status && + signed_certificate_timestamp_ids); if (state.empty()) { // No SSL used. *cert_id = 0; @@ -34,15 +47,35 @@ bool DeserializeSecurityInfo(const std::string& state, *cert_status = 0; *security_bits = -1; *ssl_connection_status = 0; + signed_certificate_timestamp_ids->clear(); return false; } Pickle pickle(state.data(), static_cast<int>(state.size())); PickleIterator iter(pickle); - return pickle.ReadInt(&iter, cert_id) && - pickle.ReadUInt32(&iter, cert_status) && - pickle.ReadInt(&iter, security_bits) && - pickle.ReadInt(&iter, ssl_connection_status); + bool pickle_read_ok = pickle.ReadInt(&iter, cert_id) && + pickle.ReadUInt32(&iter, cert_status) && + pickle.ReadInt(&iter, security_bits) && + pickle.ReadInt(&iter, ssl_connection_status); + if (!pickle_read_ok) + return pickle_read_ok; + + int num_scts_to_read; + pickle_read_ok = pickle.ReadInt(&iter, &num_scts_to_read); + int id; + uint16 status; + for (; pickle_read_ok && num_scts_to_read > 0; --num_scts_to_read) { + pickle_read_ok = pickle.ReadInt(&iter, &id) && + pickle.ReadUInt16(&iter, &status); + if (pickle_read_ok) { + signed_certificate_timestamp_ids->push_back( + SignedCertificateTimestampIDAndStatus( + id, + static_cast<net::ct::SCTVerifyStatus>(status))); + } + } + + return pickle_read_ok; } } // namespace content diff --git a/content/common/ssl_status_serialization.h b/content/common/ssl_status_serialization.h index fa1230b..03675c1 100644 --- a/content/common/ssl_status_serialization.h +++ b/content/common/ssl_status_serialization.h @@ -8,21 +8,27 @@ #include <string> #include "content/common/content_export.h" +#include "content/public/common/signed_certificate_timestamp_id_and_status.h" #include "net/cert/cert_status_flags.h" namespace content { // Convenience methods for serializing/deserializing the security info. -CONTENT_EXPORT std::string SerializeSecurityInfo(int cert_id, - net::CertStatus cert_status, - int security_bits, - int connection_status); - -bool DeserializeSecurityInfo(const std::string& state, - int* cert_id, - net::CertStatus* cert_status, - int* security_bits, - int* connection_status); +CONTENT_EXPORT std::string SerializeSecurityInfo( + int cert_id, + net::CertStatus cert_status, + int security_bits, + int connection_status, + const SignedCertificateTimestampIDStatusList& + signed_certificate_timestamp_ids); + +bool DeserializeSecurityInfo( + const std::string& state, + int* cert_id, + net::CertStatus* cert_status, + int* security_bits, + int* connection_status, + SignedCertificateTimestampIDStatusList* signed_certificate_timestamp_ids); } // namespace content |