| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BSSL_PKI_CERT_ISSUER_SOURCE_H_ |
| #define BSSL_PKI_CERT_ISSUER_SOURCE_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include <openssl/base.h> |
| |
| #include "parsed_certificate.h" |
| |
| namespace bssl { |
| |
| // Interface for looking up issuers of a certificate during path building. |
| // Provides a synchronous and asynchronous method for retrieving issuers, so the |
| // path builder can try to complete synchronously first. The caller is expected |
| // to call SyncGetIssuersOf first, see if it can make progress with those |
| // results, and if not, then fall back to calling AsyncGetIssuersOf. |
| // An implementations may choose to return results from either one of the Get |
| // methods, or from both. |
| class OPENSSL_EXPORT CertIssuerSource { |
| public: |
| class OPENSSL_EXPORT Request { |
| public: |
| Request() = default; |
| |
| Request(const Request &) = delete; |
| Request &operator=(const Request &) = delete; |
| |
| // Destruction of the Request cancels it. |
| virtual ~Request() = default; |
| |
| // Retrieves issuers and appends them to |issuers|. |
| // |
| // GetNext should be called again to retrieve any remaining issuers. |
| // |
| // If no issuers are left then |issuers| will not be modified. This |
| // indicates that the issuers have been exhausted and GetNext() should |
| // not be called again. |
| virtual void GetNext(ParsedCertificateList *issuers) = 0; |
| }; |
| |
| virtual ~CertIssuerSource() = default; |
| |
| // Finds certificates whose Subject matches |cert|'s Issuer. |
| // Matches are appended to |issuers|. Any existing contents of |issuers| will |
| // not be modified. If the implementation does not support synchronous |
| // lookups, or if there are no matches, |issuers| is not modified. |
| virtual void SyncGetIssuersOf(const ParsedCertificate *cert, |
| ParsedCertificateList *issuers) = 0; |
| |
| // Finds certificates whose Subject matches |cert|'s Issuer. |
| // If the implementation does not support asynchronous lookups or can |
| // determine synchronously that it would return no results, |*out_req| |
| // will be set to nullptr. |
| // |
| // Otherwise a request is started and saved to |out_req|. The results can be |
| // read through the Request interface. |
| virtual void AsyncGetIssuersOf(const ParsedCertificate *cert, |
| std::unique_ptr<Request> *out_req) = 0; |
| }; |
| |
| } // namespace bssl |
| |
| #endif // BSSL_PKI_CERT_ISSUER_SOURCE_H_ |