// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/cert/asn1_util.h" #include <optional> #include <string_view> #include "third_party/boringssl/src/pki/input.h" #include "third_party/boringssl/src/pki/parse_certificate.h" #include "third_party/boringssl/src/pki/parser.h" namespace net::asn1 { namespace { // Parses input |in| which should point to the beginning of a Certificate, and // sets |*tbs_certificate| ready to parse the Subject. If parsing // fails, this function returns false and |*tbs_certificate| is left in an // undefined state. bool SeekToSubject(bssl::der::Input in, bssl::der::Parser* tbs_certificate) { … } // Parses input |in| which should point to the beginning of a Certificate, and // sets |*tbs_certificate| ready to parse the SubjectPublicKeyInfo. If parsing // fails, this function returns false and |*tbs_certificate| is left in an // undefined state. bool SeekToSPKI(bssl::der::Input in, bssl::der::Parser* tbs_certificate) { … } // Parses input |in| which should point to the beginning of a // Certificate. If parsing fails, this function returns false, with // |*extensions_present| and |*extensions_parser| left in an undefined // state. If parsing succeeds and extensions are present, this function // sets |*extensions_present| to true and sets |*extensions_parser| // ready to parse the Extensions. If extensions are not present, it sets // |*extensions_present| to false and |*extensions_parser| is left in an // undefined state. bool SeekToExtensions(bssl::der::Input in, bool* extensions_present, bssl::der::Parser* extensions_parser) { … } // Parse a DER-encoded, X.509 certificate in |cert| and find an extension with // the given OID. Returns false on parse error or true if the parse was // successful. |*out_extension_present| will be true iff the extension was // found. In the case where it was found, |*out_extension| will describe the // extension, or is undefined on parse error or if the extension is missing. bool ExtractExtensionWithOID(std::string_view cert, bssl::der::Input extension_oid, bool* out_extension_present, bssl::ParsedExtension* out_extension) { … } } // namespace bool ExtractSubjectFromDERCert(std::string_view cert, std::string_view* subject_out) { … } bool ExtractSPKIFromDERCert(std::string_view cert, std::string_view* spki_out) { … } bool ExtractSubjectPublicKeyFromSPKI(std::string_view spki, std::string_view* spk_out) { … } bool HasCanSignHttpExchangesDraftExtension(std::string_view cert) { … } bool ExtractSignatureAlgorithmsFromDERCert( std::string_view cert, std::string_view* cert_signature_algorithm_sequence, std::string_view* tbs_signature_algorithm_sequence) { … } bool ExtractExtensionFromDERCert(std::string_view cert, std::string_view extension_oid, bool* out_extension_present, bool* out_extension_critical, std::string_view* out_contents) { … } } // namespace net::asn1