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/attestation/attestation_flow.h" | 5 #include "chromeos/attestation/attestation_flow.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "chromeos/cryptohome/async_method_caller.h" | 8 #include "chromeos/cryptohome/async_method_caller.h" |
9 #include "chromeos/dbus/cryptohome_client.h" | 9 #include "chromeos/dbus/cryptohome_client.h" |
| 10 #include "components/user_manager/user_id.h" |
10 | 11 |
11 namespace chromeos { | 12 namespace chromeos { |
12 namespace attestation { | 13 namespace attestation { |
13 | 14 |
14 namespace { | 15 namespace { |
15 | 16 |
16 // Redirects to one of three callbacks based on a boolean value and dbus call | 17 // Redirects to one of three callbacks based on a boolean value and dbus call |
17 // status. | 18 // status. |
18 // | 19 // |
19 // Parameters | 20 // Parameters |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 cryptohome_client_(cryptohome_client), | 90 cryptohome_client_(cryptohome_client), |
90 server_proxy_(server_proxy.Pass()), | 91 server_proxy_(server_proxy.Pass()), |
91 weak_factory_(this) { | 92 weak_factory_(this) { |
92 } | 93 } |
93 | 94 |
94 AttestationFlow::~AttestationFlow() { | 95 AttestationFlow::~AttestationFlow() { |
95 } | 96 } |
96 | 97 |
97 void AttestationFlow::GetCertificate( | 98 void AttestationFlow::GetCertificate( |
98 AttestationCertificateProfile certificate_profile, | 99 AttestationCertificateProfile certificate_profile, |
99 const std::string& user_id, | 100 const user_manager::UserID& user_id, |
100 const std::string& request_origin, | 101 const std::string& request_origin, |
101 bool force_new_key, | 102 bool force_new_key, |
102 const CertificateCallback& callback) { | 103 const CertificateCallback& callback) { |
103 // If this device has not enrolled with the Privacy CA, we need to do that | 104 // If this device has not enrolled with the Privacy CA, we need to do that |
104 // first. Once enrolled we can proceed with the certificate request. | 105 // first. Once enrolled we can proceed with the certificate request. |
105 base::Closure do_cert_request = base::Bind( | 106 base::Closure do_cert_request = base::Bind( |
106 &AttestationFlow::StartCertificateRequest, | 107 &AttestationFlow::StartCertificateRequest, |
107 weak_factory_.GetWeakPtr(), | 108 weak_factory_.GetWeakPtr(), |
108 certificate_profile, | 109 certificate_profile, |
109 user_id, | 110 user_id, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 return; | 187 return; |
187 } | 188 } |
188 | 189 |
189 // Enrollment has successfully completed, we can move on to whatever is next. | 190 // Enrollment has successfully completed, we can move on to whatever is next. |
190 if (!next_task.is_null()) | 191 if (!next_task.is_null()) |
191 next_task.Run(); | 192 next_task.Run(); |
192 } | 193 } |
193 | 194 |
194 void AttestationFlow::StartCertificateRequest( | 195 void AttestationFlow::StartCertificateRequest( |
195 AttestationCertificateProfile certificate_profile, | 196 AttestationCertificateProfile certificate_profile, |
196 const std::string& user_id, | 197 const user_manager::UserID& user_id, |
197 const std::string& request_origin, | 198 const std::string& request_origin, |
198 bool generate_new_key, | 199 bool generate_new_key, |
199 const CertificateCallback& callback) { | 200 const CertificateCallback& callback) { |
200 AttestationKeyType key_type = GetKeyTypeForProfile(certificate_profile); | 201 AttestationKeyType key_type = GetKeyTypeForProfile(certificate_profile); |
201 std::string key_name = GetKeyNameForProfile(certificate_profile, | 202 std::string key_name = GetKeyNameForProfile(certificate_profile, |
202 request_origin); | 203 request_origin); |
203 if (generate_new_key) { | 204 if (generate_new_key) { |
204 // Get the attestation service to create a Privacy CA certificate request. | 205 // Get the attestation service to create a Privacy CA certificate request. |
205 async_caller_->AsyncTpmAttestationCreateCertRequest( | 206 async_caller_->AsyncTpmAttestationCreateCertRequest( |
206 server_proxy_->GetType(), | 207 server_proxy_->GetType(), |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 key_name, | 239 key_name, |
239 base::Bind(&DBusBoolRedirectCallback, | 240 base::Bind(&DBusBoolRedirectCallback, |
240 on_key_exists, | 241 on_key_exists, |
241 on_key_not_exists, | 242 on_key_not_exists, |
242 base::Bind(callback, false, ""))); | 243 base::Bind(callback, false, ""))); |
243 } | 244 } |
244 } | 245 } |
245 | 246 |
246 void AttestationFlow::SendCertificateRequestToPCA( | 247 void AttestationFlow::SendCertificateRequestToPCA( |
247 AttestationKeyType key_type, | 248 AttestationKeyType key_type, |
248 const std::string& user_id, | 249 const user_manager::UserID& user_id, |
249 const std::string& key_name, | 250 const std::string& key_name, |
250 const CertificateCallback& callback, | 251 const CertificateCallback& callback, |
251 bool success, | 252 bool success, |
252 const std::string& data) { | 253 const std::string& data) { |
253 if (!success) { | 254 if (!success) { |
254 LOG(ERROR) << "Attestation: Failed to create certificate request."; | 255 LOG(ERROR) << "Attestation: Failed to create certificate request."; |
255 if (!callback.is_null()) | 256 if (!callback.is_null()) |
256 callback.Run(false, ""); | 257 callback.Run(false, ""); |
257 return; | 258 return; |
258 } | 259 } |
259 | 260 |
260 // Send the request to the Privacy CA. | 261 // Send the request to the Privacy CA. |
261 server_proxy_->SendCertificateRequest( | 262 server_proxy_->SendCertificateRequest( |
262 data, | 263 data, |
263 base::Bind(&AttestationFlow::SendCertificateResponseToDaemon, | 264 base::Bind(&AttestationFlow::SendCertificateResponseToDaemon, |
264 weak_factory_.GetWeakPtr(), | 265 weak_factory_.GetWeakPtr(), |
265 key_type, | 266 key_type, |
266 user_id, | 267 user_id, |
267 key_name, | 268 key_name, |
268 callback)); | 269 callback)); |
269 } | 270 } |
270 | 271 |
271 void AttestationFlow::SendCertificateResponseToDaemon( | 272 void AttestationFlow::SendCertificateResponseToDaemon( |
272 AttestationKeyType key_type, | 273 AttestationKeyType key_type, |
273 const std::string& user_id, | 274 const user_manager::UserID& user_id, |
274 const std::string& key_name, | 275 const std::string& key_name, |
275 const CertificateCallback& callback, | 276 const CertificateCallback& callback, |
276 bool success, | 277 bool success, |
277 const std::string& data) { | 278 const std::string& data) { |
278 if (!success) { | 279 if (!success) { |
279 LOG(ERROR) << "Attestation: Certificate request failed."; | 280 LOG(ERROR) << "Attestation: Certificate request failed."; |
280 if (!callback.is_null()) | 281 if (!callback.is_null()) |
281 callback.Run(false, ""); | 282 callback.Run(false, ""); |
282 return; | 283 return; |
283 } | 284 } |
284 | 285 |
285 // Forward the response to the attestation service to complete the operation. | 286 // Forward the response to the attestation service to complete the operation. |
286 async_caller_->AsyncTpmAttestationFinishCertRequest(data, | 287 async_caller_->AsyncTpmAttestationFinishCertRequest(data, |
287 key_type, | 288 key_type, |
288 user_id, | 289 user_id, |
289 key_name, | 290 key_name, |
290 base::Bind(callback)); | 291 base::Bind(callback)); |
291 } | 292 } |
292 | 293 |
293 void AttestationFlow::GetExistingCertificate( | 294 void AttestationFlow::GetExistingCertificate( |
294 AttestationKeyType key_type, | 295 AttestationKeyType key_type, |
295 const std::string& user_id, | 296 const user_manager::UserID& user_id, |
296 const std::string& key_name, | 297 const std::string& key_name, |
297 const CertificateCallback& callback) { | 298 const CertificateCallback& callback) { |
298 cryptohome_client_->TpmAttestationGetCertificate( | 299 cryptohome_client_->TpmAttestationGetCertificate( |
299 key_type, | 300 key_type, |
300 user_id, | 301 user_id, |
301 key_name, | 302 key_name, |
302 base::Bind(&DBusDataMethodCallback, callback)); | 303 base::Bind(&DBusDataMethodCallback, callback)); |
303 } | 304 } |
304 | 305 |
305 ServerProxy::~ServerProxy() {} | 306 ServerProxy::~ServerProxy() {} |
306 | 307 |
307 PrivacyCAType ServerProxy::GetType() { | 308 PrivacyCAType ServerProxy::GetType() { |
308 return DEFAULT_PCA; | 309 return DEFAULT_PCA; |
309 } | 310 } |
310 | 311 |
311 } // namespace attestation | 312 } // namespace attestation |
312 } // namespace chromeos | 313 } // namespace chromeos |
OLD | NEW |