OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_CERT_INTERNAL_PARSE_CERTIFICATE_H_ | 5 #ifndef NET_CERT_INTERNAL_PARSE_CERTIFICATE_H_ |
6 #define NET_CERT_INTERNAL_PARSE_CERTIFICATE_H_ | 6 #define NET_CERT_INTERNAL_PARSE_CERTIFICATE_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 NET_EXPORT bool ParseCertificate(const der::Input& certificate_tlv, | 95 NET_EXPORT bool ParseCertificate(const der::Input& certificate_tlv, |
96 der::Input* out_tbs_certificate_tlv, | 96 der::Input* out_tbs_certificate_tlv, |
97 der::Input* out_signature_algorithm_tlv, | 97 der::Input* out_signature_algorithm_tlv, |
98 der::BitString* out_signature_value, | 98 der::BitString* out_signature_value, |
99 CertErrors* out_errors) WARN_UNUSED_RESULT; | 99 CertErrors* out_errors) WARN_UNUSED_RESULT; |
100 | 100 |
101 // Parses a DER-encoded "TBSCertificate" as specified by RFC 5280. Returns true | 101 // Parses a DER-encoded "TBSCertificate" as specified by RFC 5280. Returns true |
102 // on success and sets the results in |out|. Certain invalid inputs may | 102 // on success and sets the results in |out|. Certain invalid inputs may |
103 // be accepted based on the provided |options|. | 103 // be accepted based on the provided |options|. |
104 // | 104 // |
| 105 // If |errors| was non-null then any warnings/errors that occur during parsing |
| 106 // are added to it. |
| 107 // |
105 // Note that on success |out| aliases data from the input |tbs_tlv|. | 108 // Note that on success |out| aliases data from the input |tbs_tlv|. |
106 // Hence the fields of the ParsedTbsCertificate are only valid as long as | 109 // Hence the fields of the ParsedTbsCertificate are only valid as long as |
107 // |tbs_tlv| remains valid. | 110 // |tbs_tlv| remains valid. |
108 // | 111 // |
109 // On failure |out| has an undefined state. Some of its fields may have been | 112 // On failure |out| has an undefined state. Some of its fields may have been |
110 // updated during parsing, whereas others may not have been changed. | 113 // updated during parsing, whereas others may not have been changed. |
111 // | 114 // |
112 // Refer to the per-field documentation of ParsedTbsCertificate for details on | 115 // Refer to the per-field documentation of ParsedTbsCertificate for details on |
113 // what validity checks parsing performs. | 116 // what validity checks parsing performs. |
114 // | 117 // |
115 // TBSCertificate ::= SEQUENCE { | 118 // TBSCertificate ::= SEQUENCE { |
116 // version [0] EXPLICIT Version DEFAULT v1, | 119 // version [0] EXPLICIT Version DEFAULT v1, |
117 // serialNumber CertificateSerialNumber, | 120 // serialNumber CertificateSerialNumber, |
118 // signature AlgorithmIdentifier, | 121 // signature AlgorithmIdentifier, |
119 // issuer Name, | 122 // issuer Name, |
120 // validity Validity, | 123 // validity Validity, |
121 // subject Name, | 124 // subject Name, |
122 // subjectPublicKeyInfo SubjectPublicKeyInfo, | 125 // subjectPublicKeyInfo SubjectPublicKeyInfo, |
123 // issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, | 126 // issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, |
124 // -- If present, version MUST be v2 or v3 | 127 // -- If present, version MUST be v2 or v3 |
125 // subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, | 128 // subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, |
126 // -- If present, version MUST be v2 or v3 | 129 // -- If present, version MUST be v2 or v3 |
127 // extensions [3] EXPLICIT Extensions OPTIONAL | 130 // extensions [3] EXPLICIT Extensions OPTIONAL |
128 // -- If present, version MUST be v3 | 131 // -- If present, version MUST be v3 |
129 // } | 132 // } |
130 NET_EXPORT bool ParseTbsCertificate(const der::Input& tbs_tlv, | 133 NET_EXPORT bool ParseTbsCertificate(const der::Input& tbs_tlv, |
131 const ParseCertificateOptions& options, | 134 const ParseCertificateOptions& options, |
132 ParsedTbsCertificate* out) | 135 ParsedTbsCertificate* out, |
133 WARN_UNUSED_RESULT; | 136 CertErrors* errors) WARN_UNUSED_RESULT; |
134 | 137 |
135 // Represents a "Version" from RFC 5280: | 138 // Represents a "Version" from RFC 5280: |
136 // Version ::= INTEGER { v1(0), v2(1), v3(2) } | 139 // Version ::= INTEGER { v1(0), v2(1), v3(2) } |
137 enum class CertificateVersion { | 140 enum class CertificateVersion { |
138 V1, | 141 V1, |
139 V2, | 142 V2, |
140 V3, | 143 V3, |
141 }; | 144 }; |
142 | 145 |
143 // ParsedTbsCertificate contains pointers to the main fields of a DER-encoded | 146 // ParsedTbsCertificate contains pointers to the main fields of a DER-encoded |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 // accessLocation types other than uniformResourceIdentifier are silently | 453 // accessLocation types other than uniformResourceIdentifier are silently |
451 // ignored. | 454 // ignored. |
452 NET_EXPORT bool ParseAuthorityInfoAccess( | 455 NET_EXPORT bool ParseAuthorityInfoAccess( |
453 const der::Input& authority_info_access_tlv, | 456 const der::Input& authority_info_access_tlv, |
454 std::vector<base::StringPiece>* out_ca_issuers_uris, | 457 std::vector<base::StringPiece>* out_ca_issuers_uris, |
455 std::vector<base::StringPiece>* out_ocsp_uris) WARN_UNUSED_RESULT; | 458 std::vector<base::StringPiece>* out_ocsp_uris) WARN_UNUSED_RESULT; |
456 | 459 |
457 } // namespace net | 460 } // namespace net |
458 | 461 |
459 #endif // NET_CERT_INTERNAL_PARSE_CERTIFICATE_H_ | 462 #endif // NET_CERT_INTERNAL_PARSE_CERTIFICATE_H_ |
OLD | NEW |