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

Unified Diff: net/base/x509_cert_types_win.cc

Issue 13006020: net: extract net/cert out of net/base (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/x509_cert_types_unittest.cc ('k') | net/base/x509_certificate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/x509_cert_types_win.cc
diff --git a/net/base/x509_cert_types_win.cc b/net/base/x509_cert_types_win.cc
deleted file mode 100644
index 0db63b1863e31b4f26711e9823d50b2bab853ae0..0000000000000000000000000000000000000000
--- a/net/base/x509_cert_types_win.cc
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "net/base/x509_cert_types.h"
-
-#include <windows.h>
-#include <wincrypt.h>
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
-#include "crypto/capi_util.h"
-
-#pragma comment(lib, "crypt32.lib")
-
-namespace net {
-
-namespace {
-
-// A list of OIDs to decode. Any OID not on this list will be ignored for
-// purposes of parsing.
-const char* kOIDs[] = {
- szOID_COMMON_NAME,
- szOID_LOCALITY_NAME,
- szOID_STATE_OR_PROVINCE_NAME,
- szOID_COUNTRY_NAME,
- szOID_STREET_ADDRESS,
- szOID_ORGANIZATION_NAME,
- szOID_ORGANIZATIONAL_UNIT_NAME,
- szOID_DOMAIN_COMPONENT
-};
-
-// Converts the value for |attribute| to an UTF-8 string, storing the result
-// in |value|. Returns false if the string cannot be converted.
-bool GetAttributeValue(PCERT_RDN_ATTR attribute,
- std::string* value) {
- DWORD chars_needed = CertRDNValueToStrW(attribute->dwValueType,
- &attribute->Value, NULL, 0);
- if (chars_needed == 0)
- return false;
- if (chars_needed == 1) {
- // The value is actually an empty string (chars_needed includes a single
- // char for a NULL value). Don't bother converting - just clear the
- // string.
- value->clear();
- return true;
- }
- std::wstring wide_name;
- DWORD chars_written = CertRDNValueToStrW(
- attribute->dwValueType, &attribute->Value,
- WriteInto(&wide_name, chars_needed), chars_needed);
- if (chars_written <= 1)
- return false;
- wide_name.resize(chars_written - 1);
- *value = WideToUTF8(wide_name);
- return true;
-}
-
-// Adds a type+value pair to the appropriate vector from a C array.
-// The array is keyed by the matching OIDs from kOIDS[].
-bool AddTypeValuePair(PCERT_RDN_ATTR attribute,
- std::vector<std::string>* values[]) {
- for (size_t oid = 0; oid < arraysize(kOIDs); ++oid) {
- if (strcmp(attribute->pszObjId, kOIDs[oid]) == 0) {
- std::string value;
- if (!GetAttributeValue(attribute, &value))
- return false;
- values[oid]->push_back(value);
- break;
- }
- }
- return true;
-}
-
-// Stores the first string of the vector, if any, to *single_value.
-void SetSingle(const std::vector<std::string>& values,
- std::string* single_value) {
- // We don't expect to have more than one CN, L, S, and C.
- LOG_IF(WARNING, values.size() > 1) << "Didn't expect multiple values";
- if (!values.empty())
- *single_value = values[0];
-}
-
-} // namespace
-
-bool CertPrincipal::ParseDistinguishedName(const void* ber_name_data,
- size_t length) {
- DCHECK(ber_name_data);
-
- CRYPT_DECODE_PARA decode_para;
- decode_para.cbSize = sizeof(decode_para);
- decode_para.pfnAlloc = crypto::CryptAlloc;
- decode_para.pfnFree = crypto::CryptFree;
- CERT_NAME_INFO* name_info = NULL;
- DWORD name_info_size = 0;
- BOOL rv;
- rv = CryptDecodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
- X509_NAME,
- reinterpret_cast<const BYTE*>(ber_name_data),
- length,
- CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG,
- &decode_para,
- &name_info, &name_info_size);
- if (!rv)
- return false;
- scoped_ptr_malloc<CERT_NAME_INFO> scoped_name_info(name_info);
-
- std::vector<std::string> common_names, locality_names, state_names,
- country_names;
-
- std::vector<std::string>* values[] = {
- &common_names, &locality_names,
- &state_names, &country_names,
- &this->street_addresses,
- &this->organization_names,
- &this->organization_unit_names,
- &this->domain_components
- };
- DCHECK(arraysize(kOIDs) == arraysize(values));
-
- for (DWORD cur_rdn = 0; cur_rdn < name_info->cRDN; ++cur_rdn) {
- PCERT_RDN rdn = &name_info->rgRDN[cur_rdn];
- for (DWORD cur_ava = 0; cur_ava < rdn->cRDNAttr; ++cur_ava) {
- PCERT_RDN_ATTR ava = &rdn->rgRDNAttr[cur_ava];
- if (!AddTypeValuePair(ava, values))
- return false;
- }
- }
-
- SetSingle(common_names, &this->common_name);
- SetSingle(locality_names, &this->locality_name);
- SetSingle(state_names, &this->state_or_province_name);
- SetSingle(country_names, &this->country_name);
- return true;
-}
-
-} // namespace net
« no previous file with comments | « net/base/x509_cert_types_unittest.cc ('k') | net/base/x509_certificate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698