signed_certificate_timestamp.cc 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "net/cert/signed_certificate_timestamp.h"
  5. #include "base/pickle.h"
  6. namespace net::ct {
  7. bool SignedCertificateTimestamp::LessThan::operator()(
  8. const scoped_refptr<SignedCertificateTimestamp>& lhs,
  9. const scoped_refptr<SignedCertificateTimestamp>& rhs) const {
  10. if (lhs.get() == rhs.get())
  11. return false;
  12. if (lhs->signature.signature_data != rhs->signature.signature_data)
  13. return lhs->signature.signature_data < rhs->signature.signature_data;
  14. if (lhs->log_id != rhs->log_id)
  15. return lhs->log_id < rhs->log_id;
  16. if (lhs->timestamp != rhs->timestamp)
  17. return lhs->timestamp < rhs->timestamp;
  18. if (lhs->extensions != rhs->extensions)
  19. return lhs->extensions < rhs->extensions;
  20. if (lhs->origin != rhs->origin)
  21. return lhs->origin < rhs->origin;
  22. return lhs->version < rhs->version;
  23. }
  24. SignedCertificateTimestamp::SignedCertificateTimestamp() = default;
  25. SignedCertificateTimestamp::~SignedCertificateTimestamp() = default;
  26. void SignedCertificateTimestamp::Persist(base::Pickle* pickle) {
  27. pickle->WriteInt(version);
  28. pickle->WriteString(log_id);
  29. pickle->WriteInt64(timestamp.ToInternalValue());
  30. pickle->WriteString(extensions);
  31. pickle->WriteInt(signature.hash_algorithm);
  32. pickle->WriteInt(signature.signature_algorithm);
  33. pickle->WriteString(signature.signature_data);
  34. pickle->WriteInt(origin);
  35. pickle->WriteString(log_description);
  36. }
  37. // static
  38. scoped_refptr<SignedCertificateTimestamp>
  39. SignedCertificateTimestamp::CreateFromPickle(base::PickleIterator* iter) {
  40. int version;
  41. int64_t timestamp;
  42. int hash_algorithm;
  43. int sig_algorithm;
  44. auto sct = base::MakeRefCounted<SignedCertificateTimestamp>();
  45. int origin;
  46. // string values are set directly
  47. if (!(iter->ReadInt(&version) &&
  48. iter->ReadString(&sct->log_id) &&
  49. iter->ReadInt64(&timestamp) &&
  50. iter->ReadString(&sct->extensions) &&
  51. iter->ReadInt(&hash_algorithm) &&
  52. iter->ReadInt(&sig_algorithm) &&
  53. iter->ReadString(&sct->signature.signature_data) &&
  54. iter->ReadInt(&origin) &&
  55. iter->ReadString(&sct->log_description))) {
  56. return nullptr;
  57. }
  58. // Now set the rest of the member variables:
  59. sct->version = static_cast<Version>(version);
  60. sct->timestamp = base::Time::FromInternalValue(timestamp);
  61. sct->signature.hash_algorithm =
  62. static_cast<DigitallySigned::HashAlgorithm>(hash_algorithm);
  63. sct->signature.signature_algorithm =
  64. static_cast<DigitallySigned::SignatureAlgorithm>(sig_algorithm);
  65. sct->origin = static_cast<Origin>(origin);
  66. return sct;
  67. }
  68. SignedEntryData::SignedEntryData() = default;
  69. SignedEntryData::~SignedEntryData() = default;
  70. void SignedEntryData::Reset() {
  71. type = SignedEntryData::LOG_ENTRY_TYPE_X509;
  72. leaf_certificate.clear();
  73. tbs_certificate.clear();
  74. }
  75. DigitallySigned::DigitallySigned() = default;
  76. DigitallySigned::~DigitallySigned() = default;
  77. bool DigitallySigned::SignatureParametersMatch(
  78. HashAlgorithm other_hash_algorithm,
  79. SignatureAlgorithm other_signature_algorithm) const {
  80. return (hash_algorithm == other_hash_algorithm) &&
  81. (signature_algorithm == other_signature_algorithm);
  82. }
  83. } // namespace net::ct