mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
132 lines
5.2 KiB
C
132 lines
5.2 KiB
C
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef NET_CERT_INTERNAL_PARSE_NAME_H_
|
||
|
#define NET_CERT_INTERNAL_PARSE_NAME_H_
|
||
|
|
||
|
#include <vector>
|
||
|
|
||
|
#include "net/base/net_export.h"
|
||
|
#include "net/der/input.h"
|
||
|
#include "net/der/parser.h"
|
||
|
#include "net/der/tag.h"
|
||
|
|
||
|
namespace net {
|
||
|
|
||
|
NET_EXPORT der::Input TypeCommonNameOid();
|
||
|
NET_EXPORT der::Input TypeSurnameOid();
|
||
|
NET_EXPORT der::Input TypeSerialNumberOid();
|
||
|
NET_EXPORT der::Input TypeCountryNameOid();
|
||
|
NET_EXPORT der::Input TypeLocalityNameOid();
|
||
|
NET_EXPORT der::Input TypeStateOrProvinceNameOid();
|
||
|
NET_EXPORT der::Input TypeStreetAddressOid();
|
||
|
NET_EXPORT der::Input TypeOrganizationNameOid();
|
||
|
NET_EXPORT der::Input TypeOrganizationUnitNameOid();
|
||
|
NET_EXPORT der::Input TypeTitleOid();
|
||
|
NET_EXPORT der::Input TypeNameOid();
|
||
|
NET_EXPORT der::Input TypeGivenNameOid();
|
||
|
NET_EXPORT der::Input TypeInitialsOid();
|
||
|
NET_EXPORT der::Input TypeGenerationQualifierOid();
|
||
|
NET_EXPORT der::Input TypeDomainComponentOid();
|
||
|
|
||
|
// X509NameAttribute contains a representation of a DER-encoded RFC 2253
|
||
|
// "AttributeTypeAndValue".
|
||
|
//
|
||
|
// AttributeTypeAndValue ::= SEQUENCE {
|
||
|
// type AttributeType,
|
||
|
// value AttributeValue
|
||
|
// }
|
||
|
struct NET_EXPORT X509NameAttribute {
|
||
|
X509NameAttribute(der::Input in_type,
|
||
|
der::Tag in_value_tag,
|
||
|
der::Input in_value)
|
||
|
: type(in_type), value_tag(in_value_tag), value(in_value) {}
|
||
|
|
||
|
// Configures handling of PrintableString in the attribute value. Do
|
||
|
// not use non-default handling without consulting //net owners. With
|
||
|
// kAsUTF8Hack, PrintableStrings are interpreted as UTF-8 strings.
|
||
|
enum class PrintableStringHandling { kDefault, kAsUTF8Hack };
|
||
|
|
||
|
// Attempts to convert the value represented by this struct into a
|
||
|
// UTF-8 string and store it in |out|, returning whether the conversion
|
||
|
// was successful.
|
||
|
bool ValueAsString(std::string* out) const WARN_UNUSED_RESULT;
|
||
|
|
||
|
// Attempts to convert the value represented by this struct into a
|
||
|
// UTF-8 string and store it in |out|, returning whether the conversion
|
||
|
// was successful. Allows configuring some non-standard string handling
|
||
|
// options.
|
||
|
//
|
||
|
// Do not use without consulting //net owners.
|
||
|
bool ValueAsStringWithUnsafeOptions(
|
||
|
PrintableStringHandling printable_string_handling,
|
||
|
std::string* out) const WARN_UNUSED_RESULT;
|
||
|
|
||
|
// Attempts to convert the value represented by this struct into a
|
||
|
// std::string and store it in |out|, returning whether the conversion was
|
||
|
// successful. Due to some encodings being incompatible, the caller must
|
||
|
// verify the attribute |value_tag|.
|
||
|
//
|
||
|
// Note: Don't use this function unless you know what you're doing. Use
|
||
|
// ValueAsString instead.
|
||
|
//
|
||
|
// Note: The conversion doesn't verify that the value corresponds to the
|
||
|
// ASN.1 definition of the value type.
|
||
|
bool ValueAsStringUnsafe(std::string* out) const WARN_UNUSED_RESULT;
|
||
|
|
||
|
// Formats the NameAttribute per RFC2253 into an ASCII string and stores
|
||
|
// the result in |out|, returning whether the conversion was successful.
|
||
|
bool AsRFC2253String(std::string* out) const WARN_UNUSED_RESULT;
|
||
|
|
||
|
der::Input type;
|
||
|
der::Tag value_tag;
|
||
|
der::Input value;
|
||
|
};
|
||
|
|
||
|
typedef std::vector<X509NameAttribute> RelativeDistinguishedName;
|
||
|
typedef std::vector<RelativeDistinguishedName> RDNSequence;
|
||
|
|
||
|
// Parses all the ASN.1 AttributeTypeAndValue elements in |parser| and stores
|
||
|
// each as an AttributeTypeAndValue object in |out|.
|
||
|
//
|
||
|
// AttributeTypeAndValue is defined in RFC 5280 section 4.1.2.4:
|
||
|
//
|
||
|
// AttributeTypeAndValue ::= SEQUENCE {
|
||
|
// type AttributeType,
|
||
|
// value AttributeValue }
|
||
|
//
|
||
|
// AttributeType ::= OBJECT IDENTIFIER
|
||
|
//
|
||
|
// AttributeValue ::= ANY -- DEFINED BY AttributeType
|
||
|
//
|
||
|
// DirectoryString ::= CHOICE {
|
||
|
// teletexString TeletexString (SIZE (1..MAX)),
|
||
|
// printableString PrintableString (SIZE (1..MAX)),
|
||
|
// universalString UniversalString (SIZE (1..MAX)),
|
||
|
// utf8String UTF8String (SIZE (1..MAX)),
|
||
|
// bmpString BMPString (SIZE (1..MAX)) }
|
||
|
//
|
||
|
// The type of the component AttributeValue is determined by the AttributeType;
|
||
|
// in general it will be a DirectoryString.
|
||
|
NET_EXPORT bool ReadRdn(der::Parser* parser,
|
||
|
RelativeDistinguishedName* out) WARN_UNUSED_RESULT;
|
||
|
|
||
|
// Parses a DER-encoded "Name" as specified by 5280. Returns true on success
|
||
|
// and sets the results in |out|.
|
||
|
NET_EXPORT bool ParseName(const der::Input& name_tlv,
|
||
|
RDNSequence* out) WARN_UNUSED_RESULT;
|
||
|
// Parses a DER-encoded "Name" value (without the sequence tag & length) as
|
||
|
// specified by 5280. Returns true on success and sets the results in |out|.
|
||
|
NET_EXPORT bool ParseNameValue(const der::Input& name_value,
|
||
|
RDNSequence* out) WARN_UNUSED_RESULT;
|
||
|
|
||
|
// Formats a RDNSequence |rdn_sequence| per RFC2253 as an ASCII string and
|
||
|
// stores the result into |out|, and returns whether the conversion was
|
||
|
// successful.
|
||
|
NET_EXPORT bool ConvertToRFC2253(const RDNSequence& rdn_sequence,
|
||
|
std::string* out) WARN_UNUSED_RESULT;
|
||
|
} // namespace net
|
||
|
|
||
|
#endif // NET_CERT_INTERNAL_PARSE_NAME_H_
|