Certificate Transparency
========================

.. currentmodule:: cryptography.x509.certificate_transparency

`Certificate Transparency`_ is a set of protocols specified in :rfc:`6962`
which allow X.509 certificates to be sent to append-only logs and have small
cryptographic proofs that a certificate has been publicly logged. This allows
for external auditing of the certificates that a certificate authority has
issued.

.. class:: SignedCertificateTimestamp

    .. versionadded:: 2.0

    SignedCertificateTimestamps (SCTs) are small cryptographically signed
    assertions that the specified certificate has been submitted to a
    Certificate Transparency Log, and that it will be part of the public log
    within some time period, this is called the "maximum merge delay" (MMD) and
    each log specifies its own.

    .. attribute:: version

        :type: :class:`~cryptography.x509.certificate_transparency.Version`

        The SCT version as an enumeration. Currently only one version has been
        specified.

    .. attribute:: log_id

        :type: bytes

        An opaque identifier, indicating which log this SCT is from. This is
        the SHA256 hash of the log's public key.

    .. attribute:: timestamp

        :type: :class:`datetime.datetime`

        A naïve datetime representing the time in UTC at which the log asserts
        the certificate had been submitted to it.

    .. attribute:: entry_type

        :type:
            :class:`~cryptography.x509.certificate_transparency.LogEntryType`

        The type of submission to the log that this SCT is for. Log submissions
        can either be certificates themselves or "pre-certificates" which
        indicate a binding-intent to issue a certificate for the same data,
        with SCTs embedded in it.

    .. attribute:: signature_hash_algorithm

        .. versionadded:: 38.0.0

        :type:
            :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`

        The hashing algorithm used by this SCT's signature.

    .. attribute:: signature_algorithm

        .. versionadded:: 38.0.0

        :type:
            :class:`~cryptography.x509.certificate_transparency.SignatureAlgorithm`

        The signing algorithm used by this SCT's signature.

    .. attribute:: signature

        .. versionadded:: 38.0.0

        :type: bytes

        The raw bytes of the signatures embedded in the SCT.

    .. attribute:: extension_bytes

        .. versionadded:: 38.0.0

        :type: bytes

        Any raw extension bytes.


.. class:: Version

    .. versionadded:: 2.0

    An enumeration for SignedCertificateTimestamp versions.

    .. attribute:: v1

        For version 1 SignedCertificateTimestamps.

.. class:: LogEntryType

    .. versionadded:: 2.0

    An enumeration for SignedCertificateTimestamp log entry types.

    .. attribute:: X509_CERTIFICATE

        For SCTs corresponding to X.509 certificates.

    .. attribute:: PRE_CERTIFICATE

        For SCTs corresponding to pre-certificates.

.. class:: SignatureAlgorithm

    .. versionadded:: 38.0.0

    An enumeration for SignedCertificateTimestamp signature algorithms.

    These are exactly the same as SignatureAlgorithm in :rfc:`5246` (TLS 1.2).

    .. attribute:: ANONYMOUS

    .. attribute:: RSA

    .. attribute:: DSA

    .. attribute:: ECDSA

.. _`Certificate Transparency`: https://certificate.transparency.dev/
