Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1157)

Unified Diff: net/cert/internal/cert_errors.h

Issue 2282183004: Add error information to VerifyCertificateChain(). (Closed)
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | net/cert/internal/cert_errors.cc » ('j') | net/cert/internal/path_builder.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/cert/internal/cert_errors.h
diff --git a/net/cert/internal/cert_errors.h b/net/cert/internal/cert_errors.h
new file mode 100644
index 0000000000000000000000000000000000000000..0b324f8956cce44bee19ab2e53582b041233988e
--- /dev/null
+++ b/net/cert/internal/cert_errors.h
@@ -0,0 +1,182 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
mattm 2016/08/29 22:15:11 2016
eroman 2016/08/29 22:55:18 Done.
+// 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 validation may emit a sequence of errors/warnings. These
+// are represented by |CertErrors|.
+//
+// |CertErrors| is basically just a sequence of errors. The order of the errors
+// reflects when they were added.
+//
+// Each |CertError| has three parts:
+//
+// * A unique identifier for the error/warning
+// - essentially an error code
+//
+// * Optional parameters specific to this error type
+// - May identify relevant DER or OIDs in the certificate
+//
+// * Optional context that describes where the error happened
+// - Which certificate or trust anchor were we processing when the error
+// was encountered?
+//
+
+#ifndef NET_CERT_INTERNAL_CERT_ERRORS_H_
+#define NET_CERT_INTERNAL_CERT_ERRORS_H_
+
+#include <memory>
+#include <vector>
+
+#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
+#include "net/base/net_export.h"
+#include "net/der/input.h"
+
+namespace base {
+class Value;
+}
+
+namespace net {
+
+class ParsedCertificate;
+class TrustAnchor;
+
+// Certificate error types are identified by null-terminated C-strings, with
+// unique pointer values.
+//
+// Equality of CertErrorType is done using (pointer) equality and not string
+// comparison.
+//
+// To ensure uniqueness define errors using the macro DEFINE_CERT_ERROR_TYPE().
+using CertErrorType = const char*;
+
+// TODO(crbug.com/634443): Implement this -- add magic to ensure that storage
+// of identical strings isn't pool.
+#define DEFINE_CERT_ERROR_TYPE(name, c_str_literal) \
+ CertErrorType name = c_str_literal
+
+// CertErrorParams is a base class for describing parameters for a particular
+// CertErrorType.
+//
+// Parameters may be used to associate extra information with an error. An
+// example use for parameters is to identify the OID for an unconsumed critical
+// extension.
+class NET_EXPORT CertErrorParams {
+ public:
+ CertErrorParams();
+ virtual ~CertErrorParams();
+
+ // Creates a representation of this parameter as a base::Value, which may be
+ // used for pretty printing the error.
+ virtual std::unique_ptr<base::Value> ToValue() const = 0;
+
+ // TODO(crbug.com/634443): Add methods access the underlying structure.
+ // ToValue() alone is not a great way to get at the data.
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CertErrorParams);
+};
+
+// CertError represents a single error during path validation.
+struct NET_EXPORT CertError {
+ CertError();
+ CertError(CertError&& other);
+ ~CertError();
+
+ // The "type" of the error. This describes the error class -- what is
+ // typically done using an integer error code.
+ CertErrorType type = nullptr;
+
+ // This describes any parameter relevant to the error.
+ std::unique_ptr<CertErrorParams> params;
+
+ // TODO(crbug.com/634443): Add context (i.e. associated certificate/trust
+ // anchor).
+};
+
+class NET_EXPORT CertErrors {
+ public:
+ CertErrors();
+ ~CertErrors();
+
+ void Add(CertErrorType type);
+
+ void AddWithParam(CertErrorType type,
+ std::unique_ptr<CertErrorParams> params);
+
+ void AddWith1DerParam(CertErrorType type, const der::Input& der1);
+ void AddWith2DerParams(CertErrorType type,
+ const der::Input& der1,
+ const der::Input& der2);
+
+ const std::vector<CertError>& errors() const { return errors_; }
+
+ private:
+ std::vector<CertError> errors_;
+
+ DISALLOW_COPY_AND_ASSIGN(CertErrors);
+};
+
+// --------------------------
+// Context scopers
+// --------------------------
+
+// TODO(crbug.com/634443): Implement.
+class NET_EXPORT ScopedCertErrorsCertContext {
+ public:
+ ScopedCertErrorsCertContext(CertErrors* parent,
+ const ParsedCertificate* cert,
+ size_t i);
+ ~ScopedCertErrorsCertContext();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ScopedCertErrorsCertContext);
+};
+
+// TODO(crbug.com/634443): Implement.
+class NET_EXPORT ScopedCertErrorsTrustAnchorContext {
+ public:
+ ScopedCertErrorsTrustAnchorContext(CertErrors* parent,
+ const TrustAnchor* trust_anchor);
+ ~ScopedCertErrorsTrustAnchorContext();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ScopedCertErrorsTrustAnchorContext);
+};
+
+// --------------------------
+// Error parameters
+// --------------------------
+
+class NET_EXPORT CertErrorParamsDer1 : public CertErrorParams {
+ public:
+ explicit CertErrorParamsDer1(const der::Input& der1);
+
+ std::unique_ptr<base::Value> ToValue() const override;
+
+ private:
+ const std::string der1_;
+
+ DISALLOW_COPY_AND_ASSIGN(CertErrorParamsDer1);
+};
+
+class NET_EXPORT CertErrorParamsDer2 : public CertErrorParams {
+ public:
+ CertErrorParamsDer2(const der::Input& der1, const der::Input& der2);
+
+ std::unique_ptr<base::Value> ToValue() const override;
+
+ private:
+ const std::string der1_;
+ const std::string der2_;
+
+ DISALLOW_COPY_AND_ASSIGN(CertErrorParamsDer2);
+};
+
+} // namespace net
+
+#endif // NET_CERT_INTERNAL_CERT_ERRORS_H_
« no previous file with comments | « no previous file | net/cert/internal/cert_errors.cc » ('j') | net/cert/internal/path_builder.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698