OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chromeos/cryptohome/async_method_caller.h" | 5 #include "chromeos/cryptohome/async_method_caller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/containers/hash_tables.h" | 8 #include "base/containers/hash_tables.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
11 #include "base/single_thread_task_runner.h" | 11 #include "base/single_thread_task_runner.h" |
12 #include "base/thread_task_runner_handle.h" | 12 #include "base/thread_task_runner_handle.h" |
| 13 #include "chromeos/cryptohome/cryptohome_parameters.h" |
13 #include "chromeos/dbus/dbus_thread_manager.h" | 14 #include "chromeos/dbus/dbus_thread_manager.h" |
14 | 15 |
15 using chromeos::DBusThreadManager; | 16 using chromeos::DBusThreadManager; |
16 | 17 |
17 namespace cryptohome { | 18 namespace cryptohome { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 AsyncMethodCaller* g_async_method_caller = NULL; | 22 AsyncMethodCaller* g_async_method_caller = NULL; |
22 | 23 |
23 // The implementation of AsyncMethodCaller | 24 // The implementation of AsyncMethodCaller |
24 class AsyncMethodCallerImpl : public AsyncMethodCaller { | 25 class AsyncMethodCallerImpl : public AsyncMethodCaller { |
25 public: | 26 public: |
26 AsyncMethodCallerImpl() : weak_ptr_factory_(this) { | 27 AsyncMethodCallerImpl() : weak_ptr_factory_(this) { |
27 DBusThreadManager::Get()->GetCryptohomeClient()->SetAsyncCallStatusHandlers( | 28 DBusThreadManager::Get()->GetCryptohomeClient()->SetAsyncCallStatusHandlers( |
28 base::Bind(&AsyncMethodCallerImpl::HandleAsyncResponse, | 29 base::Bind(&AsyncMethodCallerImpl::HandleAsyncResponse, |
29 weak_ptr_factory_.GetWeakPtr()), | 30 weak_ptr_factory_.GetWeakPtr()), |
30 base::Bind(&AsyncMethodCallerImpl::HandleAsyncDataResponse, | 31 base::Bind(&AsyncMethodCallerImpl::HandleAsyncDataResponse, |
31 weak_ptr_factory_.GetWeakPtr())); | 32 weak_ptr_factory_.GetWeakPtr())); |
32 } | 33 } |
33 | 34 |
34 ~AsyncMethodCallerImpl() override { | 35 ~AsyncMethodCallerImpl() override { |
35 DBusThreadManager::Get()->GetCryptohomeClient()-> | 36 DBusThreadManager::Get()->GetCryptohomeClient()-> |
36 ResetAsyncCallStatusHandlers(); | 37 ResetAsyncCallStatusHandlers(); |
37 } | 38 } |
38 | 39 |
39 void AsyncCheckKey(const std::string& user_email, | 40 void AsyncCheckKey(const Identification& cryptohome_id, |
40 const std::string& passhash, | 41 const std::string& passhash, |
41 Callback callback) override { | 42 Callback callback) override { |
42 DBusThreadManager::Get()->GetCryptohomeClient()-> | 43 DBusThreadManager::Get()->GetCryptohomeClient()->AsyncCheckKey( |
43 AsyncCheckKey(user_email, passhash, base::Bind( | 44 cryptohome_id, passhash, |
44 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 45 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
45 weak_ptr_factory_.GetWeakPtr(), | 46 weak_ptr_factory_.GetWeakPtr(), callback, |
46 callback, | 47 "Couldn't initiate async check of user's key.")); |
47 "Couldn't initiate async check of user's key.")); | |
48 } | 48 } |
49 | 49 |
50 void AsyncMigrateKey(const std::string& user_email, | 50 void AsyncMigrateKey(const Identification& cryptohome_id, |
51 const std::string& old_hash, | 51 const std::string& old_hash, |
52 const std::string& new_hash, | 52 const std::string& new_hash, |
53 Callback callback) override { | 53 Callback callback) override { |
54 DBusThreadManager::Get()->GetCryptohomeClient()-> | 54 DBusThreadManager::Get()->GetCryptohomeClient()->AsyncMigrateKey( |
55 AsyncMigrateKey(user_email, old_hash, new_hash, base::Bind( | 55 cryptohome_id, old_hash, new_hash, |
56 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 56 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
57 weak_ptr_factory_.GetWeakPtr(), | 57 weak_ptr_factory_.GetWeakPtr(), callback, |
58 callback, | 58 "Couldn't initiate aync migration of user's key")); |
59 "Couldn't initiate aync migration of user's key")); | |
60 } | 59 } |
61 | 60 |
62 void AsyncMount(const std::string& user_email, | 61 void AsyncMount(const Identification& cryptohome_id, |
63 const std::string& passhash, | 62 const std::string& passhash, |
64 int flags, | 63 int flags, |
65 Callback callback) override { | 64 Callback callback) override { |
66 DBusThreadManager::Get()->GetCryptohomeClient()-> | 65 DBusThreadManager::Get()->GetCryptohomeClient()->AsyncMount( |
67 AsyncMount(user_email, passhash, flags, base::Bind( | 66 cryptohome_id, passhash, flags, |
68 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 67 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
69 weak_ptr_factory_.GetWeakPtr(), | 68 weak_ptr_factory_.GetWeakPtr(), callback, |
70 callback, | 69 "Couldn't initiate async mount of cryptohome.")); |
71 "Couldn't initiate async mount of cryptohome.")); | |
72 } | 70 } |
73 | 71 |
74 void AsyncAddKey(const std::string& user_email, | 72 void AsyncAddKey(const Identification& cryptohome_id, |
75 const std::string& passhash, | 73 const std::string& passhash, |
76 const std::string& new_passhash, | 74 const std::string& new_passhash, |
77 Callback callback) override { | 75 Callback callback) override { |
78 DBusThreadManager::Get()->GetCryptohomeClient()-> | 76 DBusThreadManager::Get()->GetCryptohomeClient()->AsyncAddKey( |
79 AsyncAddKey(user_email, passhash, new_passhash, base::Bind( | 77 cryptohome_id, passhash, new_passhash, |
80 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 78 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
81 weak_ptr_factory_.GetWeakPtr(), | 79 weak_ptr_factory_.GetWeakPtr(), callback, |
82 callback, | 80 "Couldn't initiate async key addition.")); |
83 "Couldn't initiate async key addition.")); | |
84 } | 81 } |
85 | 82 |
86 void AsyncMountGuest(Callback callback) override { | 83 void AsyncMountGuest(Callback callback) override { |
87 DBusThreadManager::Get()->GetCryptohomeClient()-> | 84 DBusThreadManager::Get()->GetCryptohomeClient()-> |
88 AsyncMountGuest(base::Bind( | 85 AsyncMountGuest(base::Bind( |
89 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 86 &AsyncMethodCallerImpl::RegisterAsyncCallback, |
90 weak_ptr_factory_.GetWeakPtr(), | 87 weak_ptr_factory_.GetWeakPtr(), |
91 callback, | 88 callback, |
92 "Couldn't initiate async mount of cryptohome.")); | 89 "Couldn't initiate async mount of cryptohome.")); |
93 } | 90 } |
94 | 91 |
95 void AsyncMountPublic(const std::string& public_mount_id, | 92 void AsyncMountPublic(const Identification& public_mount_id, |
96 int flags, | 93 int flags, |
97 Callback callback) override { | 94 Callback callback) override { |
98 DBusThreadManager::Get()->GetCryptohomeClient()-> | 95 DBusThreadManager::Get()->GetCryptohomeClient()->AsyncMountPublic( |
99 AsyncMountPublic(public_mount_id, flags, base::Bind( | 96 public_mount_id, flags, |
100 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 97 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
101 weak_ptr_factory_.GetWeakPtr(), | 98 weak_ptr_factory_.GetWeakPtr(), callback, |
102 callback, | 99 "Couldn't initiate async mount public of cryptohome.")); |
103 "Couldn't initiate async mount public of cryptohome.")); | |
104 } | 100 } |
105 | 101 |
106 void AsyncRemove(const std::string& user_email, Callback callback) override { | 102 void AsyncRemove(const Identification& cryptohome_id, |
107 DBusThreadManager::Get()->GetCryptohomeClient()-> | 103 Callback callback) override { |
108 AsyncRemove(user_email, base::Bind( | 104 DBusThreadManager::Get()->GetCryptohomeClient()->AsyncRemove( |
109 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 105 cryptohome_id, |
110 weak_ptr_factory_.GetWeakPtr(), | 106 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
111 callback, | 107 weak_ptr_factory_.GetWeakPtr(), callback, |
112 "Couldn't initiate async removal of cryptohome.")); | 108 "Couldn't initiate async removal of cryptohome.")); |
113 } | 109 } |
114 | 110 |
115 void AsyncTpmAttestationCreateEnrollRequest( | 111 void AsyncTpmAttestationCreateEnrollRequest( |
116 chromeos::attestation::PrivacyCAType pca_type, | 112 chromeos::attestation::PrivacyCAType pca_type, |
117 const DataCallback& callback) override { | 113 const DataCallback& callback) override { |
118 DBusThreadManager::Get()->GetCryptohomeClient()-> | 114 DBusThreadManager::Get()->GetCryptohomeClient()-> |
119 AsyncTpmAttestationCreateEnrollRequest(pca_type, base::Bind( | 115 AsyncTpmAttestationCreateEnrollRequest(pca_type, base::Bind( |
120 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, | 116 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, |
121 weak_ptr_factory_.GetWeakPtr(), | 117 weak_ptr_factory_.GetWeakPtr(), |
122 callback, | 118 callback, |
123 "Couldn't initiate async attestation enroll request.")); | 119 "Couldn't initiate async attestation enroll request.")); |
124 } | 120 } |
125 | 121 |
126 void AsyncTpmAttestationEnroll(chromeos::attestation::PrivacyCAType pca_type, | 122 void AsyncTpmAttestationEnroll(chromeos::attestation::PrivacyCAType pca_type, |
127 const std::string& pca_response, | 123 const std::string& pca_response, |
128 const Callback& callback) override { | 124 const Callback& callback) override { |
129 DBusThreadManager::Get()->GetCryptohomeClient()-> | 125 DBusThreadManager::Get()->GetCryptohomeClient()-> |
130 AsyncTpmAttestationEnroll(pca_type, pca_response, base::Bind( | 126 AsyncTpmAttestationEnroll(pca_type, pca_response, base::Bind( |
131 &AsyncMethodCallerImpl::RegisterAsyncCallback, | 127 &AsyncMethodCallerImpl::RegisterAsyncCallback, |
132 weak_ptr_factory_.GetWeakPtr(), | 128 weak_ptr_factory_.GetWeakPtr(), |
133 callback, | 129 callback, |
134 "Couldn't initiate async attestation enroll.")); | 130 "Couldn't initiate async attestation enroll.")); |
135 } | 131 } |
136 | 132 |
137 void AsyncTpmAttestationCreateCertRequest( | 133 void AsyncTpmAttestationCreateCertRequest( |
138 chromeos::attestation::PrivacyCAType pca_type, | 134 chromeos::attestation::PrivacyCAType pca_type, |
139 chromeos::attestation::AttestationCertificateProfile certificate_profile, | 135 chromeos::attestation::AttestationCertificateProfile certificate_profile, |
140 const std::string& user_id, | 136 const Identification& cryptohome_id, |
141 const std::string& request_origin, | 137 const std::string& request_origin, |
142 const DataCallback& callback) override { | 138 const DataCallback& callback) override { |
143 DBusThreadManager::Get()->GetCryptohomeClient()-> | 139 DBusThreadManager::Get() |
144 AsyncTpmAttestationCreateCertRequest( | 140 ->GetCryptohomeClient() |
145 pca_type, | 141 ->AsyncTpmAttestationCreateCertRequest( |
146 certificate_profile, | 142 pca_type, certificate_profile, cryptohome_id, request_origin, |
147 user_id, | |
148 request_origin, | |
149 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncDataCallback, | 143 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncDataCallback, |
150 weak_ptr_factory_.GetWeakPtr(), | 144 weak_ptr_factory_.GetWeakPtr(), callback, |
151 callback, | |
152 "Couldn't initiate async attestation cert request.")); | 145 "Couldn't initiate async attestation cert request.")); |
153 } | 146 } |
154 | 147 |
155 void AsyncTpmAttestationFinishCertRequest( | 148 void AsyncTpmAttestationFinishCertRequest( |
156 const std::string& pca_response, | 149 const std::string& pca_response, |
157 chromeos::attestation::AttestationKeyType key_type, | 150 chromeos::attestation::AttestationKeyType key_type, |
158 const std::string& user_id, | 151 const Identification& cryptohome_id, |
159 const std::string& key_name, | 152 const std::string& key_name, |
160 const DataCallback& callback) override { | 153 const DataCallback& callback) override { |
161 DBusThreadManager::Get()->GetCryptohomeClient()-> | 154 DBusThreadManager::Get() |
162 AsyncTpmAttestationFinishCertRequest( | 155 ->GetCryptohomeClient() |
163 pca_response, | 156 ->AsyncTpmAttestationFinishCertRequest( |
164 key_type, | 157 pca_response, key_type, cryptohome_id, key_name, |
165 user_id, | |
166 key_name, | |
167 base::Bind( | 158 base::Bind( |
168 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, | 159 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, |
169 weak_ptr_factory_.GetWeakPtr(), | 160 weak_ptr_factory_.GetWeakPtr(), callback, |
170 callback, | |
171 "Couldn't initiate async attestation finish cert request.")); | 161 "Couldn't initiate async attestation finish cert request.")); |
172 } | 162 } |
173 | 163 |
174 void TpmAttestationRegisterKey( | 164 void TpmAttestationRegisterKey( |
175 chromeos::attestation::AttestationKeyType key_type, | 165 chromeos::attestation::AttestationKeyType key_type, |
176 const std::string& user_id, | 166 const Identification& cryptohome_id, |
177 const std::string& key_name, | 167 const std::string& key_name, |
178 const Callback& callback) override { | 168 const Callback& callback) override { |
179 DBusThreadManager::Get()->GetCryptohomeClient()-> | 169 DBusThreadManager::Get()->GetCryptohomeClient()->TpmAttestationRegisterKey( |
180 TpmAttestationRegisterKey( | 170 key_type, cryptohome_id, key_name, |
181 key_type, | 171 base::Bind(&AsyncMethodCallerImpl::RegisterAsyncCallback, |
182 user_id, | 172 weak_ptr_factory_.GetWeakPtr(), callback, |
183 key_name, | 173 "Couldn't initiate async attestation register key.")); |
184 base::Bind( | |
185 &AsyncMethodCallerImpl::RegisterAsyncCallback, | |
186 weak_ptr_factory_.GetWeakPtr(), | |
187 callback, | |
188 "Couldn't initiate async attestation register key.")); | |
189 } | 174 } |
190 | 175 |
191 void TpmAttestationSignEnterpriseChallenge( | 176 void TpmAttestationSignEnterpriseChallenge( |
192 chromeos::attestation::AttestationKeyType key_type, | 177 chromeos::attestation::AttestationKeyType key_type, |
193 const std::string& user_id, | 178 const Identification& cryptohome_id, |
194 const std::string& key_name, | 179 const std::string& key_name, |
195 const std::string& domain, | 180 const std::string& domain, |
196 const std::string& device_id, | 181 const std::string& device_id, |
197 chromeos::attestation::AttestationChallengeOptions options, | 182 chromeos::attestation::AttestationChallengeOptions options, |
198 const std::string& challenge, | 183 const std::string& challenge, |
199 const DataCallback& callback) override { | 184 const DataCallback& callback) override { |
200 DBusThreadManager::Get()->GetCryptohomeClient()-> | 185 DBusThreadManager::Get() |
201 TpmAttestationSignEnterpriseChallenge( | 186 ->GetCryptohomeClient() |
202 key_type, | 187 ->TpmAttestationSignEnterpriseChallenge( |
203 user_id, | 188 key_type, cryptohome_id, key_name, domain, device_id, options, |
204 key_name, | |
205 domain, | |
206 device_id, | |
207 options, | |
208 challenge, | 189 challenge, |
209 base::Bind( | 190 base::Bind( |
210 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, | 191 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, |
211 weak_ptr_factory_.GetWeakPtr(), | 192 weak_ptr_factory_.GetWeakPtr(), callback, |
212 callback, | |
213 "Couldn't initiate async attestation enterprise challenge.")); | 193 "Couldn't initiate async attestation enterprise challenge.")); |
214 } | 194 } |
215 | 195 |
216 void TpmAttestationSignSimpleChallenge( | 196 void TpmAttestationSignSimpleChallenge( |
217 chromeos::attestation::AttestationKeyType key_type, | 197 chromeos::attestation::AttestationKeyType key_type, |
218 const std::string& user_id, | 198 const Identification& cryptohome_id, |
219 const std::string& key_name, | 199 const std::string& key_name, |
220 const std::string& challenge, | 200 const std::string& challenge, |
221 const DataCallback& callback) override { | 201 const DataCallback& callback) override { |
222 DBusThreadManager::Get()->GetCryptohomeClient()-> | 202 DBusThreadManager::Get() |
223 TpmAttestationSignSimpleChallenge( | 203 ->GetCryptohomeClient() |
224 key_type, | 204 ->TpmAttestationSignSimpleChallenge( |
225 user_id, | 205 key_type, cryptohome_id, key_name, challenge, |
226 key_name, | |
227 challenge, | |
228 base::Bind( | 206 base::Bind( |
229 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, | 207 &AsyncMethodCallerImpl::RegisterAsyncDataCallback, |
230 weak_ptr_factory_.GetWeakPtr(), | 208 weak_ptr_factory_.GetWeakPtr(), callback, |
231 callback, | |
232 "Couldn't initiate async attestation simple challenge.")); | 209 "Couldn't initiate async attestation simple challenge.")); |
233 } | 210 } |
234 | 211 |
235 void AsyncGetSanitizedUsername(const std::string& user, | 212 void AsyncGetSanitizedUsername(const Identification& cryptohome_id, |
236 const DataCallback& callback) override { | 213 const DataCallback& callback) override { |
237 DBusThreadManager::Get()->GetCryptohomeClient()-> | 214 DBusThreadManager::Get()->GetCryptohomeClient()->GetSanitizedUsername( |
238 GetSanitizedUsername(user, | 215 cryptohome_id, |
239 base::Bind( | 216 base::Bind(&AsyncMethodCallerImpl::GetSanitizedUsernameCallback, |
240 &AsyncMethodCallerImpl::GetSanitizedUsernameCallback, | 217 weak_ptr_factory_.GetWeakPtr(), callback)); |
241 weak_ptr_factory_.GetWeakPtr(), | |
242 callback)); | |
243 } | 218 } |
244 | 219 |
245 virtual void GetSanitizedUsernameCallback( | 220 virtual void GetSanitizedUsernameCallback( |
246 const DataCallback& callback, | 221 const DataCallback& callback, |
247 const chromeos::DBusMethodCallStatus call_status, | 222 const chromeos::DBusMethodCallStatus call_status, |
248 const std::string& result) { | 223 const std::string& result) { |
249 callback.Run(true, result); | 224 callback.Run(true, result); |
250 } | 225 } |
251 | 226 |
252 private: | 227 private: |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 g_async_method_caller = NULL; | 363 g_async_method_caller = NULL; |
389 VLOG(1) << "AsyncMethodCaller Shutdown completed"; | 364 VLOG(1) << "AsyncMethodCaller Shutdown completed"; |
390 } | 365 } |
391 | 366 |
392 // static | 367 // static |
393 AsyncMethodCaller* AsyncMethodCaller::GetInstance() { | 368 AsyncMethodCaller* AsyncMethodCaller::GetInstance() { |
394 return g_async_method_caller; | 369 return g_async_method_caller; |
395 } | 370 } |
396 | 371 |
397 } // namespace cryptohome | 372 } // namespace cryptohome |
OLD | NEW |