summaryrefslogtreecommitdiffstats
path: root/content/common
diff options
context:
space:
mode:
authoralcutter@google.com <alcutter@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-29 00:02:12 +0000
committeralcutter@google.com <alcutter@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-29 00:02:12 +0000
commit0bbd63b3074d6ed8f65b9c90663b9e2b3b02c25c (patch)
tree5cf02601b0d60415ab65cfca9be171fa6627d753 /content/common
parent580ec6b79c40a7e58e896e4f0063ad9eca5d16a3 (diff)
downloadchromium_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.cc53
-rw-r--r--content/common/ssl_status_serialization.h26
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