blob: d325b1bcc701b15c4cffccaacc9cb4ddc88d5633 [file] [log] [blame]
Bob Beckbc97b7a2023-04-18 08:35:15 -06001// Copyright 2016 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BSSL_PKI_CERT_ERROR_ID_H_
6#define BSSL_PKI_CERT_ERROR_ID_H_
7
Bob Beck3cd30cc2023-11-22 16:59:00 -07008#include <openssl/base.h>
Bob Beckbc97b7a2023-04-18 08:35:15 -06009
10namespace bssl {
11
12// Each "class" of certificate error/warning has its own unique ID. This is
13// essentially like an error code, however the value is not stable. Under the
14// hood these IDs are pointers and use the process's address space to ensure
15// uniqueness.
16//
17// Equality of CertErrorId can be done using the == operator.
18//
19// To define new error IDs use the macro DEFINE_CERT_ERROR_ID().
Bob Beck5c7a2a02023-11-20 17:28:21 -070020using CertErrorId = const void *;
Bob Beckbc97b7a2023-04-18 08:35:15 -060021
22// DEFINE_CERT_ERROR_ID() creates a CertErrorId given a non-null C-string
23// literal. The string should be a textual name for the error which will appear
24// when pretty-printing errors for debugging. It should be ASCII.
25//
26// TODO(crbug.com/634443): Implement this -- add magic to ensure that storage
27// of identical strings isn't pool.
28#define DEFINE_CERT_ERROR_ID(name, c_str_literal) \
29 const CertErrorId name = c_str_literal
30
31// Returns a debug string for a CertErrorId. In practice this returns the
32// string literal given to DEFINE_CERT_ERROR_ID(), which is human-readable.
Bob Beck5c7a2a02023-11-20 17:28:21 -070033OPENSSL_EXPORT const char *CertErrorIdToDebugString(CertErrorId id);
Bob Beckbc97b7a2023-04-18 08:35:15 -060034
Bob Beck5c7a2a02023-11-20 17:28:21 -070035} // namespace bssl
Bob Beckbc97b7a2023-04-18 08:35:15 -060036
37#endif // BSSL_PKI_CERT_ERROR_ID_H_