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

Side by Side Diff: components/sync/core_impl/sync_encryption_handler_impl_unittest.cc

Issue 2279713002: Make PassphraseType a "enum class" instead of "enum". (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix java 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "components/sync/core_impl/sync_encryption_handler_impl.h" 5 #include "components/sync/core_impl/sync_encryption_handler_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 const std::string& passphrase) { 147 const std::string& passphrase) {
148 ReadTransaction trans(FROM_HERE, user_share()); 148 ReadTransaction trans(FROM_HERE, user_share());
149 ReadNode nigori_node(&trans); 149 ReadNode nigori_node(&trans);
150 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 150 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
151 const sync_pb::NigoriSpecifics& nigori = nigori_node.GetNigoriSpecifics(); 151 const sync_pb::NigoriSpecifics& nigori = nigori_node.GetNigoriSpecifics();
152 if (migration_time > 0) 152 if (migration_time > 0)
153 EXPECT_EQ(migration_time, nigori.keystore_migration_time()); 153 EXPECT_EQ(migration_time, nigori.keystore_migration_time());
154 else 154 else
155 EXPECT_TRUE(nigori.has_keystore_migration_time()); 155 EXPECT_TRUE(nigori.has_keystore_migration_time());
156 EXPECT_TRUE(nigori.keybag_is_frozen()); 156 EXPECT_TRUE(nigori.keybag_is_frozen());
157 if (passphrase_type == CUSTOM_PASSPHRASE || 157 if (passphrase_type == PassphraseType::CUSTOM_PASSPHRASE ||
158 passphrase_type == FROZEN_IMPLICIT_PASSPHRASE) { 158 passphrase_type == PassphraseType::FROZEN_IMPLICIT_PASSPHRASE) {
159 EXPECT_TRUE(nigori.encrypt_everything()); 159 EXPECT_TRUE(nigori.encrypt_everything());
160 EXPECT_TRUE(nigori.keystore_decryptor_token().blob().empty()); 160 EXPECT_TRUE(nigori.keystore_decryptor_token().blob().empty());
161 if (passphrase_type == CUSTOM_PASSPHRASE) { 161 if (passphrase_type == PassphraseType::CUSTOM_PASSPHRASE) {
162 EXPECT_EQ(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE, 162 EXPECT_EQ(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE,
163 nigori.passphrase_type()); 163 nigori.passphrase_type());
164 if (!encryption_handler()->custom_passphrase_time().is_null()) { 164 if (!encryption_handler()->custom_passphrase_time().is_null()) {
165 EXPECT_EQ( 165 EXPECT_EQ(
166 nigori.custom_passphrase_time(), 166 nigori.custom_passphrase_time(),
167 TimeToProtoTime(encryption_handler()->custom_passphrase_time())); 167 TimeToProtoTime(encryption_handler()->custom_passphrase_time()));
168 } 168 }
169 } else { 169 } else {
170 EXPECT_EQ(sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE, 170 EXPECT_EQ(sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE,
171 nigori.passphrase_type()); 171 nigori.passphrase_type());
(...skipping 15 matching lines...) Expand all
187 temp_cryptographer.AddKey(params); 187 temp_cryptographer.AddKey(params);
188 EXPECT_TRUE(temp_cryptographer.CanDecryptUsingDefaultKey( 188 EXPECT_TRUE(temp_cryptographer.CanDecryptUsingDefaultKey(
189 nigori.encryption_keybag())); 189 nigori.encryption_keybag()));
190 } 190 }
191 191
192 sync_pb::NigoriSpecifics BuildMigratedNigori( 192 sync_pb::NigoriSpecifics BuildMigratedNigori(
193 PassphraseType passphrase_type, 193 PassphraseType passphrase_type,
194 int64_t migration_time, 194 int64_t migration_time,
195 const std::string& default_passphrase, 195 const std::string& default_passphrase,
196 const std::string& keystore_key) { 196 const std::string& keystore_key) {
197 DCHECK_NE(passphrase_type, IMPLICIT_PASSPHRASE); 197 DCHECK_NE(passphrase_type, PassphraseType::IMPLICIT_PASSPHRASE);
198 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 198 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
199 199
200 std::string default_key = default_passphrase; 200 std::string default_key = default_passphrase;
201 if (default_key.empty()) { 201 if (default_key.empty()) {
202 default_key = keystore_key; 202 default_key = keystore_key;
203 } else { 203 } else {
204 KeyParams keystore_params = {"localhost", "dummy", keystore_key}; 204 KeyParams keystore_params = {"localhost", "dummy", keystore_key};
205 other_cryptographer.AddKey(keystore_params); 205 other_cryptographer.AddKey(keystore_params);
206 } 206 }
207 KeyParams params = {"localhost", "dummy", default_key}; 207 KeyParams params = {"localhost", "dummy", default_key};
208 other_cryptographer.AddKey(params); 208 other_cryptographer.AddKey(params);
209 EXPECT_TRUE(other_cryptographer.is_ready()); 209 EXPECT_TRUE(other_cryptographer.is_ready());
210 210
211 sync_pb::NigoriSpecifics nigori; 211 sync_pb::NigoriSpecifics nigori;
212 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 212 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
213 nigori.set_keybag_is_frozen(true); 213 nigori.set_keybag_is_frozen(true);
214 nigori.set_keystore_migration_time(migration_time); 214 nigori.set_keystore_migration_time(migration_time);
215 215
216 if (passphrase_type == KEYSTORE_PASSPHRASE) { 216 if (passphrase_type == PassphraseType::KEYSTORE_PASSPHRASE) {
217 sync_pb::EncryptedData keystore_decryptor_token; 217 sync_pb::EncryptedData keystore_decryptor_token;
218 EXPECT_TRUE(encryption_handler()->GetKeystoreDecryptor( 218 EXPECT_TRUE(encryption_handler()->GetKeystoreDecryptor(
219 other_cryptographer, keystore_key, &keystore_decryptor_token)); 219 other_cryptographer, keystore_key, &keystore_decryptor_token));
220 nigori.mutable_keystore_decryptor_token()->CopyFrom( 220 nigori.mutable_keystore_decryptor_token()->CopyFrom(
221 keystore_decryptor_token); 221 keystore_decryptor_token);
222 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 222 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
223 } else { 223 } else {
224 nigori.set_encrypt_everything(true); 224 nigori.set_encrypt_everything(true);
225 nigori.set_passphrase_type( 225 nigori.set_passphrase_type(
226 passphrase_type == CUSTOM_PASSPHRASE 226 passphrase_type == PassphraseType::CUSTOM_PASSPHRASE
227 ? sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE 227 ? sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE
228 : sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE); 228 : sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE);
229 } 229 }
230 return nigori; 230 return nigori;
231 } 231 }
232 232
233 // Build a migrated nigori node with the specified default passphrase 233 // Build a migrated nigori node with the specified default passphrase
234 // and keystore key and initialize the encryption handler with it. 234 // and keystore key and initialize the encryption handler with it.
235 void InitKeystoreMigratedNigori(int64_t migration_time, 235 void InitKeystoreMigratedNigori(int64_t migration_time,
236 const std::string& default_passphrase, 236 const std::string& default_passphrase,
237 const std::string& keystore_key) { 237 const std::string& keystore_key) {
238 { 238 {
239 WriteTransaction trans(FROM_HERE, user_share()); 239 WriteTransaction trans(FROM_HERE, user_share());
240 WriteNode nigori_node(&trans); 240 WriteNode nigori_node(&trans);
241 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 241 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
242 sync_pb::NigoriSpecifics nigori = 242 sync_pb::NigoriSpecifics nigori =
243 BuildMigratedNigori(KEYSTORE_PASSPHRASE, migration_time, 243 BuildMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE,
244 default_passphrase, keystore_key); 244 migration_time, default_passphrase, keystore_key);
245 nigori_node.SetNigoriSpecifics(nigori); 245 nigori_node.SetNigoriSpecifics(nigori);
246 } 246 }
247 247
248 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 248 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(
249 PassphraseType::KEYSTORE_PASSPHRASE, _));
249 EXPECT_CALL(*observer(), 250 EXPECT_CALL(*observer(),
250 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 251 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
251 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AtLeast(1)); 252 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AtLeast(1));
252 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 253 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
253 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1)); 254 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1));
254 encryption_handler()->Init(); 255 encryption_handler()->Init();
255 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 256 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
256 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 257 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
258 PassphraseType::KEYSTORE_PASSPHRASE);
257 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 259 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
258 Mock::VerifyAndClearExpectations(observer()); 260 Mock::VerifyAndClearExpectations(observer());
259 } 261 }
260 262
261 // Build a migrated nigori node with the specified default passphrase 263 // Build a migrated nigori node with the specified default passphrase
262 // as a custom passphrase. 264 // as a custom passphrase.
263 void InitCustomPassMigratedNigori(int64_t migration_time, 265 void InitCustomPassMigratedNigori(int64_t migration_time,
264 const std::string& default_passphrase) { 266 const std::string& default_passphrase) {
265 { 267 {
266 WriteTransaction trans(FROM_HERE, user_share()); 268 WriteTransaction trans(FROM_HERE, user_share());
267 WriteNode nigori_node(&trans); 269 WriteNode nigori_node(&trans);
268 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 270 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
269 sync_pb::NigoriSpecifics nigori = BuildMigratedNigori( 271 sync_pb::NigoriSpecifics nigori =
270 CUSTOM_PASSPHRASE, migration_time, default_passphrase, kKeystoreKey); 272 BuildMigratedNigori(PassphraseType::CUSTOM_PASSPHRASE, migration_time,
273 default_passphrase, kKeystoreKey);
271 nigori_node.SetNigoriSpecifics(nigori); 274 nigori_node.SetNigoriSpecifics(nigori);
272 } 275 }
273 276
274 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 277 EXPECT_CALL(*observer(),
278 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
275 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AtLeast(1)); 279 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AtLeast(1));
276 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)) 280 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true))
277 .Times(AtLeast(1)); 281 .Times(AtLeast(1));
278 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1)); 282 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1));
279 encryption_handler()->Init(); 283 encryption_handler()->Init();
280 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 284 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
281 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 285 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
286 PassphraseType::CUSTOM_PASSPHRASE);
282 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 287 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
283 Mock::VerifyAndClearExpectations(observer()); 288 Mock::VerifyAndClearExpectations(observer());
284 } 289 }
285 290
286 // Build an unmigrated nigori node with the specified passphrase and type and 291 // Build an unmigrated nigori node with the specified passphrase and type and
287 // initialize the encryption handler with it. 292 // initialize the encryption handler with it.
288 void InitUnmigratedNigori(const std::string& default_passphrase, 293 void InitUnmigratedNigori(const std::string& default_passphrase,
289 PassphraseType passphrase_type) { 294 PassphraseType passphrase_type) {
290 DCHECK_NE(passphrase_type, FROZEN_IMPLICIT_PASSPHRASE); 295 DCHECK_NE(passphrase_type, PassphraseType::FROZEN_IMPLICIT_PASSPHRASE);
291 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 296 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
292 KeyParams default_key = {"localhost", "dummy", default_passphrase}; 297 KeyParams default_key = {"localhost", "dummy", default_passphrase};
293 other_cryptographer.AddKey(default_key); 298 other_cryptographer.AddKey(default_key);
294 EXPECT_TRUE(other_cryptographer.is_ready()); 299 EXPECT_TRUE(other_cryptographer.is_ready());
295 300
296 { 301 {
297 WriteTransaction trans(FROM_HERE, user_share()); 302 WriteTransaction trans(FROM_HERE, user_share());
298 WriteNode nigori_node(&trans); 303 WriteNode nigori_node(&trans);
299 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 304 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
300 sync_pb::NigoriSpecifics nigori; 305 sync_pb::NigoriSpecifics nigori;
301 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 306 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
302 nigori.set_keybag_is_frozen(passphrase_type == CUSTOM_PASSPHRASE); 307 nigori.set_keybag_is_frozen(passphrase_type ==
308 PassphraseType::CUSTOM_PASSPHRASE);
303 nigori_node.SetNigoriSpecifics(nigori); 309 nigori_node.SetNigoriSpecifics(nigori);
304 } 310 }
305 311
306 if (passphrase_type != IMPLICIT_PASSPHRASE) { 312 if (passphrase_type != PassphraseType::IMPLICIT_PASSPHRASE) {
307 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(passphrase_type, _)); 313 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(passphrase_type, _));
308 } 314 }
309 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AtLeast(1)); 315 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AtLeast(1));
310 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 316 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
311 encryption_handler()->Init(); 317 encryption_handler()->Init();
312 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 318 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
313 EXPECT_EQ(encryption_handler()->GetPassphraseType(), passphrase_type); 319 EXPECT_EQ(encryption_handler()->GetPassphraseType(), passphrase_type);
314 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 320 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
315 Mock::VerifyAndClearExpectations(observer()); 321 Mock::VerifyAndClearExpectations(observer());
316 } 322 }
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 keys.Add()->assign(kRawOldKeystoreKey); 620 keys.Add()->assign(kRawOldKeystoreKey);
615 keys.Add()->assign(kRawKeystoreKey); 621 keys.Add()->assign(kRawKeystoreKey);
616 622
617 // Pass them to the encryption handler, triggering a migration and bootstrap 623 // Pass them to the encryption handler, triggering a migration and bootstrap
618 // token update. 624 // token update.
619 std::string encoded_key; 625 std::string encoded_key;
620 std::string keystore_bootstrap; 626 std::string keystore_bootstrap;
621 EXPECT_CALL(*observer(), OnEncryptionComplete()); 627 EXPECT_CALL(*observer(), OnEncryptionComplete());
622 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)); 628 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_));
623 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 629 EXPECT_CALL(*observer(), OnPassphraseAccepted());
624 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 630 EXPECT_CALL(*observer(),
631 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
625 EXPECT_CALL(*observer(), OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)) 632 EXPECT_CALL(*observer(), OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN))
626 .WillOnce(SaveArg<0>(&keystore_bootstrap)); 633 .WillOnce(SaveArg<0>(&keystore_bootstrap));
627 { 634 {
628 WriteTransaction trans(FROM_HERE, user_share()); 635 WriteTransaction trans(FROM_HERE, user_share());
629 EXPECT_TRUE( 636 EXPECT_TRUE(
630 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans())); 637 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans()));
631 EXPECT_FALSE( 638 EXPECT_FALSE(
632 encryption_handler()->NeedKeystoreKey(trans.GetWrappedTrans())); 639 encryption_handler()->NeedKeystoreKey(trans.GetWrappedTrans()));
633 EXPECT_FALSE(GetCryptographer()->is_initialized()); 640 EXPECT_FALSE(GetCryptographer()->is_initialized());
634 } 641 }
635 PumpLoop(); 642 PumpLoop();
636 EXPECT_TRUE(GetCryptographer()->is_initialized()); 643 EXPECT_TRUE(GetCryptographer()->is_initialized());
637 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kKeystoreKey); 644 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kKeystoreKey);
638 645
639 // Ensure the bootstrap is encoded properly (a base64 encoded encrypted blob 646 // Ensure the bootstrap is encoded properly (a base64 encoded encrypted blob
640 // of list values containing the keystore keys). 647 // of list values containing the keystore keys).
641 std::string decoded_bootstrap; 648 std::string decoded_bootstrap;
642 ASSERT_TRUE(base::Base64Decode(keystore_bootstrap, &decoded_bootstrap)); 649 ASSERT_TRUE(base::Base64Decode(keystore_bootstrap, &decoded_bootstrap));
643 std::string decrypted_bootstrap; 650 std::string decrypted_bootstrap;
644 ASSERT_TRUE(GetCryptographer()->encryptor()->DecryptString( 651 ASSERT_TRUE(GetCryptographer()->encryptor()->DecryptString(
645 decoded_bootstrap, &decrypted_bootstrap)); 652 decoded_bootstrap, &decrypted_bootstrap));
646 JSONStringValueDeserializer json(decrypted_bootstrap); 653 JSONStringValueDeserializer json(decrypted_bootstrap);
647 std::unique_ptr<base::Value> deserialized_keystore_keys( 654 std::unique_ptr<base::Value> deserialized_keystore_keys(
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 726 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
720 nigori_node.SetNigoriSpecifics(nigori); 727 nigori_node.SetNigoriSpecifics(nigori);
721 } 728 }
722 // Run any tasks posted via AppplyNigoriUpdate. 729 // Run any tasks posted via AppplyNigoriUpdate.
723 PumpLoop(); 730 PumpLoop();
724 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 731 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
725 Mock::VerifyAndClearExpectations(observer()); 732 Mock::VerifyAndClearExpectations(observer());
726 733
727 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 734 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
728 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 735 EXPECT_CALL(*observer(), OnPassphraseAccepted());
729 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 736 EXPECT_CALL(*observer(),
737 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
730 EXPECT_CALL(*observer(), 738 EXPECT_CALL(*observer(),
731 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 739 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
732 EXPECT_CALL(*observer(), OnEncryptionComplete()); 740 EXPECT_CALL(*observer(), OnEncryptionComplete());
733 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 741 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
734 encryption_handler()->SetDecryptionPassphrase(kOtherKey); 742 encryption_handler()->SetDecryptionPassphrase(kOtherKey);
735 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 743 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
736 EXPECT_EQ(KEYSTORE_PASSPHRASE, encryption_handler()->GetPassphraseType()); 744 EXPECT_EQ(PassphraseType::KEYSTORE_PASSPHRASE,
737 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kOtherKey); 745 encryption_handler()->GetPassphraseType());
746 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kOtherKey);
738 } 747 }
739 748
740 // Test that we don't attempt to migrate while a custom passphrase is pending, 749 // Test that we don't attempt to migrate while a custom passphrase is pending,
741 // and that once we do decrypt pending keys we migrate the nigori. Once 750 // and that once we do decrypt pending keys we migrate the nigori. Once
742 // migrated, we should be in custom passphrase state with encrypt everything. 751 // migrated, we should be in custom passphrase state with encrypt everything.
743 TEST_F(SyncEncryptionHandlerImplTest, MigrateOnDecryptCustomPass) { 752 TEST_F(SyncEncryptionHandlerImplTest, MigrateOnDecryptCustomPass) {
744 const char kOtherKey[] = "other"; 753 const char kOtherKey[] = "other";
745 { 754 {
746 EXPECT_CALL(*observer(), 755 EXPECT_CALL(*observer(),
747 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 756 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
(...skipping 11 matching lines...) Expand all
759 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 768 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
760 KeyParams other_key = {"localhost", "dummy", kOtherKey}; 769 KeyParams other_key = {"localhost", "dummy", kOtherKey};
761 other_cryptographer.AddKey(other_key); 770 other_cryptographer.AddKey(other_key);
762 771
763 sync_pb::NigoriSpecifics nigori; 772 sync_pb::NigoriSpecifics nigori;
764 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 773 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
765 nigori.set_keybag_is_frozen(true); 774 nigori.set_keybag_is_frozen(true);
766 nigori.set_encrypt_everything(false); 775 nigori.set_encrypt_everything(false);
767 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 776 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
768 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 777 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
769 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 778 EXPECT_CALL(*observer(),
779 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
770 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 780 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
771 nigori_node.SetNigoriSpecifics(nigori); 781 nigori_node.SetNigoriSpecifics(nigori);
772 } 782 }
773 // Run any tasks posted via AppplyNigoriUpdate. 783 // Run any tasks posted via AppplyNigoriUpdate.
774 PumpLoop(); 784 PumpLoop();
775 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 785 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
776 Mock::VerifyAndClearExpectations(observer()); 786 Mock::VerifyAndClearExpectations(observer());
777 787
778 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 788 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
779 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 789 EXPECT_CALL(*observer(), OnPassphraseAccepted());
780 std::string captured_bootstrap_token; 790 std::string captured_bootstrap_token;
781 EXPECT_CALL(*observer(), 791 EXPECT_CALL(*observer(),
782 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 792 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
783 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 793 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
784 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 794 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
785 SyncEncryptionHandler::NigoriState captured_nigori_state; 795 SyncEncryptionHandler::NigoriState captured_nigori_state;
786 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 796 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
787 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 797 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
788 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(2); 798 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(2);
789 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 799 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
790 encryption_handler()->SetDecryptionPassphrase(kOtherKey); 800 encryption_handler()->SetDecryptionPassphrase(kOtherKey);
791 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 801 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
792 const base::Time migration_time = encryption_handler()->migration_time(); 802 const base::Time migration_time = encryption_handler()->migration_time();
793 EXPECT_EQ(CUSTOM_PASSPHRASE, encryption_handler()->GetPassphraseType()); 803 EXPECT_EQ(PassphraseType::CUSTOM_PASSPHRASE,
794 VerifyMigratedNigori(CUSTOM_PASSPHRASE, kOtherKey); 804 encryption_handler()->GetPassphraseType());
805 VerifyMigratedNigori(PassphraseType::CUSTOM_PASSPHRASE, kOtherKey);
795 806
796 VerifyRestoreAfterCustomPassphrase(TimeToProtoTime(migration_time), kOtherKey, 807 VerifyRestoreAfterCustomPassphrase(
797 captured_bootstrap_token, 808 TimeToProtoTime(migration_time), kOtherKey, captured_bootstrap_token,
798 captured_nigori_state, CUSTOM_PASSPHRASE); 809 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
799 } 810 }
800 811
801 // Test that we trigger a migration when we set the keystore key, had an 812 // Test that we trigger a migration when we set the keystore key, had an
802 // implicit passphrase, and did not have encrypt everything. We should switch 813 // implicit passphrase, and did not have encrypt everything. We should switch
803 // to KEYSTORE_PASSPHRASE. 814 // to PassphraseType::KEYSTORE_PASSPHRASE.
804 TEST_F(SyncEncryptionHandlerImplTest, MigrateOnKeystoreKeyAvailableImplicit) { 815 TEST_F(SyncEncryptionHandlerImplTest, MigrateOnKeystoreKeyAvailableImplicit) {
805 const char kCurKey[] = "cur"; 816 const char kCurKey[] = "cur";
806 KeyParams current_key = {"localhost", "dummy", kCurKey}; 817 KeyParams current_key = {"localhost", "dummy", kCurKey};
807 GetCryptographer()->AddKey(current_key); 818 GetCryptographer()->AddKey(current_key);
808 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 819 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
809 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 820 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
810 EXPECT_CALL(*observer(), OnEncryptionComplete()); 821 EXPECT_CALL(*observer(), OnEncryptionComplete());
811 encryption_handler()->Init(); 822 encryption_handler()->Init();
812 Mock::VerifyAndClearExpectations(observer()); 823 Mock::VerifyAndClearExpectations(observer());
813 824
814 { 825 {
815 ReadTransaction trans(FROM_HERE, user_share()); 826 ReadTransaction trans(FROM_HERE, user_share());
816 // Once we provide a keystore key, we should perform the migration. 827 // Once we provide a keystore key, we should perform the migration.
817 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 828 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
818 EXPECT_CALL(*observer(), 829 EXPECT_CALL(*observer(),
819 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 830 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
820 encryption_handler()->SetKeystoreKeys( 831 encryption_handler()->SetKeystoreKeys(
821 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 832 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
822 } 833 }
823 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 834 EXPECT_CALL(*observer(),
835 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
824 // The actual migration gets posted, so run all pending tasks. 836 // The actual migration gets posted, so run all pending tasks.
825 PumpLoop(); 837 PumpLoop();
826 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 838 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
827 EXPECT_EQ(KEYSTORE_PASSPHRASE, encryption_handler()->GetPassphraseType()); 839 EXPECT_EQ(PassphraseType::KEYSTORE_PASSPHRASE,
840 encryption_handler()->GetPassphraseType());
828 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 841 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
829 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kCurKey); 842 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kCurKey);
830 } 843 }
831 844
832 // Test that we trigger a migration when we set the keystore key, had an 845 // Test that we trigger a migration when we set the keystore key, had an
833 // implicit passphrase, and encrypt everything enabled. We should switch to 846 // implicit passphrase, and encrypt everything enabled. We should switch to
834 // FROZEN_IMPLICIT_PASSPHRASE. 847 // PassphraseType::FROZEN_IMPLICIT_PASSPHRASE.
835 TEST_F(SyncEncryptionHandlerImplTest, 848 TEST_F(SyncEncryptionHandlerImplTest,
836 MigrateOnKeystoreKeyAvailableFrozenImplicit) { 849 MigrateOnKeystoreKeyAvailableFrozenImplicit) {
837 const char kCurKey[] = "cur"; 850 const char kCurKey[] = "cur";
838 KeyParams current_key = {"localhost", "dummy", kCurKey}; 851 KeyParams current_key = {"localhost", "dummy", kCurKey};
839 GetCryptographer()->AddKey(current_key); 852 GetCryptographer()->AddKey(current_key);
840 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 853 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
841 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 854 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
842 EXPECT_CALL(*observer(), OnEncryptionComplete()); 855 EXPECT_CALL(*observer(), OnEncryptionComplete());
843 encryption_handler()->Init(); 856 encryption_handler()->Init();
844 Mock::VerifyAndClearExpectations(observer()); 857 Mock::VerifyAndClearExpectations(observer());
845 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 858 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
846 SyncEncryptionHandler::NigoriState captured_nigori_state; 859 SyncEncryptionHandler::NigoriState captured_nigori_state;
847 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 860 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
848 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 861 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
849 EXPECT_CALL(*observer(), OnEncryptionComplete()); 862 EXPECT_CALL(*observer(), OnEncryptionComplete());
850 encryption_handler()->EnableEncryptEverything(); 863 encryption_handler()->EnableEncryptEverything();
851 864
852 { 865 {
853 ReadTransaction trans(FROM_HERE, user_share()); 866 ReadTransaction trans(FROM_HERE, user_share());
854 // Once we provide a keystore key, we should perform the migration. 867 // Once we provide a keystore key, we should perform the migration.
855 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 868 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
856 EXPECT_CALL(*observer(), 869 EXPECT_CALL(*observer(),
857 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 870 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
858 encryption_handler()->SetKeystoreKeys( 871 encryption_handler()->SetKeystoreKeys(
859 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 872 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
860 } 873 }
861 EXPECT_CALL(*observer(), 874 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(
862 OnPassphraseTypeChanged(FROZEN_IMPLICIT_PASSPHRASE, _)); 875 PassphraseType::FROZEN_IMPLICIT_PASSPHRASE, _));
863 876
864 // The actual migration gets posted, so run all pending tasks. 877 // The actual migration gets posted, so run all pending tasks.
865 PumpLoop(); 878 PumpLoop();
866 Mock::VerifyAndClearExpectations(observer()); 879 Mock::VerifyAndClearExpectations(observer());
867 880
868 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 881 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
869 const base::Time migration_time = encryption_handler()->migration_time(); 882 const base::Time migration_time = encryption_handler()->migration_time();
870 EXPECT_EQ(FROZEN_IMPLICIT_PASSPHRASE, 883 EXPECT_EQ(PassphraseType::FROZEN_IMPLICIT_PASSPHRASE,
871 encryption_handler()->GetPassphraseType()); 884 encryption_handler()->GetPassphraseType());
872 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 885 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
873 VerifyMigratedNigori(FROZEN_IMPLICIT_PASSPHRASE, kCurKey); 886 VerifyMigratedNigori(PassphraseType::FROZEN_IMPLICIT_PASSPHRASE, kCurKey);
874 887
875 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_, 888 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_,
876 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked 889 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked
877 // during a previous instance) so get it from the Cryptographer. 890 // during a previous instance) so get it from the Cryptographer.
878 std::string passphrase_bootstrap_token; 891 std::string passphrase_bootstrap_token;
879 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token); 892 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token);
880 VerifyRestoreAfterCustomPassphrase( 893 VerifyRestoreAfterCustomPassphrase(
881 TimeToProtoTime(migration_time), kCurKey, passphrase_bootstrap_token, 894 TimeToProtoTime(migration_time), kCurKey, passphrase_bootstrap_token,
882 captured_nigori_state, FROZEN_IMPLICIT_PASSPHRASE); 895 captured_nigori_state, PassphraseType::FROZEN_IMPLICIT_PASSPHRASE);
883 } 896 }
884 897
885 // Test that we trigger a migration when we set the keystore key, had a 898 // Test that we trigger a migration when we set the keystore key, had a
886 // custom passphrase, and encrypt everything enabled. The passphrase state 899 // custom passphrase, and encrypt everything enabled. The passphrase state
887 // should remain as CUSTOM_PASSPHRASE, and encrypt everything stay the same. 900 // should remain as CUSTOM_PASSPHRASE, and encrypt everything stay the same.
888 TEST_F(SyncEncryptionHandlerImplTest, 901 TEST_F(SyncEncryptionHandlerImplTest,
889 MigrateOnKeystoreKeyAvailableCustomWithEncryption) { 902 MigrateOnKeystoreKeyAvailableCustomWithEncryption) {
890 const char kCurKey[] = "cur"; 903 const char kCurKey[] = "cur";
891 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 904 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
892 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 905 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
893 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 906 EXPECT_CALL(*observer(), OnPassphraseAccepted());
894 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 907 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
895 EXPECT_CALL(*observer(), OnEncryptionComplete()); 908 EXPECT_CALL(*observer(), OnEncryptionComplete());
896 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 909 EXPECT_CALL(*observer(),
910 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
897 std::string captured_bootstrap_token; 911 std::string captured_bootstrap_token;
898 EXPECT_CALL(*observer(), 912 EXPECT_CALL(*observer(),
899 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 913 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
900 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 914 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
901 encryption_handler()->Init(); 915 encryption_handler()->Init();
902 encryption_handler()->SetEncryptionPassphrase(kCurKey, true); 916 encryption_handler()->SetEncryptionPassphrase(kCurKey, true);
903 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null()); 917 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null());
904 Mock::VerifyAndClearExpectations(observer()); 918 Mock::VerifyAndClearExpectations(observer());
905 919
906 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 920 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
(...skipping 13 matching lines...) Expand all
920 encryption_handler()->SetKeystoreKeys( 934 encryption_handler()->SetKeystoreKeys(
921 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 935 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
922 } 936 }
923 937
924 // The actual migration gets posted, so run all pending tasks. 938 // The actual migration gets posted, so run all pending tasks.
925 PumpLoop(); 939 PumpLoop();
926 Mock::VerifyAndClearExpectations(observer()); 940 Mock::VerifyAndClearExpectations(observer());
927 941
928 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 942 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
929 const base::Time migration_time = encryption_handler()->migration_time(); 943 const base::Time migration_time = encryption_handler()->migration_time();
930 EXPECT_EQ(CUSTOM_PASSPHRASE, encryption_handler()->GetPassphraseType()); 944 EXPECT_EQ(PassphraseType::CUSTOM_PASSPHRASE,
945 encryption_handler()->GetPassphraseType());
931 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 946 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
932 VerifyMigratedNigori(CUSTOM_PASSPHRASE, kCurKey); 947 VerifyMigratedNigori(PassphraseType::CUSTOM_PASSPHRASE, kCurKey);
933 948
934 VerifyRestoreAfterCustomPassphrase(TimeToProtoTime(migration_time), kCurKey, 949 VerifyRestoreAfterCustomPassphrase(
935 captured_bootstrap_token, 950 TimeToProtoTime(migration_time), kCurKey, captured_bootstrap_token,
936 captured_nigori_state, CUSTOM_PASSPHRASE); 951 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
937 } 952 }
938 953
939 // Test that we trigger a migration when we set the keystore key, had a 954 // Test that we trigger a migration when we set the keystore key, had a
940 // custom passphrase, and did not have encrypt everything. The passphrase state 955 // custom passphrase, and did not have encrypt everything. The passphrase state
941 // should remain as CUSTOM_PASSPHRASE, and encrypt everything should be enabled. 956 // should remain as PassphraseType::CUSTOM_PASSPHRASE, and encrypt everything
957 // should be enabled.
942 TEST_F(SyncEncryptionHandlerImplTest, 958 TEST_F(SyncEncryptionHandlerImplTest,
943 MigrateOnKeystoreKeyAvailableCustomNoEncryption) { 959 MigrateOnKeystoreKeyAvailableCustomNoEncryption) {
944 const char kCurKey[] = "cur"; 960 const char kCurKey[] = "cur";
945 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 961 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
946 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 962 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
947 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 963 EXPECT_CALL(*observer(), OnPassphraseAccepted());
948 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 964 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
949 EXPECT_CALL(*observer(), OnEncryptionComplete()); 965 EXPECT_CALL(*observer(), OnEncryptionComplete());
950 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 966 EXPECT_CALL(*observer(),
967 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
951 std::string captured_bootstrap_token; 968 std::string captured_bootstrap_token;
952 EXPECT_CALL(*observer(), 969 EXPECT_CALL(*observer(),
953 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 970 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
954 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 971 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
955 encryption_handler()->Init(); 972 encryption_handler()->Init();
956 encryption_handler()->SetEncryptionPassphrase(kCurKey, true); 973 encryption_handler()->SetEncryptionPassphrase(kCurKey, true);
957 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null()); 974 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null());
958 Mock::VerifyAndClearExpectations(observer()); 975 Mock::VerifyAndClearExpectations(observer());
959 976
960 { 977 {
961 ReadTransaction trans(FROM_HERE, user_share()); 978 ReadTransaction trans(FROM_HERE, user_share());
962 // Once we provide a keystore key, we should perform the migration. 979 // Once we provide a keystore key, we should perform the migration.
963 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 980 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
964 EXPECT_CALL(*observer(), 981 EXPECT_CALL(*observer(),
965 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 982 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
966 encryption_handler()->SetKeystoreKeys( 983 encryption_handler()->SetKeystoreKeys(
967 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 984 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
968 } 985 }
969 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 986 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
970 SyncEncryptionHandler::NigoriState captured_nigori_state; 987 SyncEncryptionHandler::NigoriState captured_nigori_state;
971 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 988 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
972 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 989 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
973 EXPECT_CALL(*observer(), OnEncryptionComplete()); 990 EXPECT_CALL(*observer(), OnEncryptionComplete());
974 // The actual migration gets posted, so run all pending tasks. 991 // The actual migration gets posted, so run all pending tasks.
975 PumpLoop(); 992 PumpLoop();
976 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 993 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
977 const base::Time migration_time = encryption_handler()->migration_time(); 994 const base::Time migration_time = encryption_handler()->migration_time();
978 EXPECT_EQ(CUSTOM_PASSPHRASE, encryption_handler()->GetPassphraseType()); 995 EXPECT_EQ(PassphraseType::CUSTOM_PASSPHRASE,
996 encryption_handler()->GetPassphraseType());
979 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 997 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
980 VerifyMigratedNigori(CUSTOM_PASSPHRASE, kCurKey); 998 VerifyMigratedNigori(PassphraseType::CUSTOM_PASSPHRASE, kCurKey);
981 999
982 VerifyRestoreAfterCustomPassphrase(TimeToProtoTime(migration_time), kCurKey, 1000 VerifyRestoreAfterCustomPassphrase(
983 captured_bootstrap_token, 1001 TimeToProtoTime(migration_time), kCurKey, captured_bootstrap_token,
984 captured_nigori_state, CUSTOM_PASSPHRASE); 1002 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
985 } 1003 }
986 1004
987 // Test that we can handle receiving a migrated nigori node in the 1005 // Test that we can handle receiving a migrated nigori node in the
988 // KEYSTORE_PASS state, and use the keystore decryptor token to decrypt the 1006 // KEYSTORE_PASS state, and use the keystore decryptor token to decrypt the
989 // keybag. 1007 // keybag.
990 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriKeystorePass) { 1008 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriKeystorePass) {
991 const char kCurKey[] = "cur"; 1009 const char kCurKey[] = "cur";
992 sync_pb::EncryptedData keystore_decryptor_token; 1010 sync_pb::EncryptedData keystore_decryptor_token;
993 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 1011 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
994 KeyParams cur_key = {"localhost", "dummy", kCurKey}; 1012 KeyParams cur_key = {"localhost", "dummy", kCurKey};
995 other_cryptographer.AddKey(cur_key); 1013 other_cryptographer.AddKey(cur_key);
996 EXPECT_TRUE(other_cryptographer.is_ready()); 1014 EXPECT_TRUE(other_cryptographer.is_ready());
997 EXPECT_TRUE(encryption_handler()->GetKeystoreDecryptor( 1015 EXPECT_TRUE(encryption_handler()->GetKeystoreDecryptor(
998 other_cryptographer, kKeystoreKey, &keystore_decryptor_token)); 1016 other_cryptographer, kKeystoreKey, &keystore_decryptor_token));
999 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 1017 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
1000 EXPECT_FALSE(GetCryptographer()->is_ready()); 1018 EXPECT_FALSE(GetCryptographer()->is_ready());
1001 EXPECT_NE(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1019 EXPECT_NE(encryption_handler()->GetPassphraseType(),
1020 PassphraseType::KEYSTORE_PASSPHRASE);
1002 1021
1003 // Now build a nigori node with the generated keystore decryptor token and 1022 // Now build a nigori node with the generated keystore decryptor token and
1004 // initialize the encryption handler with it. The cryptographer should be 1023 // initialize the encryption handler with it. The cryptographer should be
1005 // initialized properly to decrypt both kCurKey and kKeystoreKey. 1024 // initialized properly to decrypt both kCurKey and kKeystoreKey.
1006 { 1025 {
1007 WriteTransaction trans(FROM_HERE, user_share()); 1026 WriteTransaction trans(FROM_HERE, user_share());
1008 WriteNode nigori_node(&trans); 1027 WriteNode nigori_node(&trans);
1009 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1028 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1010 sync_pb::NigoriSpecifics nigori; 1029 sync_pb::NigoriSpecifics nigori;
1011 nigori.mutable_keystore_decryptor_token()->CopyFrom( 1030 nigori.mutable_keystore_decryptor_token()->CopyFrom(
1012 keystore_decryptor_token); 1031 keystore_decryptor_token);
1013 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1032 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1014 nigori.set_keybag_is_frozen(true); 1033 nigori.set_keybag_is_frozen(true);
1015 nigori.set_keystore_migration_time(1); 1034 nigori.set_keystore_migration_time(1);
1016 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1035 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1017 1036
1018 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1037 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1019 EXPECT_CALL(*observer(), 1038 EXPECT_CALL(*observer(),
1020 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1039 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1021 EXPECT_CALL(*observer(), 1040 EXPECT_CALL(*observer(),
1022 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1041 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1023 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1042 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(
1043 PassphraseType::KEYSTORE_PASSPHRASE, _));
1024 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1044 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1025 encryption_handler()->SetKeystoreKeys( 1045 encryption_handler()->SetKeystoreKeys(
1026 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1046 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1027 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1047 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1028 nigori_node.SetNigoriSpecifics(nigori); 1048 nigori_node.SetNigoriSpecifics(nigori);
1029 } 1049 }
1030 // Run any tasks posted via AppplyNigoriUpdate. 1050 // Run any tasks posted via AppplyNigoriUpdate.
1031 PumpLoop(); 1051 PumpLoop();
1032 Mock::VerifyAndClearExpectations(observer()); 1052 Mock::VerifyAndClearExpectations(observer());
1033 1053
1034 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1054 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1035 EXPECT_TRUE(GetCryptographer()->is_ready()); 1055 EXPECT_TRUE(GetCryptographer()->is_ready());
1036 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1056 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1057 PassphraseType::KEYSTORE_PASSPHRASE);
1037 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1058 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1038 VerifyMigratedNigoriWithTimestamp(1, KEYSTORE_PASSPHRASE, kCurKey); 1059 VerifyMigratedNigoriWithTimestamp(1, PassphraseType::KEYSTORE_PASSPHRASE,
1060 kCurKey);
1039 1061
1040 // Check that the cryptographer still encrypts with the current key. 1062 // Check that the cryptographer still encrypts with the current key.
1041 sync_pb::EncryptedData current_encrypted; 1063 sync_pb::EncryptedData current_encrypted;
1042 other_cryptographer.EncryptString("string", &current_encrypted); 1064 other_cryptographer.EncryptString("string", &current_encrypted);
1043 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted)); 1065 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted));
1044 1066
1045 // Check that the cryptographer can decrypt keystore key based encryption. 1067 // Check that the cryptographer can decrypt keystore key based encryption.
1046 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1068 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1047 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey}; 1069 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey};
1048 keystore_cryptographer.AddKey(keystore_key); 1070 keystore_cryptographer.AddKey(keystore_key);
1049 sync_pb::EncryptedData keystore_encrypted; 1071 sync_pb::EncryptedData keystore_encrypted;
1050 keystore_cryptographer.EncryptString("string", &keystore_encrypted); 1072 keystore_cryptographer.EncryptString("string", &keystore_encrypted);
1051 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted)); 1073 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted));
1052 } 1074 }
1053 1075
1054 // Test that we handle receiving migrated nigori's with 1076 // Test that we handle receiving migrated nigori's with
1055 // FROZEN_IMPLICIT_PASSPHRASE state. We should be in a pending key state until 1077 // PassphraseType::FROZEN_IMPLICIT_PASSPHRASE state. We should be in a pending
1078 // key state until
1056 // we supply the pending frozen implicit passphrase key. 1079 // we supply the pending frozen implicit passphrase key.
1057 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriFrozenImplicitPass) { 1080 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriFrozenImplicitPass) {
1058 const char kCurKey[] = "cur"; 1081 const char kCurKey[] = "cur";
1059 sync_pb::EncryptedData encrypted; 1082 sync_pb::EncryptedData encrypted;
1060 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 1083 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
1061 KeyParams cur_key = {"localhost", "dummy", kCurKey}; 1084 KeyParams cur_key = {"localhost", "dummy", kCurKey};
1062 other_cryptographer.AddKey(cur_key); 1085 other_cryptographer.AddKey(cur_key);
1063 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 1086 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
1064 1087
1065 { 1088 {
1066 EXPECT_CALL(*observer(), 1089 EXPECT_CALL(*observer(),
1067 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1090 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1068 ReadTransaction trans(FROM_HERE, user_share()); 1091 ReadTransaction trans(FROM_HERE, user_share());
1069 encryption_handler()->SetKeystoreKeys( 1092 encryption_handler()->SetKeystoreKeys(
1070 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1093 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1071 } 1094 }
1072 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 1095 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
1073 1096
1074 { 1097 {
1075 EXPECT_CALL(*observer(), 1098 EXPECT_CALL(
1076 OnPassphraseTypeChanged(FROZEN_IMPLICIT_PASSPHRASE, _)); 1099 *observer(),
1100 OnPassphraseTypeChanged(PassphraseType::FROZEN_IMPLICIT_PASSPHRASE, _));
1077 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 1101 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
1078 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1102 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1079 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 1103 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
1080 WriteTransaction trans(FROM_HERE, user_share()); 1104 WriteTransaction trans(FROM_HERE, user_share());
1081 WriteNode nigori_node(&trans); 1105 WriteNode nigori_node(&trans);
1082 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1106 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1083 sync_pb::NigoriSpecifics nigori; 1107 sync_pb::NigoriSpecifics nigori;
1084 nigori.set_keybag_is_frozen(true); 1108 nigori.set_keybag_is_frozen(true);
1085 nigori.set_passphrase_type( 1109 nigori.set_passphrase_type(
1086 sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE); 1110 sync_pb::NigoriSpecifics::FROZEN_IMPLICIT_PASSPHRASE);
1087 nigori.set_keystore_migration_time(1); 1111 nigori.set_keystore_migration_time(1);
1088 nigori.set_encrypt_everything(true); 1112 nigori.set_encrypt_everything(true);
1089 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1113 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1090 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1114 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1091 nigori_node.SetNigoriSpecifics(nigori); 1115 nigori_node.SetNigoriSpecifics(nigori);
1092 } 1116 }
1093 // Run any tasks posted via AppplyNigoriUpdate. 1117 // Run any tasks posted via AppplyNigoriUpdate.
1094 PumpLoop(); 1118 PumpLoop();
1095 Mock::VerifyAndClearExpectations(observer()); 1119 Mock::VerifyAndClearExpectations(observer());
1096 1120
1097 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1121 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1098 EXPECT_EQ(FROZEN_IMPLICIT_PASSPHRASE, 1122 EXPECT_EQ(PassphraseType::FROZEN_IMPLICIT_PASSPHRASE,
1099 encryption_handler()->GetPassphraseType()); 1123 encryption_handler()->GetPassphraseType());
1100 EXPECT_TRUE(GetCryptographer()->has_pending_keys()); 1124 EXPECT_TRUE(GetCryptographer()->has_pending_keys());
1101 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1125 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1102 1126
1103 EXPECT_CALL(*observer(), 1127 EXPECT_CALL(*observer(),
1104 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1128 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1105 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1129 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1106 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1130 EXPECT_CALL(*observer(), OnEncryptionComplete());
1107 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1131 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1108 encryption_handler()->SetDecryptionPassphrase(kCurKey); 1132 encryption_handler()->SetDecryptionPassphrase(kCurKey);
1109 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1133 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1110 EXPECT_TRUE(GetCryptographer()->is_ready()); 1134 EXPECT_TRUE(GetCryptographer()->is_ready());
1111 VerifyMigratedNigoriWithTimestamp(1, FROZEN_IMPLICIT_PASSPHRASE, kCurKey); 1135 VerifyMigratedNigoriWithTimestamp(
1136 1, PassphraseType::FROZEN_IMPLICIT_PASSPHRASE, kCurKey);
1112 1137
1113 // Check that the cryptographer still encrypts with the current key. 1138 // Check that the cryptographer still encrypts with the current key.
1114 sync_pb::EncryptedData current_encrypted; 1139 sync_pb::EncryptedData current_encrypted;
1115 other_cryptographer.EncryptString("string", &current_encrypted); 1140 other_cryptographer.EncryptString("string", &current_encrypted);
1116 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted)); 1141 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted));
1117 1142
1118 // Check that the cryptographer can decrypt keystore key based encryption. 1143 // Check that the cryptographer can decrypt keystore key based encryption.
1119 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1144 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1120 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey}; 1145 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey};
1121 keystore_cryptographer.AddKey(keystore_key); 1146 keystore_cryptographer.AddKey(keystore_key);
1122 sync_pb::EncryptedData keystore_encrypted; 1147 sync_pb::EncryptedData keystore_encrypted;
1123 keystore_cryptographer.EncryptString("string", &keystore_encrypted); 1148 keystore_cryptographer.EncryptString("string", &keystore_encrypted);
1124 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted)); 1149 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted));
1125 } 1150 }
1126 1151
1127 // Test that we handle receiving migrated nigori's with 1152 // Test that we handle receiving migrated nigori's with
1128 // CUSTOM_PASSPHRASE state. We should be in a pending key state until we 1153 // PassphraseType::CUSTOM_PASSPHRASE state. We should be in a pending key state
1154 // until we
1129 // provide the custom passphrase key. 1155 // provide the custom passphrase key.
1130 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriCustomPass) { 1156 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriCustomPass) {
1131 const char kCurKey[] = "cur"; 1157 const char kCurKey[] = "cur";
1132 sync_pb::EncryptedData encrypted; 1158 sync_pb::EncryptedData encrypted;
1133 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 1159 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
1134 KeyParams cur_key = {"localhost", "dummy", kCurKey}; 1160 KeyParams cur_key = {"localhost", "dummy", kCurKey};
1135 other_cryptographer.AddKey(cur_key); 1161 other_cryptographer.AddKey(cur_key);
1136 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 1162 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
1137 1163
1138 { 1164 {
1139 EXPECT_CALL(*observer(), 1165 EXPECT_CALL(*observer(),
1140 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1166 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1141 ReadTransaction trans(FROM_HERE, user_share()); 1167 ReadTransaction trans(FROM_HERE, user_share());
1142 encryption_handler()->SetKeystoreKeys( 1168 encryption_handler()->SetKeystoreKeys(
1143 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1169 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1144 } 1170 }
1145 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 1171 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
1146 1172
1147 { 1173 {
1148 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 1174 EXPECT_CALL(*observer(),
1175 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
1149 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 1176 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
1150 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1177 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1151 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 1178 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
1152 WriteTransaction trans(FROM_HERE, user_share()); 1179 WriteTransaction trans(FROM_HERE, user_share());
1153 WriteNode nigori_node(&trans); 1180 WriteNode nigori_node(&trans);
1154 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1181 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1155 sync_pb::NigoriSpecifics nigori; 1182 sync_pb::NigoriSpecifics nigori;
1156 nigori.set_keybag_is_frozen(true); 1183 nigori.set_keybag_is_frozen(true);
1157 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE); 1184 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE);
1158 nigori.set_keystore_migration_time(1); 1185 nigori.set_keystore_migration_time(1);
1159 nigori.set_encrypt_everything(true); 1186 nigori.set_encrypt_everything(true);
1160 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1187 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1161 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1188 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1162 nigori_node.SetNigoriSpecifics(nigori); 1189 nigori_node.SetNigoriSpecifics(nigori);
1163 } 1190 }
1164 // Run any tasks posted via AppplyNigoriUpdate. 1191 // Run any tasks posted via AppplyNigoriUpdate.
1165 PumpLoop(); 1192 PumpLoop();
1166 Mock::VerifyAndClearExpectations(observer()); 1193 Mock::VerifyAndClearExpectations(observer());
1167 1194
1168 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1195 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1169 EXPECT_EQ(CUSTOM_PASSPHRASE, encryption_handler()->GetPassphraseType()); 1196 EXPECT_EQ(PassphraseType::CUSTOM_PASSPHRASE,
1197 encryption_handler()->GetPassphraseType());
1170 EXPECT_TRUE(GetCryptographer()->has_pending_keys()); 1198 EXPECT_TRUE(GetCryptographer()->has_pending_keys());
1171 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1199 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1172 1200
1173 EXPECT_CALL(*observer(), 1201 EXPECT_CALL(*observer(),
1174 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1202 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1175 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1203 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1176 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1204 EXPECT_CALL(*observer(), OnEncryptionComplete());
1177 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1205 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1178 encryption_handler()->SetDecryptionPassphrase(kCurKey); 1206 encryption_handler()->SetDecryptionPassphrase(kCurKey);
1179 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1207 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1180 EXPECT_TRUE(GetCryptographer()->is_ready()); 1208 EXPECT_TRUE(GetCryptographer()->is_ready());
1181 VerifyMigratedNigoriWithTimestamp(1, CUSTOM_PASSPHRASE, kCurKey); 1209 VerifyMigratedNigoriWithTimestamp(1, PassphraseType::CUSTOM_PASSPHRASE,
1210 kCurKey);
1182 1211
1183 // Check that the cryptographer still encrypts with the current key. 1212 // Check that the cryptographer still encrypts with the current key.
1184 sync_pb::EncryptedData current_encrypted; 1213 sync_pb::EncryptedData current_encrypted;
1185 other_cryptographer.EncryptString("string", &current_encrypted); 1214 other_cryptographer.EncryptString("string", &current_encrypted);
1186 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted)); 1215 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted));
1187 1216
1188 // Check that the cryptographer can decrypt keystore key based encryption. 1217 // Check that the cryptographer can decrypt keystore key based encryption.
1189 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1218 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1190 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey}; 1219 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey};
1191 keystore_cryptographer.AddKey(keystore_key); 1220 keystore_cryptographer.AddKey(keystore_key);
(...skipping 22 matching lines...) Expand all
1214 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1243 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1215 sync_pb::NigoriSpecifics nigori; 1244 sync_pb::NigoriSpecifics nigori;
1216 GetCryptographer()->GetKeys(nigori.mutable_encryption_keybag()); 1245 GetCryptographer()->GetKeys(nigori.mutable_encryption_keybag());
1217 nigori.set_keybag_is_frozen(true); 1246 nigori.set_keybag_is_frozen(true);
1218 nigori.set_keystore_migration_time(1); 1247 nigori.set_keystore_migration_time(1);
1219 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE); 1248 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE);
1220 nigori.set_encrypt_everything(true); 1249 nigori.set_encrypt_everything(true);
1221 nigori_node.SetNigoriSpecifics(nigori); 1250 nigori_node.SetNigoriSpecifics(nigori);
1222 } 1251 }
1223 1252
1224 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 1253 EXPECT_CALL(*observer(),
1254 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
1225 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1255 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1226 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)).Times(2); 1256 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)).Times(2);
1227 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1257 EXPECT_CALL(*observer(), OnEncryptionComplete());
1228 encryption_handler()->Init(); 1258 encryption_handler()->Init();
1229 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1259 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1230 EXPECT_TRUE(GetCryptographer()->is_ready()); 1260 EXPECT_TRUE(GetCryptographer()->is_ready());
1231 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 1261 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1262 PassphraseType::CUSTOM_PASSPHRASE);
1232 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1263 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1233 VerifyMigratedNigoriWithTimestamp(migration_time, CUSTOM_PASSPHRASE, kCurKey); 1264 VerifyMigratedNigoriWithTimestamp(migration_time,
1265 PassphraseType::CUSTOM_PASSPHRASE, kCurKey);
1234 1266
1235 { 1267 {
1236 EXPECT_CALL(*observer(), 1268 EXPECT_CALL(*observer(),
1237 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1269 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1238 ReadTransaction trans(FROM_HERE, user_share()); 1270 ReadTransaction trans(FROM_HERE, user_share());
1239 encryption_handler()->SetKeystoreKeys( 1271 encryption_handler()->SetKeystoreKeys(
1240 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1272 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1241 } 1273 }
1242 Mock::VerifyAndClearExpectations(observer()); 1274 Mock::VerifyAndClearExpectations(observer());
1243 1275
(...skipping 15 matching lines...) Expand all
1259 nigori.set_keybag_is_frozen(false); 1291 nigori.set_keybag_is_frozen(false);
1260 nigori.set_encrypt_everything(false); 1292 nigori.set_encrypt_everything(false);
1261 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1293 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1262 nigori_node.SetNigoriSpecifics(nigori); 1294 nigori_node.SetNigoriSpecifics(nigori);
1263 } 1295 }
1264 PumpLoop(); 1296 PumpLoop();
1265 1297
1266 // Verify we're still migrated and have proper encryption state. 1298 // Verify we're still migrated and have proper encryption state.
1267 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1299 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1268 EXPECT_TRUE(GetCryptographer()->is_ready()); 1300 EXPECT_TRUE(GetCryptographer()->is_ready());
1269 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 1301 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1302 PassphraseType::CUSTOM_PASSPHRASE);
1270 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1303 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1271 VerifyMigratedNigoriWithTimestamp(1, CUSTOM_PASSPHRASE, kCurKey); 1304 VerifyMigratedNigoriWithTimestamp(1, PassphraseType::CUSTOM_PASSPHRASE,
1305 kCurKey);
1272 1306
1273 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_, 1307 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_,
1274 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked 1308 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked
1275 // during a previous instance) so get it from the Cryptographer. 1309 // during a previous instance) so get it from the Cryptographer.
1276 std::string passphrase_bootstrap_token; 1310 std::string passphrase_bootstrap_token;
1277 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token); 1311 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token);
1278 VerifyRestoreAfterCustomPassphrase(migration_time, kCurKey, 1312 VerifyRestoreAfterCustomPassphrase(
1279 passphrase_bootstrap_token, 1313 migration_time, kCurKey, passphrase_bootstrap_token,
1280 captured_nigori_state, CUSTOM_PASSPHRASE); 1314 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
1281 } 1315 }
1282 1316
1283 // Test that if we have a migrated nigori with a custom passphrase, then receive 1317 // Test that if we have a migrated nigori with a custom passphrase, then receive
1284 // a migrated nigori with a keystore passphrase, we properly overwrite it with 1318 // a migrated nigori with a keystore passphrase, we properly overwrite it with
1285 // the current state. 1319 // the current state.
1286 TEST_F(SyncEncryptionHandlerImplTest, ReceiveOldMigratedNigori) { 1320 TEST_F(SyncEncryptionHandlerImplTest, ReceiveOldMigratedNigori) {
1287 const char kOldKey[] = "old"; 1321 const char kOldKey[] = "old";
1288 const char kCurKey[] = "cur"; 1322 const char kCurKey[] = "cur";
1289 sync_pb::EncryptedData encrypted; 1323 sync_pb::EncryptedData encrypted;
1290 KeyParams old_key = {"localhost", "dummy", kOldKey}; 1324 KeyParams old_key = {"localhost", "dummy", kOldKey};
1291 KeyParams cur_key = {"localhost", "dummy", kCurKey}; 1325 KeyParams cur_key = {"localhost", "dummy", kCurKey};
1292 GetCryptographer()->AddKey(old_key); 1326 GetCryptographer()->AddKey(old_key);
1293 GetCryptographer()->AddKey(cur_key); 1327 GetCryptographer()->AddKey(cur_key);
1294 1328
1295 // Build a migrated nigori with full encryption. 1329 // Build a migrated nigori with full encryption.
1296 { 1330 {
1297 WriteTransaction trans(FROM_HERE, user_share()); 1331 WriteTransaction trans(FROM_HERE, user_share());
1298 WriteNode nigori_node(&trans); 1332 WriteNode nigori_node(&trans);
1299 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1333 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1300 sync_pb::NigoriSpecifics nigori; 1334 sync_pb::NigoriSpecifics nigori;
1301 GetCryptographer()->GetKeys(nigori.mutable_encryption_keybag()); 1335 GetCryptographer()->GetKeys(nigori.mutable_encryption_keybag());
1302 nigori.set_keybag_is_frozen(true); 1336 nigori.set_keybag_is_frozen(true);
1303 nigori.set_keystore_migration_time(1); 1337 nigori.set_keystore_migration_time(1);
1304 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE); 1338 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::CUSTOM_PASSPHRASE);
1305 nigori.set_encrypt_everything(true); 1339 nigori.set_encrypt_everything(true);
1306 nigori_node.SetNigoriSpecifics(nigori); 1340 nigori_node.SetNigoriSpecifics(nigori);
1307 } 1341 }
1308 1342
1309 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 1343 EXPECT_CALL(*observer(),
1344 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
1310 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1345 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1311 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)).Times(2); 1346 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)).Times(2);
1312 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1347 EXPECT_CALL(*observer(), OnEncryptionComplete());
1313 encryption_handler()->Init(); 1348 encryption_handler()->Init();
1314 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1349 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1315 EXPECT_TRUE(GetCryptographer()->is_ready()); 1350 EXPECT_TRUE(GetCryptographer()->is_ready());
1316 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 1351 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1352 PassphraseType::CUSTOM_PASSPHRASE);
1317 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1353 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1318 VerifyMigratedNigoriWithTimestamp(1, CUSTOM_PASSPHRASE, kCurKey); 1354 VerifyMigratedNigoriWithTimestamp(1, PassphraseType::CUSTOM_PASSPHRASE,
1355 kCurKey);
1319 1356
1320 { 1357 {
1321 EXPECT_CALL(*observer(), 1358 EXPECT_CALL(*observer(),
1322 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1359 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1323 ReadTransaction trans(FROM_HERE, user_share()); 1360 ReadTransaction trans(FROM_HERE, user_share());
1324 encryption_handler()->SetKeystoreKeys( 1361 encryption_handler()->SetKeystoreKeys(
1325 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1362 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1326 } 1363 }
1327 Mock::VerifyAndClearExpectations(observer()); 1364 Mock::VerifyAndClearExpectations(observer());
1328 1365
(...skipping 21 matching lines...) Expand all
1350 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1387 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1351 nigori.set_keystore_migration_time(migration_time); 1388 nigori.set_keystore_migration_time(migration_time);
1352 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1389 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1353 nigori_node.SetNigoriSpecifics(nigori); 1390 nigori_node.SetNigoriSpecifics(nigori);
1354 } 1391 }
1355 PumpLoop(); 1392 PumpLoop();
1356 1393
1357 // Verify we're still migrated and have proper encryption state. 1394 // Verify we're still migrated and have proper encryption state.
1358 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1395 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1359 EXPECT_TRUE(GetCryptographer()->is_ready()); 1396 EXPECT_TRUE(GetCryptographer()->is_ready());
1360 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 1397 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1398 PassphraseType::CUSTOM_PASSPHRASE);
1361 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1399 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1362 VerifyMigratedNigoriWithTimestamp(migration_time, CUSTOM_PASSPHRASE, kCurKey); 1400 VerifyMigratedNigoriWithTimestamp(migration_time,
1401 PassphraseType::CUSTOM_PASSPHRASE, kCurKey);
1363 1402
1364 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_, 1403 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_,
1365 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked 1404 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked
1366 // during a previous instance) so get it from the Cryptographer. 1405 // during a previous instance) so get it from the Cryptographer.
1367 std::string passphrase_bootstrap_token; 1406 std::string passphrase_bootstrap_token;
1368 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token); 1407 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token);
1369 VerifyRestoreAfterCustomPassphrase(migration_time, kCurKey, 1408 VerifyRestoreAfterCustomPassphrase(
1370 passphrase_bootstrap_token, 1409 migration_time, kCurKey, passphrase_bootstrap_token,
1371 captured_nigori_state, CUSTOM_PASSPHRASE); 1410 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
1372 } 1411 }
1373 1412
1374 // Test that if we receive the keystore key after receiving a migrated nigori 1413 // Test that if we receive the keystore key after receiving a migrated nigori
1375 // node, we properly use the keystore decryptor token to decrypt the keybag. 1414 // node, we properly use the keystore decryptor token to decrypt the keybag.
1376 TEST_F(SyncEncryptionHandlerImplTest, SetKeystoreAfterReceivingMigratedNigori) { 1415 TEST_F(SyncEncryptionHandlerImplTest, SetKeystoreAfterReceivingMigratedNigori) {
1377 const char kCurKey[] = "cur"; 1416 const char kCurKey[] = "cur";
1378 sync_pb::EncryptedData keystore_decryptor_token; 1417 sync_pb::EncryptedData keystore_decryptor_token;
1379 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 1418 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
1380 KeyParams cur_key = {"localhost", "dummy", kCurKey}; 1419 KeyParams cur_key = {"localhost", "dummy", kCurKey};
1381 other_cryptographer.AddKey(cur_key); 1420 other_cryptographer.AddKey(cur_key);
1382 EXPECT_TRUE(other_cryptographer.is_ready()); 1421 EXPECT_TRUE(other_cryptographer.is_ready());
1383 EXPECT_TRUE(encryption_handler()->GetKeystoreDecryptor( 1422 EXPECT_TRUE(encryption_handler()->GetKeystoreDecryptor(
1384 other_cryptographer, kKeystoreKey, &keystore_decryptor_token)); 1423 other_cryptographer, kKeystoreKey, &keystore_decryptor_token));
1385 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 1424 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
1386 EXPECT_FALSE(GetCryptographer()->is_ready()); 1425 EXPECT_FALSE(GetCryptographer()->is_ready());
1387 EXPECT_NE(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1426 EXPECT_NE(encryption_handler()->GetPassphraseType(),
1427 PassphraseType::KEYSTORE_PASSPHRASE);
1388 1428
1389 // Now build a nigori node with the generated keystore decryptor token and 1429 // Now build a nigori node with the generated keystore decryptor token and
1390 // initialize the encryption handler with it. The cryptographer should be 1430 // initialize the encryption handler with it. The cryptographer should be
1391 // initialized properly to decrypt both kCurKey and kKeystoreKey. 1431 // initialized properly to decrypt both kCurKey and kKeystoreKey.
1392 { 1432 {
1393 WriteTransaction trans(FROM_HERE, user_share()); 1433 WriteTransaction trans(FROM_HERE, user_share());
1394 WriteNode nigori_node(&trans); 1434 WriteNode nigori_node(&trans);
1395 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1435 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1396 sync_pb::NigoriSpecifics nigori; 1436 sync_pb::NigoriSpecifics nigori;
1397 nigori.mutable_keystore_decryptor_token()->CopyFrom( 1437 nigori.mutable_keystore_decryptor_token()->CopyFrom(
1398 keystore_decryptor_token); 1438 keystore_decryptor_token);
1399 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1439 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1400 nigori.set_keybag_is_frozen(true); 1440 nigori.set_keybag_is_frozen(true);
1401 nigori.set_keystore_migration_time(1); 1441 nigori.set_keystore_migration_time(1);
1402 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1442 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1403 1443
1404 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1444 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(
1445 PassphraseType::KEYSTORE_PASSPHRASE, _));
1405 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1446 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1406 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 1447 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
1407 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1448 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1408 nigori_node.SetNigoriSpecifics(nigori); 1449 nigori_node.SetNigoriSpecifics(nigori);
1409 } 1450 }
1410 // Run any tasks posted via AppplyNigoriUpdate. 1451 // Run any tasks posted via AppplyNigoriUpdate.
1411 PumpLoop(); 1452 PumpLoop();
1412 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1453 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1413 EXPECT_TRUE(GetCryptographer()->has_pending_keys()); 1454 EXPECT_TRUE(GetCryptographer()->has_pending_keys());
1414 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1455 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1456 PassphraseType::KEYSTORE_PASSPHRASE);
1415 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1457 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1416 Mock::VerifyAndClearExpectations(observer()); 1458 Mock::VerifyAndClearExpectations(observer());
1417 1459
1418 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1460 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1419 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1461 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1420 EXPECT_CALL(*observer(), 1462 EXPECT_CALL(*observer(),
1421 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1463 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1422 { 1464 {
1423 EXPECT_CALL(*observer(), 1465 EXPECT_CALL(*observer(),
1424 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1466 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1425 ReadTransaction trans(FROM_HERE, user_share()); 1467 ReadTransaction trans(FROM_HERE, user_share());
1426 encryption_handler()->SetKeystoreKeys( 1468 encryption_handler()->SetKeystoreKeys(
1427 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1469 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1428 } 1470 }
1429 PumpLoop(); 1471 PumpLoop();
1430 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1472 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1431 EXPECT_TRUE(GetCryptographer()->is_ready()); 1473 EXPECT_TRUE(GetCryptographer()->is_ready());
1432 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1474 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1475 PassphraseType::KEYSTORE_PASSPHRASE);
1433 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1476 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1434 VerifyMigratedNigoriWithTimestamp(1, KEYSTORE_PASSPHRASE, kCurKey); 1477 VerifyMigratedNigoriWithTimestamp(1, PassphraseType::KEYSTORE_PASSPHRASE,
1478 kCurKey);
1435 1479
1436 // Check that the cryptographer still encrypts with the current key. 1480 // Check that the cryptographer still encrypts with the current key.
1437 sync_pb::EncryptedData current_encrypted; 1481 sync_pb::EncryptedData current_encrypted;
1438 other_cryptographer.EncryptString("string", &current_encrypted); 1482 other_cryptographer.EncryptString("string", &current_encrypted);
1439 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted)); 1483 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted));
1440 1484
1441 // Check that the cryptographer can decrypt keystore key based encryption. 1485 // Check that the cryptographer can decrypt keystore key based encryption.
1442 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1486 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1443 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey}; 1487 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey};
1444 keystore_cryptographer.AddKey(keystore_key); 1488 keystore_cryptographer.AddKey(keystore_key);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 nigori.set_keystore_migration_time(migration_time); 1520 nigori.set_keystore_migration_time(migration_time);
1477 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1521 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1478 nigori_node.SetNigoriSpecifics(nigori); 1522 nigori_node.SetNigoriSpecifics(nigori);
1479 EXPECT_CALL(*observer(), 1523 EXPECT_CALL(*observer(),
1480 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1524 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1481 encryption_handler()->SetKeystoreKeys( 1525 encryption_handler()->SetKeystoreKeys(
1482 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1526 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1483 } 1527 }
1484 1528
1485 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1529 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1486 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1530 EXPECT_CALL(*observer(),
1531 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
1487 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1532 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1488 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 1533 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
1489 EXPECT_CALL(*observer(), 1534 EXPECT_CALL(*observer(),
1490 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1535 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1491 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1536 EXPECT_CALL(*observer(), OnEncryptionComplete());
1492 encryption_handler()->Init(); 1537 encryption_handler()->Init();
1493 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1538 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1494 EXPECT_TRUE(GetCryptographer()->is_ready()); 1539 EXPECT_TRUE(GetCryptographer()->is_ready());
1495 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1540 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1541 PassphraseType::KEYSTORE_PASSPHRASE);
1496 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1542 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1497 Mock::VerifyAndClearExpectations(observer()); 1543 Mock::VerifyAndClearExpectations(observer());
1498 1544
1499 const char kNewKey[] = "new_key"; 1545 const char kNewKey[] = "new_key";
1500 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1546 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1501 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 1547 EXPECT_CALL(*observer(),
1548 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
1502 SyncEncryptionHandler::NigoriState captured_nigori_state; 1549 SyncEncryptionHandler::NigoriState captured_nigori_state;
1503 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 1550 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
1504 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 1551 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
1505 std::string captured_bootstrap_token; 1552 std::string captured_bootstrap_token;
1506 EXPECT_CALL(*observer(), 1553 EXPECT_CALL(*observer(),
1507 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 1554 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
1508 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 1555 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
1509 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1556 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1510 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 1557 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
1511 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(2); 1558 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(2);
1512 encryption_handler()->SetEncryptionPassphrase(kNewKey, true); 1559 encryption_handler()->SetEncryptionPassphrase(kNewKey, true);
1513 Mock::VerifyAndClearExpectations(observer()); 1560 Mock::VerifyAndClearExpectations(observer());
1514 1561
1515 EXPECT_FALSE(captured_bootstrap_token.empty()); 1562 EXPECT_FALSE(captured_bootstrap_token.empty());
1516 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1563 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1517 EXPECT_TRUE(GetCryptographer()->is_ready()); 1564 EXPECT_TRUE(GetCryptographer()->is_ready());
1518 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 1565 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1566 PassphraseType::CUSTOM_PASSPHRASE);
1519 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1567 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1520 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null()); 1568 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null());
1521 VerifyMigratedNigoriWithTimestamp(migration_time, CUSTOM_PASSPHRASE, kNewKey); 1569 VerifyMigratedNigoriWithTimestamp(migration_time,
1570 PassphraseType::CUSTOM_PASSPHRASE, kNewKey);
1522 1571
1523 // Check that the cryptographer can decrypt the old key. 1572 // Check that the cryptographer can decrypt the old key.
1524 sync_pb::EncryptedData old_encrypted; 1573 sync_pb::EncryptedData old_encrypted;
1525 other_cryptographer.EncryptString("string", &old_encrypted); 1574 other_cryptographer.EncryptString("string", &old_encrypted);
1526 EXPECT_TRUE(GetCryptographer()->CanDecrypt(old_encrypted)); 1575 EXPECT_TRUE(GetCryptographer()->CanDecrypt(old_encrypted));
1527 1576
1528 // Check that the cryptographer can decrypt keystore key based encryption. 1577 // Check that the cryptographer can decrypt keystore key based encryption.
1529 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1578 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1530 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey}; 1579 KeyParams keystore_key = {"localhost", "dummy", kKeystoreKey};
1531 keystore_cryptographer.AddKey(keystore_key); 1580 keystore_cryptographer.AddKey(keystore_key);
1532 sync_pb::EncryptedData keystore_encrypted; 1581 sync_pb::EncryptedData keystore_encrypted;
1533 keystore_cryptographer.EncryptString("string", &keystore_encrypted); 1582 keystore_cryptographer.EncryptString("string", &keystore_encrypted);
1534 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted)); 1583 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted));
1535 1584
1536 // Check the the cryptographer is encrypting with the new key. 1585 // Check the the cryptographer is encrypting with the new key.
1537 KeyParams new_key = {"localhost", "dummy", kNewKey}; 1586 KeyParams new_key = {"localhost", "dummy", kNewKey};
1538 Cryptographer new_cryptographer(GetCryptographer()->encryptor()); 1587 Cryptographer new_cryptographer(GetCryptographer()->encryptor());
1539 new_cryptographer.AddKey(new_key); 1588 new_cryptographer.AddKey(new_key);
1540 sync_pb::EncryptedData new_encrypted; 1589 sync_pb::EncryptedData new_encrypted;
1541 new_cryptographer.EncryptString("string", &new_encrypted); 1590 new_cryptographer.EncryptString("string", &new_encrypted);
1542 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(new_encrypted)); 1591 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(new_encrypted));
1543 1592
1544 // Now verify that we can restore the current state using the captured 1593 // Now verify that we can restore the current state using the captured
1545 // bootstrap token and nigori state. 1594 // bootstrap token and nigori state.
1546 VerifyRestoreAfterCustomPassphrase(migration_time, kNewKey, 1595 VerifyRestoreAfterCustomPassphrase(
1547 captured_bootstrap_token, 1596 migration_time, kNewKey, captured_bootstrap_token, captured_nigori_state,
1548 captured_nigori_state, CUSTOM_PASSPHRASE); 1597 PassphraseType::CUSTOM_PASSPHRASE);
1549 } 1598 }
1550 1599
1551 // Test that if a client without a keystore key (e.g. one without keystore 1600 // Test that if a client without a keystore key (e.g. one without keystore
1552 // encryption enabled) receives a migrated nigori and then attempts to set a 1601 // encryption enabled) receives a migrated nigori and then attempts to set a
1553 // custom passphrase, it also enables encrypt everything. The nigori node 1602 // custom passphrase, it also enables encrypt everything. The nigori node
1554 // should remain migrated. 1603 // should remain migrated.
1555 TEST_F(SyncEncryptionHandlerImplTest, 1604 TEST_F(SyncEncryptionHandlerImplTest,
1556 SetCustomPassAfterMigrationNoKeystoreKey) { 1605 SetCustomPassAfterMigrationNoKeystoreKey) {
1557 const char kOldKey[] = "old"; 1606 const char kOldKey[] = "old";
1558 sync_pb::EncryptedData keystore_decryptor_token; 1607 sync_pb::EncryptedData keystore_decryptor_token;
(...skipping 18 matching lines...) Expand all
1577 nigori.mutable_keystore_decryptor_token()->CopyFrom( 1626 nigori.mutable_keystore_decryptor_token()->CopyFrom(
1578 keystore_decryptor_token); 1627 keystore_decryptor_token);
1579 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1628 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1580 nigori.set_keybag_is_frozen(true); 1629 nigori.set_keybag_is_frozen(true);
1581 nigori.set_keystore_migration_time(migration_time); 1630 nigori.set_keystore_migration_time(migration_time);
1582 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1631 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1583 nigori_node.SetNigoriSpecifics(nigori); 1632 nigori_node.SetNigoriSpecifics(nigori);
1584 } 1633 }
1585 1634
1586 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 1635 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
1587 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1636 EXPECT_CALL(*observer(),
1637 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
1588 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1638 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1589 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 1639 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
1590 encryption_handler()->Init(); 1640 encryption_handler()->Init();
1591 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1641 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1592 EXPECT_TRUE(GetCryptographer()->has_pending_keys()); 1642 EXPECT_TRUE(GetCryptographer()->has_pending_keys());
1593 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1643 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1644 PassphraseType::KEYSTORE_PASSPHRASE);
1594 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1645 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1595 Mock::VerifyAndClearExpectations(observer()); 1646 Mock::VerifyAndClearExpectations(observer());
1596 1647
1597 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1648 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1598 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1649 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1599 EXPECT_CALL(*observer(), 1650 EXPECT_CALL(*observer(),
1600 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1651 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1601 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1652 EXPECT_CALL(*observer(), OnEncryptionComplete());
1602 encryption_handler()->SetDecryptionPassphrase(kOldKey); 1653 encryption_handler()->SetDecryptionPassphrase(kOldKey);
1603 EXPECT_TRUE(GetCryptographer()->is_ready()); 1654 EXPECT_TRUE(GetCryptographer()->is_ready());
1604 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1655 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1605 Mock::VerifyAndClearExpectations(observer()); 1656 Mock::VerifyAndClearExpectations(observer());
1606 1657
1607 const char kNewKey[] = "new_key"; 1658 const char kNewKey[] = "new_key";
1608 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1659 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1609 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(CUSTOM_PASSPHRASE, _)); 1660 EXPECT_CALL(*observer(),
1661 OnPassphraseTypeChanged(PassphraseType::CUSTOM_PASSPHRASE, _));
1610 SyncEncryptionHandler::NigoriState captured_nigori_state; 1662 SyncEncryptionHandler::NigoriState captured_nigori_state;
1611 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 1663 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
1612 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 1664 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
1613 std::string captured_bootstrap_token; 1665 std::string captured_bootstrap_token;
1614 EXPECT_CALL(*observer(), 1666 EXPECT_CALL(*observer(),
1615 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 1667 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
1616 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 1668 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
1617 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1669 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1618 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 1670 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
1619 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(2); 1671 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(2);
1620 encryption_handler()->SetEncryptionPassphrase(kNewKey, true); 1672 encryption_handler()->SetEncryptionPassphrase(kNewKey, true);
1621 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1673 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1622 EXPECT_TRUE(GetCryptographer()->is_ready()); 1674 EXPECT_TRUE(GetCryptographer()->is_ready());
1623 EXPECT_EQ(encryption_handler()->GetPassphraseType(), CUSTOM_PASSPHRASE); 1675 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1676 PassphraseType::CUSTOM_PASSPHRASE);
1624 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1677 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1625 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null()); 1678 EXPECT_FALSE(encryption_handler()->custom_passphrase_time().is_null());
1626 VerifyMigratedNigoriWithTimestamp(migration_time, CUSTOM_PASSPHRASE, kNewKey); 1679 VerifyMigratedNigoriWithTimestamp(migration_time,
1680 PassphraseType::CUSTOM_PASSPHRASE, kNewKey);
1627 1681
1628 // Check that the cryptographer can decrypt the old key. 1682 // Check that the cryptographer can decrypt the old key.
1629 sync_pb::EncryptedData old_encrypted; 1683 sync_pb::EncryptedData old_encrypted;
1630 other_cryptographer.EncryptString("string", &old_encrypted); 1684 other_cryptographer.EncryptString("string", &old_encrypted);
1631 EXPECT_TRUE(GetCryptographer()->CanDecrypt(old_encrypted)); 1685 EXPECT_TRUE(GetCryptographer()->CanDecrypt(old_encrypted));
1632 1686
1633 // Check that the cryptographer can still decrypt keystore key based 1687 // Check that the cryptographer can still decrypt keystore key based
1634 // encryption (should have been extracted from the encryption keybag). 1688 // encryption (should have been extracted from the encryption keybag).
1635 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1689 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1636 keystore_cryptographer.AddKey(keystore_key); 1690 keystore_cryptographer.AddKey(keystore_key);
1637 sync_pb::EncryptedData keystore_encrypted; 1691 sync_pb::EncryptedData keystore_encrypted;
1638 keystore_cryptographer.EncryptString("string", &keystore_encrypted); 1692 keystore_cryptographer.EncryptString("string", &keystore_encrypted);
1639 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted)); 1693 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted));
1640 1694
1641 // Check the the cryptographer is encrypting with the new key. 1695 // Check the the cryptographer is encrypting with the new key.
1642 KeyParams new_key = {"localhost", "dummy", kNewKey}; 1696 KeyParams new_key = {"localhost", "dummy", kNewKey};
1643 Cryptographer new_cryptographer(GetCryptographer()->encryptor()); 1697 Cryptographer new_cryptographer(GetCryptographer()->encryptor());
1644 new_cryptographer.AddKey(new_key); 1698 new_cryptographer.AddKey(new_key);
1645 sync_pb::EncryptedData new_encrypted; 1699 sync_pb::EncryptedData new_encrypted;
1646 new_cryptographer.EncryptString("string", &new_encrypted); 1700 new_cryptographer.EncryptString("string", &new_encrypted);
1647 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(new_encrypted)); 1701 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(new_encrypted));
1648 1702
1649 // Now verify that we can restore the current state using the captured 1703 // Now verify that we can restore the current state using the captured
1650 // bootstrap token and nigori state. 1704 // bootstrap token and nigori state.
1651 VerifyRestoreAfterCustomPassphrase(migration_time, kNewKey, 1705 VerifyRestoreAfterCustomPassphrase(
1652 captured_bootstrap_token, 1706 migration_time, kNewKey, captured_bootstrap_token, captured_nigori_state,
1653 captured_nigori_state, CUSTOM_PASSPHRASE); 1707 PassphraseType::CUSTOM_PASSPHRASE);
1654 } 1708 }
1655 1709
1656 // Test that if a client without a keystore key (e.g. one without keystore 1710 // Test that if a client without a keystore key (e.g. one without keystore
1657 // encryption enabled) receives a migrated nigori and then attempts to set a 1711 // encryption enabled) receives a migrated nigori and then attempts to set a
1658 // new implicit passphrase, we do not modify the nigori node (the implicit 1712 // new implicit passphrase, we do not modify the nigori node (the implicit
1659 // passphrase is dropped). 1713 // passphrase is dropped).
1660 TEST_F(SyncEncryptionHandlerImplTest, 1714 TEST_F(SyncEncryptionHandlerImplTest,
1661 SetImplicitPassAfterMigrationNoKeystoreKey) { 1715 SetImplicitPassAfterMigrationNoKeystoreKey) {
1662 const char kOldKey[] = "old"; 1716 const char kOldKey[] = "old";
1663 sync_pb::EncryptedData keystore_decryptor_token; 1717 sync_pb::EncryptedData keystore_decryptor_token;
(...skipping 17 matching lines...) Expand all
1681 nigori.mutable_keystore_decryptor_token()->CopyFrom( 1735 nigori.mutable_keystore_decryptor_token()->CopyFrom(
1682 keystore_decryptor_token); 1736 keystore_decryptor_token);
1683 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1737 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1684 nigori.set_keybag_is_frozen(true); 1738 nigori.set_keybag_is_frozen(true);
1685 nigori.set_keystore_migration_time(1); 1739 nigori.set_keystore_migration_time(1);
1686 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1740 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1687 nigori_node.SetNigoriSpecifics(nigori); 1741 nigori_node.SetNigoriSpecifics(nigori);
1688 } 1742 }
1689 1743
1690 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 1744 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
1691 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1745 EXPECT_CALL(*observer(),
1746 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
1692 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1747 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1693 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 1748 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
1694 encryption_handler()->Init(); 1749 encryption_handler()->Init();
1695 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1750 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1696 EXPECT_TRUE(GetCryptographer()->has_pending_keys()); 1751 EXPECT_TRUE(GetCryptographer()->has_pending_keys());
1697 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1752 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1753 PassphraseType::KEYSTORE_PASSPHRASE);
1698 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1754 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1699 Mock::VerifyAndClearExpectations(observer()); 1755 Mock::VerifyAndClearExpectations(observer());
1700 1756
1701 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1757 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1702 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1758 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1703 EXPECT_CALL(*observer(), 1759 EXPECT_CALL(*observer(),
1704 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 1760 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
1705 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1761 EXPECT_CALL(*observer(), OnEncryptionComplete());
1706 encryption_handler()->SetDecryptionPassphrase(kOldKey); 1762 encryption_handler()->SetDecryptionPassphrase(kOldKey);
1707 EXPECT_TRUE(GetCryptographer()->is_ready()); 1763 EXPECT_TRUE(GetCryptographer()->is_ready());
1708 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1764 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1709 Mock::VerifyAndClearExpectations(observer()); 1765 Mock::VerifyAndClearExpectations(observer());
1710 1766
1711 // Should get dropped on the floor silently. 1767 // Should get dropped on the floor silently.
1712 const char kNewKey[] = "new_key"; 1768 const char kNewKey[] = "new_key";
1713 encryption_handler()->SetEncryptionPassphrase(kNewKey, false); 1769 encryption_handler()->SetEncryptionPassphrase(kNewKey, false);
1714 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1770 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1715 EXPECT_TRUE(GetCryptographer()->is_ready()); 1771 EXPECT_TRUE(GetCryptographer()->is_ready());
1716 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1772 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1773 PassphraseType::KEYSTORE_PASSPHRASE);
1717 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1774 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1718 VerifyMigratedNigoriWithTimestamp(1, KEYSTORE_PASSPHRASE, kOldKey); 1775 VerifyMigratedNigoriWithTimestamp(1, PassphraseType::KEYSTORE_PASSPHRASE,
1776 kOldKey);
1719 1777
1720 // Check that the cryptographer can decrypt the old key. 1778 // Check that the cryptographer can decrypt the old key.
1721 sync_pb::EncryptedData old_encrypted; 1779 sync_pb::EncryptedData old_encrypted;
1722 other_cryptographer.EncryptString("string", &old_encrypted); 1780 other_cryptographer.EncryptString("string", &old_encrypted);
1723 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(old_encrypted)); 1781 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(old_encrypted));
1724 1782
1725 // Check that the cryptographer can still decrypt keystore key based 1783 // Check that the cryptographer can still decrypt keystore key based
1726 // encryption (due to extracting the keystore key from the encryption keybag). 1784 // encryption (due to extracting the keystore key from the encryption keybag).
1727 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1785 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1728 keystore_cryptographer.AddKey(keystore_key); 1786 keystore_cryptographer.AddKey(keystore_key);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1767 sync_pb::NigoriSpecifics nigori; 1825 sync_pb::NigoriSpecifics nigori;
1768 nigori.mutable_keystore_decryptor_token()->CopyFrom( 1826 nigori.mutable_keystore_decryptor_token()->CopyFrom(
1769 keystore_decryptor_token); 1827 keystore_decryptor_token);
1770 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1828 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1771 nigori.set_keybag_is_frozen(true); 1829 nigori.set_keybag_is_frozen(true);
1772 nigori.set_keystore_migration_time(migration_time); 1830 nigori.set_keystore_migration_time(migration_time);
1773 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1831 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1774 nigori_node.SetNigoriSpecifics(nigori); 1832 nigori_node.SetNigoriSpecifics(nigori);
1775 } 1833 }
1776 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 1834 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
1777 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1835 EXPECT_CALL(*observer(),
1836 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
1778 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1837 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1779 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 1838 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
1780 encryption_handler()->Init(); 1839 encryption_handler()->Init();
1781 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1840 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1782 EXPECT_TRUE(GetCryptographer()->has_pending_keys()); 1841 EXPECT_TRUE(GetCryptographer()->has_pending_keys());
1783 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1842 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1843 PassphraseType::KEYSTORE_PASSPHRASE);
1784 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1844 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1785 Mock::VerifyAndClearExpectations(observer()); 1845 Mock::VerifyAndClearExpectations(observer());
1786 1846
1787 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 1847 EXPECT_CALL(*observer(), OnPassphraseAccepted());
1788 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1848 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1789 std::string captured_bootstrap_token; 1849 std::string captured_bootstrap_token;
1790 EXPECT_CALL(*observer(), 1850 EXPECT_CALL(*observer(),
1791 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 1851 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
1792 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 1852 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
1793 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1853 EXPECT_CALL(*observer(), OnEncryptionComplete());
1794 encryption_handler()->SetDecryptionPassphrase(kCurKey); 1854 encryption_handler()->SetDecryptionPassphrase(kCurKey);
1795 Mock::VerifyAndClearExpectations(observer()); 1855 Mock::VerifyAndClearExpectations(observer());
1796 1856
1797 EXPECT_CALL(*observer(), 1857 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(
1798 OnPassphraseTypeChanged(FROZEN_IMPLICIT_PASSPHRASE, _)); 1858 PassphraseType::FROZEN_IMPLICIT_PASSPHRASE, _));
1799 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1859 EXPECT_CALL(*observer(), OnEncryptionComplete());
1800 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true)); 1860 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, true));
1801 SyncEncryptionHandler::NigoriState captured_nigori_state; 1861 SyncEncryptionHandler::NigoriState captured_nigori_state;
1802 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 1862 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
1803 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 1863 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
1804 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1864 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1805 encryption_handler()->EnableEncryptEverything(); 1865 encryption_handler()->EnableEncryptEverything();
1806 Mock::VerifyAndClearExpectations(observer()); 1866 Mock::VerifyAndClearExpectations(observer());
1807 1867
1808 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1868 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1809 EXPECT_TRUE(GetCryptographer()->is_ready()); 1869 EXPECT_TRUE(GetCryptographer()->is_ready());
1810 EXPECT_EQ(FROZEN_IMPLICIT_PASSPHRASE, 1870 EXPECT_EQ(PassphraseType::FROZEN_IMPLICIT_PASSPHRASE,
1811 encryption_handler()->GetPassphraseType()); 1871 encryption_handler()->GetPassphraseType());
1812 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled()); 1872 EXPECT_TRUE(encryption_handler()->IsEncryptEverythingEnabled());
1813 VerifyMigratedNigoriWithTimestamp(1, FROZEN_IMPLICIT_PASSPHRASE, kCurKey); 1873 VerifyMigratedNigoriWithTimestamp(
1874 1, PassphraseType::FROZEN_IMPLICIT_PASSPHRASE, kCurKey);
1814 1875
1815 // Check that the cryptographer is encrypting using the frozen current key. 1876 // Check that the cryptographer is encrypting using the frozen current key.
1816 sync_pb::EncryptedData current_encrypted; 1877 sync_pb::EncryptedData current_encrypted;
1817 other_cryptographer.EncryptString("string", &current_encrypted); 1878 other_cryptographer.EncryptString("string", &current_encrypted);
1818 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted)); 1879 EXPECT_TRUE(GetCryptographer()->CanDecryptUsingDefaultKey(current_encrypted));
1819 1880
1820 // Check that the cryptographer can still decrypt keystore key based 1881 // Check that the cryptographer can still decrypt keystore key based
1821 // encryption (due to extracting the keystore key from the encryption keybag). 1882 // encryption (due to extracting the keystore key from the encryption keybag).
1822 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor()); 1883 Cryptographer keystore_cryptographer(GetCryptographer()->encryptor());
1823 keystore_cryptographer.AddKey(keystore_key); 1884 keystore_cryptographer.AddKey(keystore_key);
1824 sync_pb::EncryptedData keystore_encrypted; 1885 sync_pb::EncryptedData keystore_encrypted;
1825 keystore_cryptographer.EncryptString("string", &keystore_encrypted); 1886 keystore_cryptographer.EncryptString("string", &keystore_encrypted);
1826 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted)); 1887 EXPECT_TRUE(GetCryptographer()->CanDecrypt(keystore_encrypted));
1827 1888
1828 VerifyRestoreAfterCustomPassphrase( 1889 VerifyRestoreAfterCustomPassphrase(
1829 migration_time, kCurKey, captured_bootstrap_token, captured_nigori_state, 1890 migration_time, kCurKey, captured_bootstrap_token, captured_nigori_state,
1830 FROZEN_IMPLICIT_PASSPHRASE); 1891 PassphraseType::FROZEN_IMPLICIT_PASSPHRASE);
1831 } 1892 }
1832 1893
1833 // If we receive a nigori migrated and with a KEYSTORE_PASSPHRASE type, but 1894 // If we receive a nigori migrated and with a KEYSTORE_PASSPHRASE type, but
1834 // using an old default key (i.e. old GAIA password), we should overwrite the 1895 // using an old default key (i.e. old GAIA password), we should overwrite the
1835 // nigori, updating the keybag and keystore decryptor. 1896 // nigori, updating the keybag and keystore decryptor.
1836 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriWithOldPassphrase) { 1897 TEST_F(SyncEncryptionHandlerImplTest, ReceiveMigratedNigoriWithOldPassphrase) {
1837 const char kOldKey[] = "old"; 1898 const char kOldKey[] = "old";
1838 const char kCurKey[] = "cur"; 1899 const char kCurKey[] = "cur";
1839 sync_pb::EncryptedData encrypted; 1900 sync_pb::EncryptedData encrypted;
1840 KeyParams old_key = {"localhost", "dummy", kOldKey}; 1901 KeyParams old_key = {"localhost", "dummy", kOldKey};
1841 KeyParams cur_key = {"localhost", "dummy", kCurKey}; 1902 KeyParams cur_key = {"localhost", "dummy", kCurKey};
1842 GetCryptographer()->AddKey(old_key); 1903 GetCryptographer()->AddKey(old_key);
1843 GetCryptographer()->AddKey(cur_key); 1904 GetCryptographer()->AddKey(cur_key);
1844 1905
1845 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 1906 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
1846 other_cryptographer.AddKey(old_key); 1907 other_cryptographer.AddKey(old_key);
1847 EXPECT_TRUE(other_cryptographer.is_ready()); 1908 EXPECT_TRUE(other_cryptographer.is_ready());
1848 1909
1849 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1910 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1850 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 1911 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
1851 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1912 EXPECT_CALL(*observer(), OnEncryptionComplete());
1852 encryption_handler()->Init(); 1913 encryption_handler()->Init();
1853 EXPECT_TRUE(GetCryptographer()->is_ready()); 1914 EXPECT_TRUE(GetCryptographer()->is_ready());
1854 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1915 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1855 1916
1856 { 1917 {
1857 EXPECT_CALL(*observer(), 1918 EXPECT_CALL(*observer(),
1858 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 1919 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
1859 ReadTransaction trans(FROM_HERE, user_share()); 1920 ReadTransaction trans(FROM_HERE, user_share());
1860 encryption_handler()->SetKeystoreKeys( 1921 encryption_handler()->SetKeystoreKeys(
1861 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 1922 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
1862 } 1923 }
1863 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 1924 EXPECT_CALL(*observer(),
1925 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
1864 PumpLoop(); 1926 PumpLoop();
1865 Mock::VerifyAndClearExpectations(observer()); 1927 Mock::VerifyAndClearExpectations(observer());
1866 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1928 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1867 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1929 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1868 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kCurKey); 1930 PassphraseType::KEYSTORE_PASSPHRASE);
1931 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kCurKey);
1869 1932
1870 // Now build an old keystore passphrase nigori node. 1933 // Now build an old keystore passphrase nigori node.
1871 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 1934 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
1872 EXPECT_CALL(*observer(), OnEncryptionComplete()); 1935 EXPECT_CALL(*observer(), OnEncryptionComplete());
1873 { 1936 {
1874 WriteTransaction trans(FROM_HERE, user_share()); 1937 WriteTransaction trans(FROM_HERE, user_share());
1875 WriteNode nigori_node(&trans); 1938 WriteNode nigori_node(&trans);
1876 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK); 1939 ASSERT_EQ(nigori_node.InitTypeRoot(NIGORI), BaseNode::INIT_OK);
1877 sync_pb::NigoriSpecifics nigori; 1940 sync_pb::NigoriSpecifics nigori;
1878 Cryptographer other_cryptographer(GetCryptographer()->encryptor()); 1941 Cryptographer other_cryptographer(GetCryptographer()->encryptor());
1879 other_cryptographer.AddKey(old_key); 1942 other_cryptographer.AddKey(old_key);
1880 encryption_handler()->GetKeystoreDecryptor( 1943 encryption_handler()->GetKeystoreDecryptor(
1881 other_cryptographer, kKeystoreKey, 1944 other_cryptographer, kKeystoreKey,
1882 nigori.mutable_keystore_decryptor_token()); 1945 nigori.mutable_keystore_decryptor_token());
1883 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag()); 1946 other_cryptographer.GetKeys(nigori.mutable_encryption_keybag());
1884 nigori.set_keybag_is_frozen(true); 1947 nigori.set_keybag_is_frozen(true);
1885 nigori.set_encrypt_everything(false); 1948 nigori.set_encrypt_everything(false);
1886 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE); 1949 nigori.set_passphrase_type(sync_pb::NigoriSpecifics::KEYSTORE_PASSPHRASE);
1887 nigori.set_keystore_migration_time(1); 1950 nigori.set_keystore_migration_time(1);
1888 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 1951 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
1889 nigori_node.SetNigoriSpecifics(nigori); 1952 nigori_node.SetNigoriSpecifics(nigori);
1890 } 1953 }
1891 PumpLoop(); 1954 PumpLoop();
1892 1955
1893 // Verify we're still migrated and have proper encryption state. 1956 // Verify we're still migrated and have proper encryption state.
1894 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 1957 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1895 EXPECT_TRUE(GetCryptographer()->is_ready()); 1958 EXPECT_TRUE(GetCryptographer()->is_ready());
1896 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 1959 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
1960 PassphraseType::KEYSTORE_PASSPHRASE);
1897 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 1961 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1898 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kCurKey); 1962 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kCurKey);
1899 } 1963 }
1900 1964
1901 // Trigger a key rotation upon receiving new keys if we already had a keystore 1965 // Trigger a key rotation upon receiving new keys if we already had a keystore
1902 // migrated nigori with the gaia key as the default (still in backwards 1966 // migrated nigori with the gaia key as the default (still in backwards
1903 // compatible mode). 1967 // compatible mode).
1904 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysGaiaDefault) { 1968 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysGaiaDefault) {
1905 // Destroy the existing nigori node so we init without a nigori node. 1969 // Destroy the existing nigori node so we init without a nigori node.
1906 TearDown(); 1970 TearDown();
1907 test_user_share_.SetUp(); 1971 test_user_share_.SetUp();
1908 SetUpEncryption(); 1972 SetUpEncryption();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1940 } 2004 }
1941 // Pump for any posted tasks. 2005 // Pump for any posted tasks.
1942 PumpLoop(); 2006 PumpLoop();
1943 Mock::VerifyAndClearExpectations(observer()); 2007 Mock::VerifyAndClearExpectations(observer());
1944 2008
1945 // Verify we're still migrated and have proper encryption state. We should 2009 // Verify we're still migrated and have proper encryption state. We should
1946 // have rotated the keybag so that it's now encrypted with the newest keystore 2010 // have rotated the keybag so that it's now encrypted with the newest keystore
1947 // key (instead of the old gaia key). 2011 // key (instead of the old gaia key).
1948 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 2012 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
1949 EXPECT_TRUE(GetCryptographer()->is_ready()); 2013 EXPECT_TRUE(GetCryptographer()->is_ready());
1950 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 2014 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
2015 PassphraseType::KEYSTORE_PASSPHRASE);
1951 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 2016 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
1952 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kKeystoreKey); 2017 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kKeystoreKey);
1953 } 2018 }
1954 2019
1955 // Trigger a key rotation upon receiving new keys if we already had a keystore 2020 // Trigger a key rotation upon receiving new keys if we already had a keystore
1956 // migrated nigori with the keystore key as the default. 2021 // migrated nigori with the keystore key as the default.
1957 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysKeystoreDefault) { 2022 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysKeystoreDefault) {
1958 // Destroy the existing nigori node so we init without a nigori node. 2023 // Destroy the existing nigori node so we init without a nigori node.
1959 TearDown(); 2024 TearDown();
1960 test_user_share_.SetUp(); 2025 test_user_share_.SetUp();
1961 SetUpEncryption(); 2026 SetUpEncryption();
1962 2027
(...skipping 29 matching lines...) Expand all
1992 } 2057 }
1993 // Pump for any posted tasks. 2058 // Pump for any posted tasks.
1994 PumpLoop(); 2059 PumpLoop();
1995 Mock::VerifyAndClearExpectations(observer()); 2060 Mock::VerifyAndClearExpectations(observer());
1996 2061
1997 // Verify we're still migrated and have proper encryption state. We should 2062 // Verify we're still migrated and have proper encryption state. We should
1998 // have rotated the keybag so that it's now encrypted with the newest keystore 2063 // have rotated the keybag so that it's now encrypted with the newest keystore
1999 // key (instead of the old gaia key). 2064 // key (instead of the old gaia key).
2000 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 2065 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
2001 EXPECT_TRUE(GetCryptographer()->is_ready()); 2066 EXPECT_TRUE(GetCryptographer()->is_ready());
2002 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 2067 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
2068 PassphraseType::KEYSTORE_PASSPHRASE);
2003 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 2069 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
2004 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kKeystoreKey); 2070 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kKeystoreKey);
2005 } 2071 }
2006 2072
2007 // Trigger a key rotation upon when a pending gaia passphrase is resolved. 2073 // Trigger a key rotation upon when a pending gaia passphrase is resolved.
2008 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysAfterPendingGaiaResolved) { 2074 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysAfterPendingGaiaResolved) {
2009 const char kOldGaiaKey[] = "old_gaia_key"; 2075 const char kOldGaiaKey[] = "old_gaia_key";
2010 const char kRawOldKeystoreKey[] = "old_keystore_key"; 2076 const char kRawOldKeystoreKey[] = "old_keystore_key";
2011 2077
2012 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 2078 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
2013 InitUnmigratedNigori(kOldGaiaKey, IMPLICIT_PASSPHRASE); 2079 InitUnmigratedNigori(kOldGaiaKey, PassphraseType::IMPLICIT_PASSPHRASE);
2014 2080
2015 { 2081 {
2016 // Pass multiple keystore keys, signaling a rotation has happened. 2082 // Pass multiple keystore keys, signaling a rotation has happened.
2017 google::protobuf::RepeatedPtrField<google::protobuf::string> keys; 2083 google::protobuf::RepeatedPtrField<google::protobuf::string> keys;
2018 keys.Add()->assign(kRawOldKeystoreKey); 2084 keys.Add()->assign(kRawOldKeystoreKey);
2019 keys.Add()->assign(kRawKeystoreKey); 2085 keys.Add()->assign(kRawKeystoreKey);
2020 ReadTransaction trans(FROM_HERE, user_share()); 2086 ReadTransaction trans(FROM_HERE, user_share());
2021 EXPECT_CALL(*observer(), 2087 EXPECT_CALL(*observer(),
2022 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 2088 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
2023 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans()); 2089 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans());
2024 } 2090 }
2025 PumpLoop(); 2091 PumpLoop();
2026 Mock::VerifyAndClearExpectations(observer()); 2092 Mock::VerifyAndClearExpectations(observer());
2027 2093
2028 // Resolve the pending keys. This should trigger the key rotation. 2094 // Resolve the pending keys. This should trigger the key rotation.
2029 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 2095 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
2030 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 2096 EXPECT_CALL(*observer(), OnPassphraseAccepted());
2031 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 2097 EXPECT_CALL(*observer(),
2098 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
2032 EXPECT_CALL(*observer(), 2099 EXPECT_CALL(*observer(),
2033 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 2100 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
2034 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1)); 2101 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1));
2035 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 2102 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
2036 encryption_handler()->SetDecryptionPassphrase(kOldGaiaKey); 2103 encryption_handler()->SetDecryptionPassphrase(kOldGaiaKey);
2037 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 2104 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
2038 EXPECT_EQ(KEYSTORE_PASSPHRASE, encryption_handler()->GetPassphraseType()); 2105 EXPECT_EQ(PassphraseType::KEYSTORE_PASSPHRASE,
2039 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kKeystoreKey); 2106 encryption_handler()->GetPassphraseType());
2107 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kKeystoreKey);
2040 } 2108 }
2041 2109
2042 // When signing in for the first time, make sure we can rotate keys if we 2110 // When signing in for the first time, make sure we can rotate keys if we
2043 // already have a keystore migrated nigori. 2111 // already have a keystore migrated nigori.
2044 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysGaiaDefaultOnInit) { 2112 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysGaiaDefaultOnInit) {
2045 // Destroy the existing nigori node so we init without a nigori node. 2113 // Destroy the existing nigori node so we init without a nigori node.
2046 TearDown(); 2114 TearDown();
2047 test_user_share_.SetUp(); 2115 test_user_share_.SetUp();
2048 SetUpEncryption(); 2116 SetUpEncryption();
2049 2117
(...skipping 19 matching lines...) Expand all
2069 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 2137 EXPECT_CALL(*observer(), OnPassphraseAccepted());
2070 InitKeystoreMigratedNigori(1, kOldGaiaKey, old_keystore_key); 2138 InitKeystoreMigratedNigori(1, kOldGaiaKey, old_keystore_key);
2071 PumpLoop(); 2139 PumpLoop();
2072 Mock::VerifyAndClearExpectations(observer()); 2140 Mock::VerifyAndClearExpectations(observer());
2073 2141
2074 // Verify we're still migrated and have proper encryption state. We should 2142 // Verify we're still migrated and have proper encryption state. We should
2075 // have rotated the keybag so that it's now encrypted with the newest keystore 2143 // have rotated the keybag so that it's now encrypted with the newest keystore
2076 // key (instead of the old gaia key). 2144 // key (instead of the old gaia key).
2077 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 2145 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
2078 EXPECT_TRUE(GetCryptographer()->is_ready()); 2146 EXPECT_TRUE(GetCryptographer()->is_ready());
2079 EXPECT_EQ(encryption_handler()->GetPassphraseType(), KEYSTORE_PASSPHRASE); 2147 EXPECT_EQ(encryption_handler()->GetPassphraseType(),
2148 PassphraseType::KEYSTORE_PASSPHRASE);
2080 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled()); 2149 EXPECT_FALSE(encryption_handler()->IsEncryptEverythingEnabled());
2081 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kKeystoreKey); 2150 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kKeystoreKey);
2082 } 2151 }
2083 2152
2084 // Trigger a key rotation when a migrated nigori (with an old keystore key) is 2153 // Trigger a key rotation when a migrated nigori (with an old keystore key) is
2085 // applied. 2154 // applied.
2086 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysWhenMigratedNigoriArrives) { 2155 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysWhenMigratedNigoriArrives) {
2087 const char kOldGaiaKey[] = "old_gaia_key"; 2156 const char kOldGaiaKey[] = "old_gaia_key";
2088 const char kRawOldKeystoreKey[] = "old_keystore_key"; 2157 const char kRawOldKeystoreKey[] = "old_keystore_key";
2089 std::string old_keystore_key; 2158 std::string old_keystore_key;
2090 base::Base64Encode(kRawOldKeystoreKey, &old_keystore_key); 2159 base::Base64Encode(kRawOldKeystoreKey, &old_keystore_key);
2091 2160
2092 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 2161 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
2093 InitUnmigratedNigori(kOldGaiaKey, IMPLICIT_PASSPHRASE); 2162 InitUnmigratedNigori(kOldGaiaKey, PassphraseType::IMPLICIT_PASSPHRASE);
2094 2163
2095 { 2164 {
2096 // Pass multiple keystore keys, signaling a rotation has happened. 2165 // Pass multiple keystore keys, signaling a rotation has happened.
2097 google::protobuf::RepeatedPtrField<google::protobuf::string> keys; 2166 google::protobuf::RepeatedPtrField<google::protobuf::string> keys;
2098 keys.Add()->assign(kRawOldKeystoreKey); 2167 keys.Add()->assign(kRawOldKeystoreKey);
2099 keys.Add()->assign(kRawKeystoreKey); 2168 keys.Add()->assign(kRawKeystoreKey);
2100 ReadTransaction trans(FROM_HERE, user_share()); 2169 ReadTransaction trans(FROM_HERE, user_share());
2101 EXPECT_CALL(*observer(), 2170 EXPECT_CALL(*observer(),
2102 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 2171 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
2103 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans()); 2172 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans());
2104 } 2173 }
2105 PumpLoop(); 2174 PumpLoop();
2106 Mock::VerifyAndClearExpectations(observer()); 2175 Mock::VerifyAndClearExpectations(observer());
2107 2176
2108 // Now simulate downloading a nigori node that was migrated before the 2177 // Now simulate downloading a nigori node that was migrated before the
2109 // keys were rotated, and hence still encrypt with the old gaia key. 2178 // keys were rotated, and hence still encrypt with the old gaia key.
2110 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 2179 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
2111 EXPECT_CALL(*observer(), OnPassphraseAccepted()); 2180 EXPECT_CALL(*observer(), OnPassphraseAccepted());
2112 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 2181 EXPECT_CALL(*observer(),
2182 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
2113 EXPECT_CALL(*observer(), 2183 EXPECT_CALL(*observer(),
2114 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 2184 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
2115 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1)); 2185 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AtLeast(1));
2116 { 2186 {
2117 sync_pb::NigoriSpecifics nigori = BuildMigratedNigori( 2187 sync_pb::NigoriSpecifics nigori = BuildMigratedNigori(
2118 KEYSTORE_PASSPHRASE, 1, kOldGaiaKey, old_keystore_key); 2188 PassphraseType::KEYSTORE_PASSPHRASE, 1, kOldGaiaKey, old_keystore_key);
2119 // Update the encryption handler. 2189 // Update the encryption handler.
2120 WriteTransaction trans(FROM_HERE, user_share()); 2190 WriteTransaction trans(FROM_HERE, user_share());
2121 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 2191 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
2122 } 2192 }
2123 EXPECT_FALSE(encryption_handler()->MigratedToKeystore()); 2193 EXPECT_FALSE(encryption_handler()->MigratedToKeystore());
2124 PumpLoop(); 2194 PumpLoop();
2125 2195
2126 EXPECT_TRUE(encryption_handler()->MigratedToKeystore()); 2196 EXPECT_TRUE(encryption_handler()->MigratedToKeystore());
2127 EXPECT_EQ(KEYSTORE_PASSPHRASE, encryption_handler()->GetPassphraseType()); 2197 EXPECT_EQ(PassphraseType::KEYSTORE_PASSPHRASE,
2128 VerifyMigratedNigori(KEYSTORE_PASSPHRASE, kKeystoreKey); 2198 encryption_handler()->GetPassphraseType());
2199 VerifyMigratedNigori(PassphraseType::KEYSTORE_PASSPHRASE, kKeystoreKey);
2129 } 2200 }
2130 2201
2131 // Verify that performing a migration while having more than one keystore key 2202 // Verify that performing a migration while having more than one keystore key
2132 // preserves a custom passphrase. 2203 // preserves a custom passphrase.
2133 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysUnmigratedCustomPassphrase) { 2204 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysUnmigratedCustomPassphrase) {
2134 const char kCustomPass[] = "custom_passphrase"; 2205 const char kCustomPass[] = "custom_passphrase";
2135 const char kRawOldKeystoreKey[] = "old_keystore_key"; 2206 const char kRawOldKeystoreKey[] = "old_keystore_key";
2136 2207
2137 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 2208 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
2138 InitUnmigratedNigori(kCustomPass, CUSTOM_PASSPHRASE); 2209 InitUnmigratedNigori(kCustomPass, PassphraseType::CUSTOM_PASSPHRASE);
2139 2210
2140 { 2211 {
2141 // Pass multiple keystore keys, signaling a rotation has happened. 2212 // Pass multiple keystore keys, signaling a rotation has happened.
2142 google::protobuf::RepeatedPtrField<google::protobuf::string> keys; 2213 google::protobuf::RepeatedPtrField<google::protobuf::string> keys;
2143 keys.Add()->assign(kRawOldKeystoreKey); 2214 keys.Add()->assign(kRawOldKeystoreKey);
2144 keys.Add()->assign(kRawKeystoreKey); 2215 keys.Add()->assign(kRawKeystoreKey);
2145 ReadTransaction trans(FROM_HERE, user_share()); 2216 ReadTransaction trans(FROM_HERE, user_share());
2146 EXPECT_CALL(*observer(), 2217 EXPECT_CALL(*observer(),
2147 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 2218 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
2148 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans()); 2219 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans());
(...skipping 10 matching lines...) Expand all
2159 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 2230 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
2160 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 2231 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
2161 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AnyNumber()); 2232 EXPECT_CALL(*observer(), OnEncryptionComplete()).Times(AnyNumber());
2162 std::string captured_bootstrap_token; 2233 std::string captured_bootstrap_token;
2163 EXPECT_CALL(*observer(), 2234 EXPECT_CALL(*observer(),
2164 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)) 2235 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN))
2165 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token)); 2236 .WillOnce(testing::SaveArg<0>(&captured_bootstrap_token));
2166 encryption_handler()->SetDecryptionPassphrase(kCustomPass); 2237 encryption_handler()->SetDecryptionPassphrase(kCustomPass);
2167 Mock::VerifyAndClearExpectations(observer()); 2238 Mock::VerifyAndClearExpectations(observer());
2168 2239
2169 VerifyMigratedNigori(CUSTOM_PASSPHRASE, kCustomPass); 2240 VerifyMigratedNigori(PassphraseType::CUSTOM_PASSPHRASE, kCustomPass);
2170 2241
2171 const base::Time migration_time = encryption_handler()->migration_time(); 2242 const base::Time migration_time = encryption_handler()->migration_time();
2172 VerifyRestoreAfterCustomPassphrase(TimeToProtoTime(migration_time), 2243 VerifyRestoreAfterCustomPassphrase(
2173 kCustomPass, captured_bootstrap_token, 2244 TimeToProtoTime(migration_time), kCustomPass, captured_bootstrap_token,
2174 captured_nigori_state, CUSTOM_PASSPHRASE); 2245 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
2175 } 2246 }
2176 2247
2177 // Verify that a key rotation done after we've migrated a custom passphrase 2248 // Verify that a key rotation done after we've migrated a custom passphrase
2178 // nigori node preserves the custom passphrase. 2249 // nigori node preserves the custom passphrase.
2179 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysMigratedCustomPassphrase) { 2250 TEST_F(SyncEncryptionHandlerImplTest, RotateKeysMigratedCustomPassphrase) {
2180 const char kCustomPass[] = "custom_passphrase"; 2251 const char kCustomPass[] = "custom_passphrase";
2181 const char kRawOldKeystoreKey[] = "old_keystore_key"; 2252 const char kRawOldKeystoreKey[] = "old_keystore_key";
2182 2253
2183 KeyParams custom_key = {"localhost", "dummy", kCustomPass}; 2254 KeyParams custom_key = {"localhost", "dummy", kCustomPass};
2184 GetCryptographer()->AddKey(custom_key); 2255 GetCryptographer()->AddKey(custom_key);
2185 2256
2186 const int64_t migration_time = 1; 2257 const int64_t migration_time = 1;
2187 InitCustomPassMigratedNigori(migration_time, kCustomPass); 2258 InitCustomPassMigratedNigori(migration_time, kCustomPass);
2188 VerifyMigratedNigoriWithTimestamp(migration_time, CUSTOM_PASSPHRASE, 2259 VerifyMigratedNigoriWithTimestamp(
2189 kCustomPass); 2260 migration_time, PassphraseType::CUSTOM_PASSPHRASE, kCustomPass);
2190 2261
2191 SyncEncryptionHandler::NigoriState captured_nigori_state; 2262 SyncEncryptionHandler::NigoriState captured_nigori_state;
2192 { 2263 {
2193 // Pass multiple keystore keys, signaling a rotation has happened. 2264 // Pass multiple keystore keys, signaling a rotation has happened.
2194 google::protobuf::RepeatedPtrField<google::protobuf::string> keys; 2265 google::protobuf::RepeatedPtrField<google::protobuf::string> keys;
2195 keys.Add()->assign(kRawOldKeystoreKey); 2266 keys.Add()->assign(kRawOldKeystoreKey);
2196 keys.Add()->assign(kRawKeystoreKey); 2267 keys.Add()->assign(kRawKeystoreKey);
2197 ReadTransaction trans(FROM_HERE, user_share()); 2268 ReadTransaction trans(FROM_HERE, user_share());
2198 EXPECT_CALL(*observer(), 2269 EXPECT_CALL(*observer(),
2199 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 2270 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
2200 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 2271 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
2201 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_)) 2272 EXPECT_CALL(*observer(), OnLocalSetPassphraseEncryption(_))
2202 .WillOnce(testing::SaveArg<0>(&captured_nigori_state)); 2273 .WillOnce(testing::SaveArg<0>(&captured_nigori_state));
2203 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans()); 2274 encryption_handler()->SetKeystoreKeys(keys, trans.GetWrappedTrans());
2204 } 2275 }
2205 PumpLoop(); 2276 PumpLoop();
2206 Mock::VerifyAndClearExpectations(observer()); 2277 Mock::VerifyAndClearExpectations(observer());
2207 2278
2208 VerifyMigratedNigoriWithTimestamp(migration_time, CUSTOM_PASSPHRASE, 2279 VerifyMigratedNigoriWithTimestamp(
2209 kCustomPass); 2280 migration_time, PassphraseType::CUSTOM_PASSPHRASE, kCustomPass);
2210 2281
2211 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_, 2282 // We need the passphrase bootstrap token, but OnBootstrapTokenUpdated(_,
2212 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked 2283 // PASSPHRASE_BOOTSTRAP_TOKEN) has not been invoked (because it was invoked
2213 // during a previous instance) so get it from the Cryptographer. 2284 // during a previous instance) so get it from the Cryptographer.
2214 std::string passphrase_bootstrap_token; 2285 std::string passphrase_bootstrap_token;
2215 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token); 2286 GetCryptographer()->GetBootstrapToken(&passphrase_bootstrap_token);
2216 VerifyRestoreAfterCustomPassphrase(migration_time, kCustomPass, 2287 VerifyRestoreAfterCustomPassphrase(
2217 passphrase_bootstrap_token, 2288 migration_time, kCustomPass, passphrase_bootstrap_token,
2218 captured_nigori_state, CUSTOM_PASSPHRASE); 2289 captured_nigori_state, PassphraseType::CUSTOM_PASSPHRASE);
2219 } 2290 }
2220 2291
2221 // Verify that the client can gracefully handle a nigori node that is missing 2292 // Verify that the client can gracefully handle a nigori node that is missing
2222 // the keystore migration time field. 2293 // the keystore migration time field.
2223 TEST_F(SyncEncryptionHandlerImplTest, MissingKeystoreMigrationTime) { 2294 TEST_F(SyncEncryptionHandlerImplTest, MissingKeystoreMigrationTime) {
2224 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 2295 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
2225 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 2296 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
2226 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false)); 2297 EXPECT_CALL(*observer(), OnEncryptedTypesChanged(_, false));
2227 encryption_handler()->Init(); 2298 encryption_handler()->Init();
2228 Mock::VerifyAndClearExpectations(observer()); 2299 Mock::VerifyAndClearExpectations(observer());
2229 2300
2230 // Now simulate downloading a nigori node that that is missing the keystore 2301 // Now simulate downloading a nigori node that that is missing the keystore
2231 // migration time. It should be interpreted properly, and the passphrase type 2302 // migration time. It should be interpreted properly, and the passphrase type
2232 // should switch to keystore passphrase. 2303 // should switch to keystore passphrase.
2233 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 2304 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
2234 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _)); 2305 EXPECT_CALL(*observer(), OnPassphraseRequired(_, _));
2235 EXPECT_CALL(*observer(), OnPassphraseTypeChanged(KEYSTORE_PASSPHRASE, _)); 2306 EXPECT_CALL(*observer(),
2307 OnPassphraseTypeChanged(PassphraseType::KEYSTORE_PASSPHRASE, _));
2236 { 2308 {
2237 sync_pb::NigoriSpecifics nigori = 2309 sync_pb::NigoriSpecifics nigori = BuildMigratedNigori(
2238 BuildMigratedNigori(KEYSTORE_PASSPHRASE, 1, kKeystoreKey, kKeystoreKey); 2310 PassphraseType::KEYSTORE_PASSPHRASE, 1, kKeystoreKey, kKeystoreKey);
2239 nigori.clear_keystore_migration_time(); 2311 nigori.clear_keystore_migration_time();
2240 // Update the encryption handler. 2312 // Update the encryption handler.
2241 WriteTransaction trans(FROM_HERE, user_share()); 2313 WriteTransaction trans(FROM_HERE, user_share());
2242 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans()); 2314 encryption_handler()->ApplyNigoriUpdate(nigori, trans.GetWrappedTrans());
2243 } 2315 }
2244 Mock::VerifyAndClearExpectations(observer()); 2316 Mock::VerifyAndClearExpectations(observer());
2245 2317
2246 // Now provide the keystore key to fully initialize the cryptographer. 2318 // Now provide the keystore key to fully initialize the cryptographer.
2247 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber()); 2319 EXPECT_CALL(*observer(), OnCryptographerStateChanged(_)).Times(AnyNumber());
2248 EXPECT_CALL(*observer(), 2320 EXPECT_CALL(*observer(),
2249 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN)); 2321 OnBootstrapTokenUpdated(_, KEYSTORE_BOOTSTRAP_TOKEN));
2250 { 2322 {
2251 ReadTransaction trans(FROM_HERE, user_share()); 2323 ReadTransaction trans(FROM_HERE, user_share());
2252 encryption_handler()->SetKeystoreKeys( 2324 encryption_handler()->SetKeystoreKeys(
2253 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans()); 2325 BuildEncryptionKeyProto(kRawKeystoreKey), trans.GetWrappedTrans());
2254 } 2326 }
2255 } 2327 }
2256 2328
2257 } // namespace syncer 2329 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/core_impl/sync_encryption_handler_impl.cc ('k') | components/sync/core_impl/sync_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698