// Copyright 2023 The BoringSSL Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #if !defined(OPENSSL_HEADER_BSSL_PKI_CERTIFICATE_H_) && defined(__cplusplus) #define OPENSSL_HEADER_BSSL_PKI_CERTIFICATE_H_ #include #include #include #include // IWYU pragma: export #include BSSL_NAMESPACE_BEGIN struct CertificateInternals; // Certificate represents a parsed X.509 certificate. It includes accessors for // the various things that one might want to extract from a certificate, class OPENSSL_EXPORT Certificate { public: Certificate(Certificate&& other); Certificate(const Certificate& other) = delete; ~Certificate(); Certificate& operator=(const Certificate& other) = delete; // FromDER returns a certificate from an DER-encoded X.509 object in |der|. // In the event of a failure, it will return no value, and |out_diagnostic| // may be set to a string of human readable debugging information if // information abou the failure is available. static std::unique_ptr FromDER( bssl::Span der, std::string *out_diagnostic); // FromPEM returns a certificate from the first CERTIFICATE PEM block in // |pem|. In the event of a failure, it will return no value, and // |out_diagnostic| may be set to a string of human readable debugging // informtion if informaiton about the failuew is available. static std::unique_ptr FromPEM( std::string_view pem, std::string *out_diagnostic); // IsSelfIssued returns true if the certificate is "self-issued" per RFC 5280 // section 6.1. I.e. that the subject and issuer names are equal after // canonicalization (and no other checks). // // Other contexts may have a different notion such as "self signed" which // may or may not be this, and may check other properties of the certificate. bool IsSelfIssued() const; // Validity specifies the temporal validity of a cerificate, expressed in // POSIX time values of seconds since the POSIX epoch. The certificate is // valid at POSIX time t in second granularity, where not_before <= t <= // not_after. struct Validity { int64_t not_before; int64_t not_after; }; Validity GetValidity() const; // The binary, big-endian, DER representation of the certificate serial // number. It may include a leading 00 byte. bssl::Span GetSerialNumber() const; private: explicit Certificate(std::unique_ptr internals); std::unique_ptr internals_; }; BSSL_NAMESPACE_END #endif // OPENSSL_HEADER_BSSL_PKI_CERTIFICATE_H_ && __cplusplus