| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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_certificate.h" | 5 #include "net/base/x509_certificate.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
| 9 #include "base/string_tokenizer.h" | 9 #include "base/string_tokenizer.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 // utf8String UTF8String (SIZE (1..ub-common-name)), | 197 // utf8String UTF8String (SIZE (1..ub-common-name)), |
| 198 // bmpString BMPString (SIZE (1..ub-common-name)) } | 198 // bmpString BMPString (SIZE (1..ub-common-name)) } |
| 199 // | 199 // |
| 200 // We also check IA5String and VisibleString. | 200 // We also check IA5String and VisibleString. |
| 201 for (DWORD i = 0; i < name_info->cRDN; ++i) { | 201 for (DWORD i = 0; i < name_info->cRDN; ++i) { |
| 202 PCERT_RDN rdn = &name_info->rgRDN[i]; | 202 PCERT_RDN rdn = &name_info->rgRDN[i]; |
| 203 for (DWORD j = 0; j < rdn->cRDNAttr; ++j) { | 203 for (DWORD j = 0; j < rdn->cRDNAttr; ++j) { |
| 204 PCERT_RDN_ATTR rdn_attr = &rdn->rgRDNAttr[j]; | 204 PCERT_RDN_ATTR rdn_attr = &rdn->rgRDNAttr[j]; |
| 205 if (strcmp(rdn_attr->pszObjId, szOID_COMMON_NAME) == 0) { | 205 if (strcmp(rdn_attr->pszObjId, szOID_COMMON_NAME) == 0) { |
| 206 switch (rdn_attr->dwValueType) { | 206 switch (rdn_attr->dwValueType) { |
| 207 // After the CryptoAPI ASN.1 security vulnerabilities described in |
| 208 // http://www.microsoft.com/technet/security/Bulletin/MS09-056.mspx |
| 209 // were patched, we get CERT_RDN_ENCODED_BLOB for a common name |
| 210 // that contains a NULL character. |
| 211 case CERT_RDN_ENCODED_BLOB: |
| 212 break; |
| 207 // Array of 8-bit characters. | 213 // Array of 8-bit characters. |
| 208 case CERT_RDN_PRINTABLE_STRING: | 214 case CERT_RDN_PRINTABLE_STRING: |
| 209 case CERT_RDN_TELETEX_STRING: | 215 case CERT_RDN_TELETEX_STRING: |
| 210 case CERT_RDN_IA5_STRING: | 216 case CERT_RDN_IA5_STRING: |
| 211 case CERT_RDN_VISIBLE_STRING: | 217 case CERT_RDN_VISIBLE_STRING: |
| 212 for (DWORD k = 0; k < rdn_attr->Value.cbData; ++k) { | 218 for (DWORD k = 0; k < rdn_attr->Value.cbData; ++k) { |
| 213 if (rdn_attr->Value.pbData[k] == '\0') | 219 if (rdn_attr->Value.pbData[k] == '\0') |
| 214 return true; | 220 return true; |
| 215 } | 221 } |
| 216 break; | 222 break; |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 DWORD sha1_size = sizeof(sha1.data); | 745 DWORD sha1_size = sizeof(sha1.data); |
| 740 rv = CryptHashCertificate(NULL, CALG_SHA1, 0, cert->pbCertEncoded, | 746 rv = CryptHashCertificate(NULL, CALG_SHA1, 0, cert->pbCertEncoded, |
| 741 cert->cbCertEncoded, sha1.data, &sha1_size); | 747 cert->cbCertEncoded, sha1.data, &sha1_size); |
| 742 DCHECK(rv && sha1_size == sizeof(sha1.data)); | 748 DCHECK(rv && sha1_size == sizeof(sha1.data)); |
| 743 if (!rv) | 749 if (!rv) |
| 744 memset(sha1.data, 0, sizeof(sha1.data)); | 750 memset(sha1.data, 0, sizeof(sha1.data)); |
| 745 return sha1; | 751 return sha1; |
| 746 } | 752 } |
| 747 | 753 |
| 748 } // namespace net | 754 } // namespace net |
| OLD | NEW |