| Index: net/cert/ct_trans_item.cc
|
| diff --git a/net/cert/ct_trans_item.cc b/net/cert/ct_trans_item.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d31ff274ba22293eb7c0439dd85af9bb409e99fd
|
| --- /dev/null
|
| +++ b/net/cert/ct_trans_item.cc
|
| @@ -0,0 +1,160 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "net/cert/ct_trans_item.h"
|
| +
|
| +#include "net/cert/merkle_consistency_proof.h"
|
| +#include "net/cert/signed_certificate_timestamp.h"
|
| +#include "net/cert/signed_tree_head.h"
|
| +
|
| +namespace net {
|
| +namespace ct {
|
| +
|
| +std::ostream& operator<<(std::ostream& stream, const TransType& type) {
|
| + switch (type) {
|
| + case TransType::X509_SCT:
|
| + return stream << "X509_SCT";
|
| + case TransType::SIGNED_TREE_HEAD:
|
| + return stream << "SIGNED_TREE_HEAD";
|
| + case TransType::CONSISTENCY_PROOF:
|
| + return stream << "CONSISTENCY_PROOF";
|
| + }
|
| +
|
| + return stream << static_cast<uint16_t>(type);
|
| +}
|
| +
|
| +TransItemV1::TransItemV1() {}
|
| +
|
| +TransItemV1::~TransItemV1() {}
|
| +
|
| +TransType TransItemV1::type() const {
|
| + CHECK(type_);
|
| + return *type_;
|
| +}
|
| +
|
| +scoped_refptr<SignedCertificateTimestamp> TransItemV1::x509_sct() const {
|
| + CHECK_EQ(TransType::X509_SCT, type());
|
| + return x509_sct_;
|
| +}
|
| +
|
| +const SignedTreeHead& TransItemV1::signed_tree_head() const {
|
| + CHECK_EQ(TransType::SIGNED_TREE_HEAD, type());
|
| + return *signed_tree_head_;
|
| +}
|
| +
|
| +const MerkleConsistencyProof& TransItemV1::consistency_proof() const {
|
| + CHECK_EQ(TransType::CONSISTENCY_PROOF, type());
|
| + return *consistency_proof_;
|
| +}
|
| +
|
| +void TransItemV1::SetX509Sct(scoped_refptr<SignedCertificateTimestamp> sct) {
|
| + Clear();
|
| + x509_sct_ = sct;
|
| + type_.reset(new TransType(TransType::X509_SCT));
|
| +}
|
| +
|
| +void TransItemV1::SetSignedTreeHead(const SignedTreeHead& sth) {
|
| + Clear();
|
| + signed_tree_head_.reset(new SignedTreeHead(sth));
|
| + type_.reset(new TransType(TransType::SIGNED_TREE_HEAD));
|
| +}
|
| +
|
| +void TransItemV1::SetConsistencyProof(const MerkleConsistencyProof& proof) {
|
| + Clear();
|
| + consistency_proof_.reset(new MerkleConsistencyProof(proof));
|
| + type_.reset(new TransType(TransType::CONSISTENCY_PROOF));
|
| +}
|
| +
|
| +void TransItemV1::Clear() {
|
| + if (type_ == nullptr) {
|
| + return;
|
| + }
|
| +
|
| + switch (*type_) {
|
| + case TransType::X509_SCT:
|
| + x509_sct_ = nullptr;
|
| + break;
|
| + case TransType::SIGNED_TREE_HEAD:
|
| + signed_tree_head_.reset(nullptr);
|
| + break;
|
| + case TransType::CONSISTENCY_PROOF:
|
| + consistency_proof_.reset(nullptr);
|
| + break;
|
| + }
|
| +
|
| + type_.reset(nullptr);
|
| +}
|
| +
|
| +std::ostream& operator<<(std::ostream& stream, const TransItemV1& item) {
|
| + if (!item.IsTypeSet()) {
|
| + return stream << "TransItemV1";
|
| + }
|
| +
|
| + return stream << "TransItemV1(" << item.type() << ")";
|
| +}
|
| +
|
| +TransItem::TransItem() {}
|
| +
|
| +TransItem::TransItem(scoped_ptr<TransItemV1> item) {
|
| + Set(std::move(item));
|
| +}
|
| +
|
| +TransItem::~TransItem() {}
|
| +
|
| +TransItem::Version TransItem::version() const {
|
| + CHECK(version_);
|
| + return *version_;
|
| +}
|
| +
|
| +const TransItemV1& TransItem::v1() const {
|
| + CHECK_EQ(Version::V1, version());
|
| + return *v1_;
|
| +}
|
| +
|
| +void TransItem::Set(scoped_ptr<TransItemV1> item) {
|
| + Clear();
|
| + v1_.swap(item);
|
| + version_.reset(new Version(Version::V1));
|
| +}
|
| +
|
| +void TransItem::Clear() {
|
| + if (version_ == nullptr) {
|
| + return;
|
| + }
|
| +
|
| + switch (*version_) {
|
| + case Version::V1:
|
| + v1_.reset(nullptr);
|
| + break;
|
| + }
|
| +
|
| + version_.reset(nullptr);
|
| +}
|
| +
|
| +std::ostream& operator<<(std::ostream& stream,
|
| + const TransItem::Version& version) {
|
| + switch (version) {
|
| + case TransItem::Version::V1:
|
| + return stream << "v1";
|
| + }
|
| +
|
| + return stream << "v" << (static_cast<unsigned>(version) + 1);
|
| +}
|
| +
|
| +std::ostream& operator<<(std::ostream& stream, const TransItem& item) {
|
| + if (!item.IsVersionSet()) {
|
| + return stream << "TransItem";
|
| + }
|
| +
|
| + switch (item.version()) {
|
| + case TransItem::Version::V1:
|
| + return stream << "TransItem(" << item.version() << ", "
|
| + << item.v1().type() << ")";
|
| + }
|
| +
|
| + return stream << "TransItem(" << item.version();
|
| +}
|
| +
|
| +} // namespace ct
|
| +} // namespace net
|
|
|