OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "net/ssl/client_cert_store_chromeos.h" | |
6 | |
7 #include <cert.h> | |
8 | |
9 #include "base/bind.h" | |
10 #include "crypto/nss_crypto_module_delegate.h" | |
11 #include "crypto/nss_util_internal.h" | |
12 | |
13 namespace net { | |
14 | |
15 ClientCertStoreChromeOS::ClientCertStoreChromeOS( | |
16 const std::string& username_hash, | |
17 const PasswordDelegateFactory& password_delegate_factory) | |
18 : ClientCertStoreNSS(password_delegate_factory), | |
19 username_hash_(username_hash) {} | |
20 | |
21 ClientCertStoreChromeOS::~ClientCertStoreChromeOS() {} | |
22 | |
23 void ClientCertStoreChromeOS::GetClientCerts( | |
24 const SSLCertRequestInfo& cert_request_info, | |
25 CertificateList* selected_certs, | |
26 const base::Closure& callback) { | |
27 crypto::ScopedPK11Slot private_slot(crypto::GetPrivateSlotForChromeOSUser( | |
28 username_hash_, | |
29 base::Bind(&ClientCertStoreChromeOS::DidGetPrivateSlot, | |
30 base::Unretained(this), | |
Ryan Sleevi
2013/12/11 06:52:50
Why is this Unretained safe?
mattm
2013/12/12 00:45:22
Added comment (and expanded comment in net/ssl/cli
| |
31 &cert_request_info, | |
32 selected_certs, | |
33 callback))); | |
34 if (private_slot) | |
35 DidGetPrivateSlot( | |
36 &cert_request_info, selected_certs, callback, private_slot.Pass()); | |
37 } | |
38 | |
39 void ClientCertStoreChromeOS::GetClientCertsImpl(CERTCertList* cert_list, | |
40 const SSLCertRequestInfo& request, | |
41 bool query_nssdb, | |
42 CertificateList* selected_certs) { | |
43 ClientCertStoreNSS::GetClientCertsImpl( | |
44 cert_list, request, query_nssdb, selected_certs); | |
45 | |
46 size_t pre_size = selected_certs->size(); | |
47 selected_certs->erase( | |
48 std::remove_if(selected_certs->begin(), | |
49 selected_certs->end(), | |
50 NSSProfileFilterChromeOS::Predicate(profile_filter_)), | |
51 selected_certs->end()); | |
52 DVLOG(1) << "filtered " << pre_size - selected_certs->size() << " of " | |
53 << pre_size << " certs"; | |
54 } | |
55 | |
56 void ClientCertStoreChromeOS::DidGetPrivateSlot( | |
57 const SSLCertRequestInfo* request, | |
58 CertificateList* selected_certs, | |
59 const base::Closure& callback, | |
60 crypto::ScopedPK11Slot private_slot) { | |
61 profile_filter_.Init(crypto::GetPublicSlotForChromeOSUser(username_hash_), | |
62 private_slot.Pass()); | |
63 ClientCertStoreNSS::GetClientCerts(*request, selected_certs, callback); | |
64 } | |
65 | |
66 void ClientCertStoreChromeOS::InitForTesting( | |
67 crypto::ScopedPK11Slot public_slot, | |
68 crypto::ScopedPK11Slot private_slot) { | |
69 profile_filter_.Init(public_slot.Pass(), private_slot.Pass()); | |
70 } | |
71 | |
72 bool ClientCertStoreChromeOS::SelectClientCertsForTesting( | |
73 const CertificateList& input_certs, | |
74 const SSLCertRequestInfo& request, | |
75 CertificateList* selected_certs) { | |
76 CERTCertList* cert_list = CERT_NewCertList(); | |
77 if (!cert_list) | |
78 return false; | |
79 for (size_t i = 0; i < input_certs.size(); ++i) { | |
80 CERT_AddCertToListTail( | |
81 cert_list, CERT_DupCertificate(input_certs[i]->os_cert_handle())); | |
82 } | |
83 | |
84 GetClientCertsImpl(cert_list, request, false, selected_certs); | |
85 CERT_DestroyCertList(cert_list); | |
86 return true; | |
87 } | |
88 | |
89 | |
90 } // namespace net | |
OLD | NEW |