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

Side by Side Diff: chromeos/dbus/fake_cryptohome_client.cc

Issue 2297193006: Do a better job at faking simple challenge signatures. (Closed)
Patch Set: Be a good modern C++ programmer and let go of const char*. Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/dbus/fake_cryptohome_client.h" 5 #include "chromeos/dbus/fake_cryptohome_client.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/files/file_util.h" 11 #include "base/files/file_util.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/path_service.h" 13 #include "base/path_service.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/threading/thread_restrictions.h" 15 #include "base/threading/thread_restrictions.h"
16 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
17 #include "chromeos/chromeos_paths.h" 17 #include "chromeos/chromeos_paths.h"
18 #include "chromeos/cryptohome/attestation.pb.h"
18 #include "chromeos/dbus/cryptohome/key.pb.h" 19 #include "chromeos/dbus/cryptohome/key.pb.h"
19 #include "chromeos/dbus/cryptohome/rpc.pb.h" 20 #include "chromeos/dbus/cryptohome/rpc.pb.h"
20 #include "third_party/cros_system_api/dbus/service_constants.h" 21 #include "third_party/cros_system_api/dbus/service_constants.h"
21 #include "third_party/protobuf/src/google/protobuf/io/coded_stream.h" 22 #include "third_party/protobuf/src/google/protobuf/io/coded_stream.h"
22 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream.h" 23 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream.h"
23 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite .h" 24 #include "third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite .h"
24 25
25 namespace chromeos { 26 namespace chromeos {
26 27
28 // Signature nonces are twenty bytes. This matches the attestation code.
29 const std::string FakeCryptohomeClient::kTwentyBytesNonce{
30 "+addtwentybytesnonce"};
31 const std::string FakeCryptohomeClient::kSignature{"signed"};
32
27 FakeCryptohomeClient::FakeCryptohomeClient() 33 FakeCryptohomeClient::FakeCryptohomeClient()
28 : service_is_available_(true), 34 : service_is_available_(true),
29 async_call_id_(1), 35 async_call_id_(1),
30 unmount_result_(true), 36 unmount_result_(true),
31 system_salt_(GetStubSystemSalt()), 37 system_salt_(GetStubSystemSalt()),
32 weak_ptr_factory_(this) { 38 weak_ptr_factory_(this) {
33 base::FilePath cache_path; 39 base::FilePath cache_path;
34 locked_ = PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, &cache_path) && 40 locked_ = PathService::Get(chromeos::FILE_INSTALL_ATTRIBUTES, &cache_path) &&
35 base::PathExists(cache_path); 41 base::PathExists(cache_path);
36 } 42 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 79
74 bool FakeCryptohomeClient::Unmount(bool* success) { 80 bool FakeCryptohomeClient::Unmount(bool* success) {
75 *success = unmount_result_; 81 *success = unmount_result_;
76 return true; 82 return true;
77 } 83 }
78 84
79 void FakeCryptohomeClient::AsyncCheckKey( 85 void FakeCryptohomeClient::AsyncCheckKey(
80 const cryptohome::Identification& cryptohome_id, 86 const cryptohome::Identification& cryptohome_id,
81 const std::string& key, 87 const std::string& key,
82 const AsyncMethodCallback& callback) { 88 const AsyncMethodCallback& callback) {
83 ReturnAsyncMethodResult(callback, false); 89 ReturnAsyncMethodResult(callback);
84 } 90 }
85 91
86 void FakeCryptohomeClient::AsyncMigrateKey( 92 void FakeCryptohomeClient::AsyncMigrateKey(
87 const cryptohome::Identification& cryptohome_id, 93 const cryptohome::Identification& cryptohome_id,
88 const std::string& from_key, 94 const std::string& from_key,
89 const std::string& to_key, 95 const std::string& to_key,
90 const AsyncMethodCallback& callback) { 96 const AsyncMethodCallback& callback) {
91 ReturnAsyncMethodResult(callback, false); 97 ReturnAsyncMethodResult(callback);
92 } 98 }
93 99
94 void FakeCryptohomeClient::AsyncRemove( 100 void FakeCryptohomeClient::AsyncRemove(
95 const cryptohome::Identification& cryptohome_id, 101 const cryptohome::Identification& cryptohome_id,
96 const AsyncMethodCallback& callback) { 102 const AsyncMethodCallback& callback) {
97 ReturnAsyncMethodResult(callback, false); 103 ReturnAsyncMethodResult(callback);
98 } 104 }
99 105
100 void FakeCryptohomeClient::RenameCryptohome( 106 void FakeCryptohomeClient::RenameCryptohome(
101 const cryptohome::Identification& cryptohome_id_from, 107 const cryptohome::Identification& cryptohome_id_from,
102 const cryptohome::Identification& cryptohome_id_to, 108 const cryptohome::Identification& cryptohome_id_to,
103 const ProtobufMethodCallback& callback) { 109 const ProtobufMethodCallback& callback) {
104 cryptohome::BaseReply reply; 110 cryptohome::BaseReply reply;
105 ReturnProtobufMethodCallback(reply, callback); 111 ReturnProtobufMethodCallback(reply, callback);
106 } 112 }
107 113
(...skipping 28 matching lines...) Expand all
136 std::string FakeCryptohomeClient::BlockingGetSanitizedUsername( 142 std::string FakeCryptohomeClient::BlockingGetSanitizedUsername(
137 const cryptohome::Identification& cryptohome_id) { 143 const cryptohome::Identification& cryptohome_id) {
138 return GetStubSanitizedUsername(cryptohome_id); 144 return GetStubSanitizedUsername(cryptohome_id);
139 } 145 }
140 146
141 void FakeCryptohomeClient::AsyncMount( 147 void FakeCryptohomeClient::AsyncMount(
142 const cryptohome::Identification& cryptohome_id, 148 const cryptohome::Identification& cryptohome_id,
143 const std::string& key, 149 const std::string& key,
144 int flags, 150 int flags,
145 const AsyncMethodCallback& callback) { 151 const AsyncMethodCallback& callback) {
146 ReturnAsyncMethodResult(callback, false); 152 ReturnAsyncMethodResult(callback);
147 } 153 }
148 154
149 void FakeCryptohomeClient::AsyncAddKey( 155 void FakeCryptohomeClient::AsyncAddKey(
150 const cryptohome::Identification& cryptohome_id, 156 const cryptohome::Identification& cryptohome_id,
151 const std::string& key, 157 const std::string& key,
152 const std::string& new_key, 158 const std::string& new_key,
153 const AsyncMethodCallback& callback) { 159 const AsyncMethodCallback& callback) {
154 ReturnAsyncMethodResult(callback, false); 160 ReturnAsyncMethodResult(callback);
155 } 161 }
156 162
157 void FakeCryptohomeClient::AsyncMountGuest( 163 void FakeCryptohomeClient::AsyncMountGuest(
158 const AsyncMethodCallback& callback) { 164 const AsyncMethodCallback& callback) {
159 ReturnAsyncMethodResult(callback, false); 165 ReturnAsyncMethodResult(callback);
160 } 166 }
161 167
162 void FakeCryptohomeClient::AsyncMountPublic( 168 void FakeCryptohomeClient::AsyncMountPublic(
163 const cryptohome::Identification& public_mount_id, 169 const cryptohome::Identification& public_mount_id,
164 int flags, 170 int flags,
165 const AsyncMethodCallback& callback) { 171 const AsyncMethodCallback& callback) {
166 ReturnAsyncMethodResult(callback, false); 172 ReturnAsyncMethodResult(callback);
167 } 173 }
168 174
169 void FakeCryptohomeClient::TpmIsReady( 175 void FakeCryptohomeClient::TpmIsReady(
170 const BoolDBusMethodCallback& callback) { 176 const BoolDBusMethodCallback& callback) {
171 base::ThreadTaskRunnerHandle::Get()->PostTask( 177 base::ThreadTaskRunnerHandle::Get()->PostTask(
172 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 178 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
173 } 179 }
174 180
175 void FakeCryptohomeClient::TpmIsEnabled( 181 void FakeCryptohomeClient::TpmIsEnabled(
176 const BoolDBusMethodCallback& callback) { 182 const BoolDBusMethodCallback& callback) {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 365
360 void FakeCryptohomeClient::TpmAttestationIsEnrolled( 366 void FakeCryptohomeClient::TpmAttestationIsEnrolled(
361 const BoolDBusMethodCallback& callback) { 367 const BoolDBusMethodCallback& callback) {
362 base::ThreadTaskRunnerHandle::Get()->PostTask( 368 base::ThreadTaskRunnerHandle::Get()->PostTask(
363 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 369 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
364 } 370 }
365 371
366 void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest( 372 void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest(
367 chromeos::attestation::PrivacyCAType pca_type, 373 chromeos::attestation::PrivacyCAType pca_type,
368 const AsyncMethodCallback& callback) { 374 const AsyncMethodCallback& callback) {
369 ReturnAsyncMethodResult(callback, true); 375 ReturnAsyncMethodData(callback, std::string());
370 } 376 }
371 377
372 void FakeCryptohomeClient::AsyncTpmAttestationEnroll( 378 void FakeCryptohomeClient::AsyncTpmAttestationEnroll(
373 chromeos::attestation::PrivacyCAType pca_type, 379 chromeos::attestation::PrivacyCAType pca_type,
374 const std::string& pca_response, 380 const std::string& pca_response,
375 const AsyncMethodCallback& callback) { 381 const AsyncMethodCallback& callback) {
376 ReturnAsyncMethodResult(callback, false); 382 ReturnAsyncMethodResult(callback);
377 } 383 }
378 384
379 void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest( 385 void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest(
380 chromeos::attestation::PrivacyCAType pca_type, 386 chromeos::attestation::PrivacyCAType pca_type,
381 attestation::AttestationCertificateProfile certificate_profile, 387 attestation::AttestationCertificateProfile certificate_profile,
382 const cryptohome::Identification& cryptohome_id, 388 const cryptohome::Identification& cryptohome_id,
383 const std::string& request_origin, 389 const std::string& request_origin,
384 const AsyncMethodCallback& callback) { 390 const AsyncMethodCallback& callback) {
385 ReturnAsyncMethodResult(callback, true); 391 ReturnAsyncMethodData(callback, std::string());
386 } 392 }
387 393
388 void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest( 394 void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest(
389 const std::string& pca_response, 395 const std::string& pca_response,
390 attestation::AttestationKeyType key_type, 396 attestation::AttestationKeyType key_type,
391 const cryptohome::Identification& cryptohome_id, 397 const cryptohome::Identification& cryptohome_id,
392 const std::string& key_name, 398 const std::string& key_name,
393 const AsyncMethodCallback& callback) { 399 const AsyncMethodCallback& callback) {
394 ReturnAsyncMethodResult(callback, true); 400 ReturnAsyncMethodData(callback, std::string());
395 } 401 }
396 402
397 void FakeCryptohomeClient::TpmAttestationDoesKeyExist( 403 void FakeCryptohomeClient::TpmAttestationDoesKeyExist(
398 attestation::AttestationKeyType key_type, 404 attestation::AttestationKeyType key_type,
399 const cryptohome::Identification& cryptohome_id, 405 const cryptohome::Identification& cryptohome_id,
400 const std::string& key_name, 406 const std::string& key_name,
401 const BoolDBusMethodCallback& callback) { 407 const BoolDBusMethodCallback& callback) {
402 base::ThreadTaskRunnerHandle::Get()->PostTask( 408 base::ThreadTaskRunnerHandle::Get()->PostTask(
403 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 409 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false));
404 } 410 }
(...skipping 16 matching lines...) Expand all
421 base::ThreadTaskRunnerHandle::Get()->PostTask( 427 base::ThreadTaskRunnerHandle::Get()->PostTask(
422 FROM_HERE, 428 FROM_HERE,
423 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 429 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string()));
424 } 430 }
425 431
426 void FakeCryptohomeClient::TpmAttestationRegisterKey( 432 void FakeCryptohomeClient::TpmAttestationRegisterKey(
427 attestation::AttestationKeyType key_type, 433 attestation::AttestationKeyType key_type,
428 const cryptohome::Identification& cryptohome_id, 434 const cryptohome::Identification& cryptohome_id,
429 const std::string& key_name, 435 const std::string& key_name,
430 const AsyncMethodCallback& callback) { 436 const AsyncMethodCallback& callback) {
431 ReturnAsyncMethodResult(callback, true); 437 ReturnAsyncMethodData(callback, std::string());
432 } 438 }
433 439
434 void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge( 440 void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge(
435 attestation::AttestationKeyType key_type, 441 attestation::AttestationKeyType key_type,
436 const cryptohome::Identification& cryptohome_id, 442 const cryptohome::Identification& cryptohome_id,
437 const std::string& key_name, 443 const std::string& key_name,
438 const std::string& domain, 444 const std::string& domain,
439 const std::string& device_id, 445 const std::string& device_id,
440 attestation::AttestationChallengeOptions options, 446 attestation::AttestationChallengeOptions options,
441 const std::string& challenge, 447 const std::string& challenge,
442 const AsyncMethodCallback& callback) { 448 const AsyncMethodCallback& callback) {
443 ReturnAsyncMethodResult(callback, true); 449 ReturnAsyncMethodData(callback, std::string());
444 } 450 }
445 451
446 void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge( 452 void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge(
447 attestation::AttestationKeyType key_type, 453 attestation::AttestationKeyType key_type,
448 const cryptohome::Identification& cryptohome_id, 454 const cryptohome::Identification& cryptohome_id,
449 const std::string& key_name, 455 const std::string& key_name,
450 const std::string& challenge, 456 const std::string& challenge,
451 const AsyncMethodCallback& callback) { 457 const AsyncMethodCallback& callback) {
452 ReturnAsyncMethodResult(callback, true); 458 cryptohome::SignedData signed_data;
459 signed_data.set_data(challenge + kTwentyBytesNonce);
460 signed_data.set_signature(kSignature);
461 ReturnAsyncMethodData(callback, signed_data.SerializeAsString());
453 } 462 }
454 463
455 void FakeCryptohomeClient::TpmAttestationGetKeyPayload( 464 void FakeCryptohomeClient::TpmAttestationGetKeyPayload(
456 attestation::AttestationKeyType key_type, 465 attestation::AttestationKeyType key_type,
457 const cryptohome::Identification& cryptohome_id, 466 const cryptohome::Identification& cryptohome_id,
458 const std::string& key_name, 467 const std::string& key_name,
459 const DataMethodCallback& callback) { 468 const DataMethodCallback& callback) {
460 base::ThreadTaskRunnerHandle::Get()->PostTask( 469 base::ThreadTaskRunnerHandle::Get()->PostTask(
461 FROM_HERE, 470 FROM_HERE,
462 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 471 base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string()));
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 } 590 }
582 591
583 void FakeCryptohomeClient::ReturnProtobufMethodCallback( 592 void FakeCryptohomeClient::ReturnProtobufMethodCallback(
584 const cryptohome::BaseReply& reply, 593 const cryptohome::BaseReply& reply,
585 const ProtobufMethodCallback& callback) { 594 const ProtobufMethodCallback& callback) {
586 base::ThreadTaskRunnerHandle::Get()->PostTask( 595 base::ThreadTaskRunnerHandle::Get()->PostTask(
587 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true, reply)); 596 FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true, reply));
588 } 597 }
589 598
590 void FakeCryptohomeClient::ReturnAsyncMethodResult( 599 void FakeCryptohomeClient::ReturnAsyncMethodResult(
591 const AsyncMethodCallback& callback, 600 const AsyncMethodCallback& callback) {
592 bool returns_data) {
593 base::ThreadTaskRunnerHandle::Get()->PostTask( 601 base::ThreadTaskRunnerHandle::Get()->PostTask(
594 FROM_HERE, 602 FROM_HERE,
595 base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal, 603 base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal,
596 weak_ptr_factory_.GetWeakPtr(), callback, returns_data)); 604 weak_ptr_factory_.GetWeakPtr(), callback));
605 }
606
607 void FakeCryptohomeClient::ReturnAsyncMethodData(
608 const AsyncMethodCallback& callback,
609 const std::string& data) {
610 base::ThreadTaskRunnerHandle::Get()->PostTask(
611 FROM_HERE,
612 base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodDataInternal,
613 weak_ptr_factory_.GetWeakPtr(), callback, data));
597 } 614 }
598 615
599 void FakeCryptohomeClient::ReturnAsyncMethodResultInternal( 616 void FakeCryptohomeClient::ReturnAsyncMethodResultInternal(
600 const AsyncMethodCallback& callback, 617 const AsyncMethodCallback& callback) {
601 bool returns_data) {
602 callback.Run(async_call_id_); 618 callback.Run(async_call_id_);
603 if (!returns_data && !async_call_status_handler_.is_null()) { 619 if (!async_call_status_handler_.is_null()) {
604 base::ThreadTaskRunnerHandle::Get()->PostTask( 620 base::ThreadTaskRunnerHandle::Get()->PostTask(
605 FROM_HERE, base::Bind(async_call_status_handler_, async_call_id_, true, 621 FROM_HERE, base::Bind(async_call_status_handler_, async_call_id_, true,
606 cryptohome::MOUNT_ERROR_NONE)); 622 cryptohome::MOUNT_ERROR_NONE));
607 } else if (returns_data && !async_call_status_data_handler_.is_null()) {
608 base::ThreadTaskRunnerHandle::Get()->PostTask(
609 FROM_HERE, base::Bind(async_call_status_data_handler_, async_call_id_,
610 true, std::string()));
611 } 623 }
612 ++async_call_id_; 624 ++async_call_id_;
613 } 625 }
626
627 void FakeCryptohomeClient::ReturnAsyncMethodDataInternal(
628 const AsyncMethodCallback& callback,
629 const std::string& data) {
630 callback.Run(async_call_id_);
631 if (!async_call_status_data_handler_.is_null()) {
632 base::ThreadTaskRunnerHandle::Get()->PostTask(
633 FROM_HERE, base::Bind(async_call_status_data_handler_, async_call_id_,
634 true, data));
635 }
636 ++async_call_id_;
637 }
614 638
615 } // namespace chromeos 639 } // namespace chromeos
OLDNEW
« chromeos/dbus/fake_cryptohome_client.h ('K') | « chromeos/dbus/fake_cryptohome_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698