Chromium Code Reviews| 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 "crypto/nss_util.h" | 5 #include "crypto/nss_util.h" |
| 6 #include "crypto/nss_util_internal.h" | 6 #include "crypto/nss_util_internal.h" |
| 7 | 7 |
| 8 #include <nss.h> | 8 #include <nss.h> |
| 9 #include <pk11pub.h> | 9 #include <pk11pub.h> |
| 10 #include <plarena.h> | 10 #include <plarena.h> |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 340 TPMModuleAndSlot* tpm_args_ptr = tpm_args.get(); | 340 TPMModuleAndSlot* tpm_args_ptr = tpm_args.get(); |
| 341 if (base::WorkerPool::PostTaskAndReply( | 341 if (base::WorkerPool::PostTaskAndReply( |
| 342 FROM_HERE, | 342 FROM_HERE, |
| 343 base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread, | 343 base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread, |
| 344 system_slot_id, | 344 system_slot_id, |
| 345 tpm_args_ptr), | 345 tpm_args_ptr), |
| 346 base::Bind(&NSSInitSingleton::OnInitializedTPMTokenAndSystemSlot, | 346 base::Bind(&NSSInitSingleton::OnInitializedTPMTokenAndSystemSlot, |
| 347 base::Unretained(this), // NSSInitSingleton is leaky | 347 base::Unretained(this), // NSSInitSingleton is leaky |
| 348 callback, | 348 callback, |
| 349 base::Passed(&tpm_args)), | 349 base::Passed(&tpm_args)), |
| 350 true /* task_is_slow */ | 350 true /* task_is_slow */)) { |
| 351 )) { | |
| 352 initializing_tpm_token_ = true; | 351 initializing_tpm_token_ = true; |
| 353 } else { | 352 } else { |
| 354 base::MessageLoop::current()->PostTask(FROM_HERE, | 353 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 355 base::Bind(callback, false)); | 354 base::Bind(callback, false)); |
| 356 } | 355 } |
| 357 } | 356 } |
| 358 | 357 |
| 359 static void InitializeTPMTokenOnWorkerThread(CK_SLOT_ID token_slot_id, | 358 static void InitializeTPMTokenOnWorkerThread(CK_SLOT_ID token_slot_id, |
| 360 TPMModuleAndSlot* tpm_args) { | 359 TPMModuleAndSlot* tpm_args) { |
| 361 // This tries to load the Chaps module so NSS can talk to the hardware | 360 // This tries to load the Chaps module so NSS can talk to the hardware |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 500 TPMModuleAndSlot* tpm_args_ptr = tpm_args.get(); | 499 TPMModuleAndSlot* tpm_args_ptr = tpm_args.get(); |
| 501 base::WorkerPool::PostTaskAndReply( | 500 base::WorkerPool::PostTaskAndReply( |
| 502 FROM_HERE, | 501 FROM_HERE, |
| 503 base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread, | 502 base::Bind(&NSSInitSingleton::InitializeTPMTokenOnWorkerThread, |
| 504 slot_id, | 503 slot_id, |
| 505 tpm_args_ptr), | 504 tpm_args_ptr), |
| 506 base::Bind(&NSSInitSingleton::OnInitializedTPMForChromeOSUser, | 505 base::Bind(&NSSInitSingleton::OnInitializedTPMForChromeOSUser, |
| 507 base::Unretained(this), // NSSInitSingleton is leaky | 506 base::Unretained(this), // NSSInitSingleton is leaky |
| 508 username_hash, | 507 username_hash, |
| 509 base::Passed(&tpm_args)), | 508 base::Passed(&tpm_args)), |
| 510 true /* task_is_slow */ | 509 true /* task_is_slow */); |
| 511 ); | |
| 512 } | 510 } |
| 513 | 511 |
| 514 void OnInitializedTPMForChromeOSUser(const std::string& username_hash, | 512 void OnInitializedTPMForChromeOSUser(const std::string& username_hash, |
| 515 scoped_ptr<TPMModuleAndSlot> tpm_args) { | 513 scoped_ptr<TPMModuleAndSlot> tpm_args) { |
| 516 DCHECK(thread_checker_.CalledOnValidThread()); | 514 DCHECK(thread_checker_.CalledOnValidThread()); |
| 517 DVLOG(2) << "Got tpm slot for " << username_hash << " " | 515 DVLOG(2) << "Got tpm slot for " << username_hash << " " |
| 518 << !!tpm_args->tpm_slot; | 516 << !!tpm_args->tpm_slot; |
| 519 chromeos_user_map_[username_hash]->SetPrivateSlot( | 517 chromeos_user_map_[username_hash]->SetPrivateSlot( |
| 520 tpm_args->tpm_slot.Pass()); | 518 tpm_args->tpm_slot.Pass()); |
| 521 } | 519 } |
| 522 | 520 |
| 523 void InitializePrivateSoftwareSlotForChromeOSUser( | 521 void InitializePrivateSoftwareSlotForChromeOSUser( |
| 524 const std::string& username_hash) { | 522 const std::string& username_hash) { |
| 525 DCHECK(thread_checker_.CalledOnValidThread()); | 523 DCHECK(thread_checker_.CalledOnValidThread()); |
| 526 VLOG(1) << "using software private slot for " << username_hash; | 524 VLOG(1) << "using software private slot for " << username_hash; |
| 527 DCHECK(chromeos_user_map_.find(username_hash) != chromeos_user_map_.end()); | 525 DCHECK(chromeos_user_map_.find(username_hash) != chromeos_user_map_.end()); |
| 528 DCHECK(chromeos_user_map_[username_hash]-> | 526 DCHECK(chromeos_user_map_[username_hash]-> |
| 529 private_slot_initialization_started()); | 527 private_slot_initialization_started()); |
| 530 | 528 |
| 531 chromeos_user_map_[username_hash]->SetPrivateSlot( | 529 chromeos_user_map_[username_hash]->SetPrivateSlot( |
| 532 chromeos_user_map_[username_hash]->GetPublicSlot()); | 530 chromeos_user_map_[username_hash]->GetPublicSlot()); |
| 533 } | 531 } |
| 534 | 532 |
| 535 ScopedPK11Slot GetPublicSlotForChromeOSUser( | 533 ScopedPK11Slot GetPublicSlotForChromeOSUser( |
| 536 const std::string& username_hash) { | 534 const std::string& username_hash) { |
| 537 DCHECK(thread_checker_.CalledOnValidThread()); | 535 DCHECK(thread_checker_.CalledOnValidThread()); |
| 538 | 536 |
| 539 if (username_hash.empty()) { | 537 if (username_hash.empty()) { |
| 540 DVLOG(2) << "empty username_hash"; | 538 DVLOG(2) << "empty username_hash"; |
| 541 return ScopedPK11Slot(); | 539 return ScopedPK11Slot(PK11_GetInternalKeySlot()); |
|
pneubeck (no reviews)
2014/12/02 11:56:47
the fact that you have to change this to make the
| |
| 542 } | 540 } |
| 543 | 541 |
| 544 if (chromeos_user_map_.find(username_hash) == chromeos_user_map_.end()) { | 542 if (chromeos_user_map_.find(username_hash) == chromeos_user_map_.end()) { |
| 545 LOG(ERROR) << username_hash << " not initialized."; | 543 LOG(ERROR) << username_hash << " not initialized."; |
| 546 return ScopedPK11Slot(); | 544 return ScopedPK11Slot(); |
| 547 } | 545 } |
| 548 return chromeos_user_map_[username_hash]->GetPublicSlot(); | 546 return chromeos_user_map_[username_hash]->GetPublicSlot(); |
| 549 } | 547 } |
| 550 | 548 |
| 551 ScopedPK11Slot GetPrivateSlotForChromeOSUser( | 549 ScopedPK11Slot GetPrivateSlotForChromeOSUser( |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1096 return time.ToInternalValue() - base::Time::UnixEpoch().ToInternalValue(); | 1094 return time.ToInternalValue() - base::Time::UnixEpoch().ToInternalValue(); |
| 1097 } | 1095 } |
| 1098 | 1096 |
| 1099 #if !defined(OS_CHROMEOS) | 1097 #if !defined(OS_CHROMEOS) |
| 1100 PK11SlotInfo* GetPersistentNSSKeySlot() { | 1098 PK11SlotInfo* GetPersistentNSSKeySlot() { |
| 1101 return g_nss_singleton.Get().GetPersistentNSSKeySlot(); | 1099 return g_nss_singleton.Get().GetPersistentNSSKeySlot(); |
| 1102 } | 1100 } |
| 1103 #endif | 1101 #endif |
| 1104 | 1102 |
| 1105 } // namespace crypto | 1103 } // namespace crypto |
| OLD | NEW |