// 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. // ---------------------------- // Overview of error design // ---------------------------- // // Certificate path building/validation/parsing may emit a sequence of errors // and warnings. // // Each individual error/warning entry (CertError) is comprised of: // // * A unique identifier. // // This serves similarly to an error code, and is used to query if a // particular error/warning occurred. // // * [optional] A parameters object. // // Nodes may attach a heap-allocated subclass of CertErrorParams to carry // extra information that is used when reporting the error. For instance // a parsing error may describe where in the DER the failure happened, or // what the unexpected value was. // // A collection of errors is represented by the CertErrors object. This may be // used to group errors that have a common context, such as all the // errors/warnings that apply to a specific certificate. // // Lastly, CertPathErrors composes multiple CertErrors -- one for each // certificate in the verified chain. // // ---------------------------- // Defining new errors // ---------------------------- // // The error IDs are extensible and do not need to be centrally defined. // // To define a new error use the macro DEFINE_CERT_ERROR_ID() in a .cc file. // If consumers are to be able to query for this error then the symbol should // also be exposed in a header file. // // Error IDs are in truth string literals, whose pointer value will be unique // per process. #ifndef BSSL_PKI_CERT_ERRORS_H_ #define BSSL_PKI_CERT_ERRORS_H_ #include <memory> #include <vector> #include <openssl/base.h> #include "cert_error_id.h" #include "parsed_certificate.h" BSSL_NAMESPACE_BEGIN class CertErrorParams; class CertPathErrors; // CertError represents either an error or a warning. struct OPENSSL_EXPORT CertError { … }; // CertErrors is a collection of CertError, along with convenience methods to // add and inspect errors. class OPENSSL_EXPORT CertErrors { … }; // CertPathErrors is a collection of CertErrors, to group errors into different // buckets for different certificates. The "index" should correspond with that // of the certificate relative to its chain. class OPENSSL_EXPORT CertPathErrors { … }; BSSL_NAMESPACE_END #endif // BSSL_PKI_CERT_ERRORS_H_