// Copyright 2017 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_GENERAL_NAMES_H_ #define BSSL_PKI_GENERAL_NAMES_H_ #include <memory> #include <string_view> #include <vector> #include <openssl/base.h> #include "cert_error_id.h" BSSL_NAMESPACE_BEGIN class CertErrors; OPENSSL_EXPORT extern const CertErrorId kFailedParsingGeneralName; namespace der { class Input; } // namespace der // Bitfield values for the GeneralName types defined in RFC 5280. The ordering // and exact values are not important, but match the order from the RFC for // convenience. enum GeneralNameTypes { … }; // Represents a GeneralNames structure. When processing GeneralNames, it is // often necessary to know which types of names were present, and to check // all the names of a certain type. Therefore, a bitfield of all the name // types is kept, and the names are split into members for each type. struct OPENSSL_EXPORT GeneralNames { … }; // Parses a GeneralName value and adds it to |subtrees|. // |ip_address_type| specifies how to parse iPAddress names. // Returns false on failure, and may fill |errors| with additional information. // |errors| must be non-null. // TODO(mattm): should this be a method on GeneralNames? [[nodiscard]] OPENSSL_EXPORT bool ParseGeneralName( der::Input input, GeneralNames::ParseGeneralNameIPAddressType ip_address_type, GeneralNames *subtrees, CertErrors *errors); BSSL_NAMESPACE_END #endif // BSSL_PKI_GENERAL_NAMES_H_