Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: net/base/x509_cert_types.cc

Issue 5162001: X.509-related cleanup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More files broke Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/base/x509_cert_types.h ('k') | net/base/x509_cert_types_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2010 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 #include "net/base/x509_cert_types.h" 5 #include "net/base/x509_cert_types.h"
6 6
7 #include <ostream>
8
9 #include "net/base/x509_certificate.h" 7 #include "net/base/x509_certificate.h"
10 #include "base/logging.h" 8 #include "base/logging.h"
11 9
12 namespace net { 10 namespace net {
13 11
14 bool match(const std::string &str, const std::string &against) {
15 // TODO(snej): Use the full matching rules specified in RFC 5280 sec. 7.1
16 // including trimming and case-folding: <http://www.ietf.org/rfc/rfc5280.txt>.
17 return against == str;
18 }
19
20 bool match(const std::vector<std::string> &rdn1,
21 const std::vector<std::string> &rdn2) {
22 // "Two relative distinguished names RDN1 and RDN2 match if they have the
23 // same number of naming attributes and for each naming attribute in RDN1
24 // there is a matching naming attribute in RDN2." --RFC 5280 sec. 7.1.
25 if (rdn1.size() != rdn2.size())
26 return false;
27 for (unsigned i1 = 0; i1 < rdn1.size(); ++i1) {
28 unsigned i2;
29 for (i2 = 0; i2 < rdn2.size(); ++i2) {
30 if (match(rdn1[i1], rdn2[i2]))
31 break;
32 }
33 if (i2 == rdn2.size())
34 return false;
35 }
36 return true;
37 }
38
39 CertPrincipal::CertPrincipal() { 12 CertPrincipal::CertPrincipal() {
40 } 13 }
41 14
42 CertPrincipal::CertPrincipal(const std::string& name) : common_name(name) {} 15 CertPrincipal::CertPrincipal(const std::string& name) : common_name(name) {}
43 16
44 CertPrincipal::~CertPrincipal() { 17 CertPrincipal::~CertPrincipal() {
45 } 18 }
46 19
47 bool CertPrincipal::Matches(const CertPrincipal& against) const {
48 return match(common_name, against.common_name) &&
49 match(common_name, against.common_name) &&
50 match(locality_name, against.locality_name) &&
51 match(state_or_province_name, against.state_or_province_name) &&
52 match(country_name, against.country_name) &&
53 match(street_addresses, against.street_addresses) &&
54 match(organization_names, against.organization_names) &&
55 match(organization_unit_names, against.organization_unit_names) &&
56 match(domain_components, against.domain_components);
57 }
58
59 std::string CertPrincipal::GetDisplayName() const { 20 std::string CertPrincipal::GetDisplayName() const {
60 if (!common_name.empty()) 21 if (!common_name.empty())
61 return common_name; 22 return common_name;
62 if (!organization_names.empty()) 23 if (!organization_names.empty())
63 return organization_names[0]; 24 return organization_names[0];
64 if (!organization_unit_names.empty()) 25 if (!organization_unit_names.empty())
65 return organization_unit_names[0]; 26 return organization_unit_names[0];
66 27
67 return std::string(); 28 return std::string();
68 } 29 }
69 30
70 std::ostream& operator<<(std::ostream& s, const CertPrincipal& p) {
71 s << "CertPrincipal[";
72 if (!p.common_name.empty())
73 s << "cn=\"" << p.common_name << "\" ";
74 for (unsigned i = 0; i < p.street_addresses.size(); ++i)
75 s << "street=\"" << p.street_addresses[i] << "\" ";
76 if (!p.locality_name.empty())
77 s << "l=\"" << p.locality_name << "\" ";
78 for (unsigned i = 0; i < p.organization_names.size(); ++i)
79 s << "o=\"" << p.organization_names[i] << "\" ";
80 for (unsigned i = 0; i < p.organization_unit_names.size(); ++i)
81 s << "ou=\"" << p.organization_unit_names[i] << "\" ";
82 if (!p.state_or_province_name.empty())
83 s << "st=\"" << p.state_or_province_name << "\" ";
84 if (!p.country_name.empty())
85 s << "c=\"" << p.country_name << "\" ";
86 for (unsigned i = 0; i < p.domain_components.size(); ++i)
87 s << "dc=\"" << p.domain_components[i] << "\" ";
88 return s << "]";
89 }
90
91 CertPolicy::CertPolicy() { 31 CertPolicy::CertPolicy() {
92 } 32 }
93 33
94 CertPolicy::~CertPolicy() { 34 CertPolicy::~CertPolicy() {
95 } 35 }
96 36
97 CertPolicy::Judgment CertPolicy::Check( 37 CertPolicy::Judgment CertPolicy::Check(
98 X509Certificate* cert) const { 38 X509Certificate* cert) const {
99 // It shouldn't matter which set we check first, but we check denied first 39 // It shouldn't matter which set we check first, but we check denied first
100 // in case something strange has happened. 40 // in case something strange has happened.
(...skipping 28 matching lines...) Expand all
129 69
130 bool CertPolicy::HasAllowedCert() const { 70 bool CertPolicy::HasAllowedCert() const {
131 return !allowed_.empty(); 71 return !allowed_.empty();
132 } 72 }
133 73
134 bool CertPolicy::HasDeniedCert() const { 74 bool CertPolicy::HasDeniedCert() const {
135 return !denied_.empty(); 75 return !denied_.empty();
136 } 76 }
137 77
138 } // namespace net 78 } // namespace net
OLDNEW
« no previous file with comments | « net/base/x509_cert_types.h ('k') | net/base/x509_cert_types_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698