signed_certificate_timestamp.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/cert/signed_certificate_timestamp.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/pickle.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ct {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SignedCertificateTimestamp::LessThan::operator()(
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const scoped_refptr<SignedCertificateTimestamp>& lhs,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const scoped_refptr<SignedCertificateTimestamp>& rhs) const {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (lhs.get() == rhs.get())
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (lhs->signature.signature_data != rhs->signature.signature_data)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return lhs->signature.signature_data < rhs->signature.signature_data;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (lhs->log_id != rhs->log_id)
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return lhs->log_id < rhs->log_id;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (lhs->timestamp != rhs->timestamp)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return lhs->timestamp < rhs->timestamp;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (lhs->extensions != rhs->extensions)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return lhs->extensions < rhs->extensions;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return lhs->version < rhs->version;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SignedCertificateTimestamp::SignedCertificateTimestamp() {}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SignedCertificateTimestamp::~SignedCertificateTimestamp() {}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SignedCertificateTimestamp::Persist(Pickle* pickle) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteInt(version));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteString(log_id));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteInt64(timestamp.ToInternalValue()));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteString(extensions));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteInt(signature.hash_algorithm));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteInt(signature.signature_algorithm));
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteString(signature.signature_data));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteInt(origin));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(pickle->WriteString(log_description));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<SignedCertificateTimestamp>
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SignedCertificateTimestamp::CreateFromPickle(PickleIterator* iter) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int version;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 timestamp;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int hash_algorithm;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int sig_algorithm;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<SignedCertificateTimestamp> sct(
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new SignedCertificateTimestamp());
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int origin;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // string values are set directly
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!(iter->ReadInt(&version) &&
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadString(&sct->log_id) &&
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadInt64(&timestamp) &&
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadString(&sct->extensions) &&
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadInt(&hash_algorithm) &&
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadInt(&sig_algorithm) &&
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadString(&sct->signature.signature_data) &&
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadInt(&origin) &&
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        iter->ReadString(&sct->log_description))) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now set the rest of the member variables:
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sct->version = static_cast<Version>(version);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sct->timestamp = base::Time::FromInternalValue(timestamp);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sct->signature.hash_algorithm =
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      static_cast<DigitallySigned::HashAlgorithm>(hash_algorithm);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sct->signature.signature_algorithm =
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      static_cast<DigitallySigned::SignatureAlgorithm>(sig_algorithm);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sct->origin = static_cast<Origin>(origin);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return sct;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LogEntry::LogEntry() {}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LogEntry::~LogEntry() {}
81
82void LogEntry::Reset() {
83  type = LogEntry::LOG_ENTRY_TYPE_X509;
84  leaf_certificate.clear();
85  tbs_certificate.clear();
86}
87
88DigitallySigned::DigitallySigned() {}
89
90DigitallySigned::~DigitallySigned() {}
91
92}  // namespace ct
93
94}  // namespace net
95