2016-04-11 16:17:25 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef CTSerialization_h
|
|
|
|
#define CTSerialization_h
|
|
|
|
|
2018-10-01 23:27:13 +03:00
|
|
|
#include <vector>
|
|
|
|
|
2018-10-02 15:59:34 +03:00
|
|
|
#include "mozpkix/Input.h"
|
|
|
|
#include "mozpkix/Result.h"
|
2016-04-11 16:17:25 +03:00
|
|
|
#include "SignedCertificateTimestamp.h"
|
|
|
|
|
|
|
|
// Utility functions for encoding/decoding structures used by Certificate
|
|
|
|
// Transparency to/from the TLS wire format encoding.
|
|
|
|
namespace mozilla {
|
|
|
|
namespace ct {
|
|
|
|
|
|
|
|
// Encodes the DigitallySigned |data| to |output|.
|
|
|
|
pkix::Result EncodeDigitallySigned(const DigitallySigned& data, Buffer& output);
|
|
|
|
|
|
|
|
// Reads and decodes a DigitallySigned object from |reader|.
|
|
|
|
// On failure, the cursor position of |reader| is undefined.
|
|
|
|
pkix::Result DecodeDigitallySigned(pkix::Reader& reader,
|
|
|
|
DigitallySigned& output);
|
|
|
|
|
|
|
|
// Encodes the |input| LogEntry to |output|. The size of the entry
|
|
|
|
// must not exceed the allowed size in RFC6962.
|
|
|
|
pkix::Result EncodeLogEntry(const LogEntry& entry, Buffer& output);
|
|
|
|
|
|
|
|
// Encodes the data signed by a Signed Certificate Timestamp (SCT) into
|
|
|
|
// |output|. The signature included in the SCT can then be verified over these
|
|
|
|
// bytes.
|
|
|
|
// |timestamp| timestamp from the SCT.
|
|
|
|
// |serializedLogEntry| the log entry signed by the SCT.
|
|
|
|
// |extensions| CT extensions.
|
|
|
|
pkix::Result EncodeV1SCTSignedData(uint64_t timestamp,
|
|
|
|
pkix::Input serializedLogEntry,
|
|
|
|
pkix::Input extensions, Buffer& output);
|
|
|
|
|
|
|
|
// Decodes a list of Signed Certificate Timestamps
|
|
|
|
// (SignedCertificateTimestampList as defined in RFC6962). This list
|
|
|
|
// is typically obtained from the CT extension in a certificate.
|
|
|
|
// To extract the individual items of the list, call ReadSCTListItem on
|
|
|
|
// the returned reader until the reader reaches its end.
|
|
|
|
// Note that the validity of each extracted SCT should be checked separately.
|
|
|
|
pkix::Result DecodeSCTList(pkix::Input input, pkix::Reader& listReader);
|
|
|
|
|
|
|
|
// Reads a single SCT from the reader returned by DecodeSCTList.
|
|
|
|
pkix::Result ReadSCTListItem(pkix::Reader& listReader, pkix::Input& result);
|
|
|
|
|
|
|
|
// Decodes a single SCT from |input| to |output|.
|
|
|
|
pkix::Result DecodeSignedCertificateTimestamp(
|
|
|
|
pkix::Reader& input, SignedCertificateTimestamp& output);
|
|
|
|
|
2016-07-05 08:35:06 +03:00
|
|
|
// Encodes a list of SCTs (|scts|) to |output|.
|
2018-10-01 23:27:13 +03:00
|
|
|
pkix::Result EncodeSCTList(const std::vector<pkix::Input>& scts,
|
|
|
|
Buffer& output);
|
2016-07-05 08:35:06 +03:00
|
|
|
|
2016-04-11 16:17:25 +03:00
|
|
|
} // namespace ct
|
|
|
|
} // namespace mozilla
|
|
|
|
|
|
|
|
#endif // CTSerialization_h
|