// Copyright 2016 The Chromium 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. #ifndef BSSL_PKI_CERT_ISSUER_SOURCE_H_ #define BSSL_PKI_CERT_ISSUER_SOURCE_H_ #include #include #include #include "parsed_certificate.h" BSSL_NAMESPACE_BEGIN // 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 *out_req) = 0; }; BSSL_NAMESPACE_END #endif // BSSL_PKI_CERT_ISSUER_SOURCE_H_