OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "sync/util/cryptographer.h" | 5 #include "sync/util/cryptographer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
45 if (is_initialized()) { | 45 if (is_initialized()) { |
46 NOTREACHED(); | 46 NOTREACHED(); |
47 return; | 47 return; |
48 } | 48 } |
49 | 49 |
50 scoped_ptr<Nigori> nigori(UnpackBootstrapToken(restored_bootstrap_token)); | 50 scoped_ptr<Nigori> nigori(UnpackBootstrapToken(restored_bootstrap_token)); |
51 if (nigori.get()) | 51 if (nigori.get()) |
52 AddKeyImpl(nigori.release()); | 52 AddKeyImpl(nigori.release()); |
53 } | 53 } |
54 | 54 |
55 void Cryptographer::BootstrapKeystoreKey( | |
56 const std::string& restored_bootstrap_token) { | |
57 if (keystore_nigori_) { | |
58 NOTREACHED(); | |
59 return; | |
60 } | |
61 | |
62 scoped_ptr<Nigori> nigori(UnpackBootstrapToken(restored_bootstrap_token)); | |
63 if (!nigori.get()) | |
64 return; | |
65 // AddKeyImpl updates the default nigori, so we save the current default and | |
66 // make sure the keystore_nigori_ gets updated instead. | |
67 NigoriMap::value_type* old_default = default_nigori_; | |
rlarocque
2012/06/13 23:35:04
Why use linked_ptr<>*?
Nicolas Zea
2012/06/15 00:42:07
Because they're also contained within the nigori k
| |
68 if (AddKeyImpl(nigori.release())) { | |
69 keystore_nigori_ = default_nigori_; | |
70 default_nigori_ = old_default; | |
71 } | |
72 } | |
73 | |
55 bool Cryptographer::CanDecrypt(const sync_pb::EncryptedData& data) const { | 74 bool Cryptographer::CanDecrypt(const sync_pb::EncryptedData& data) const { |
56 return nigoris_.end() != nigoris_.find(data.key_name()); | 75 return nigoris_.end() != nigoris_.find(data.key_name()); |
57 } | 76 } |
58 | 77 |
59 bool Cryptographer::CanDecryptUsingDefaultKey( | 78 bool Cryptographer::CanDecryptUsingDefaultKey( |
60 const sync_pb::EncryptedData& data) const { | 79 const sync_pb::EncryptedData& data) const { |
61 return default_nigori_ && (data.key_name() == default_nigori_->first); | 80 return default_nigori_ && (data.key_name() == default_nigori_->first); |
62 } | 81 } |
63 | 82 |
64 bool Cryptographer::Encrypt( | 83 bool Cryptographer::Encrypt( |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
215 } | 234 } |
216 | 235 |
217 bool Cryptographer::GetBootstrapToken(std::string* token) const { | 236 bool Cryptographer::GetBootstrapToken(std::string* token) const { |
218 DCHECK(token); | 237 DCHECK(token); |
219 if (!is_initialized()) | 238 if (!is_initialized()) |
220 return false; | 239 return false; |
221 | 240 |
222 return PackBootstrapToken(default_nigori_->second.get(), token); | 241 return PackBootstrapToken(default_nigori_->second.get(), token); |
223 } | 242 } |
224 | 243 |
244 bool Cryptographer::GetKeystoreKeyBootstrapToken( | |
245 std::string* token) const { | |
246 DCHECK(token); | |
247 if (!HasKeystoreKey()) | |
248 return false; | |
249 | |
250 return PackBootstrapToken(keystore_nigori_->second.get(), token); | |
251 } | |
252 | |
225 bool Cryptographer::PackBootstrapToken(const Nigori* nigori, | 253 bool Cryptographer::PackBootstrapToken(const Nigori* nigori, |
226 std::string* pack_into) const { | 254 std::string* pack_into) const { |
227 DCHECK(pack_into); | 255 DCHECK(pack_into); |
228 DCHECK(nigori); | 256 DCHECK(nigori); |
229 | 257 |
230 sync_pb::NigoriKey key; | 258 sync_pb::NigoriKey key; |
231 if (!nigori->ExportKeys(key.mutable_user_key(), | 259 if (!nigori->ExportKeys(key.mutable_user_key(), |
232 key.mutable_encryption_key(), | 260 key.mutable_encryption_key(), |
233 key.mutable_mac_key())) { | 261 key.mutable_mac_key())) { |
234 NOTREACHED(); | 262 NOTREACHED(); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
318 // make sure the keystore_nigori_ gets updated instead. | 346 // make sure the keystore_nigori_ gets updated instead. |
319 NigoriMap::value_type* old_default = default_nigori_; | 347 NigoriMap::value_type* old_default = default_nigori_; |
320 if (AddKey(params)) { | 348 if (AddKey(params)) { |
321 keystore_nigori_ = default_nigori_; | 349 keystore_nigori_ = default_nigori_; |
322 default_nigori_ = old_default; | 350 default_nigori_ = old_default; |
323 return true; | 351 return true; |
324 } | 352 } |
325 return false; | 353 return false; |
326 } | 354 } |
327 | 355 |
328 bool Cryptographer::HasKeystoreKey() { | 356 bool Cryptographer::HasKeystoreKey() const { |
329 return keystore_nigori_ != NULL; | 357 return keystore_nigori_ != NULL; |
330 } | 358 } |
331 | 359 |
332 // Static | 360 // Static |
333 syncable::ModelTypeSet Cryptographer::SensitiveTypes() { | 361 syncable::ModelTypeSet Cryptographer::SensitiveTypes() { |
334 // Both of these have their own encryption schemes, but we include them | 362 // Both of these have their own encryption schemes, but we include them |
335 // anyways. | 363 // anyways. |
336 syncable::ModelTypeSet types; | 364 syncable::ModelTypeSet types; |
337 types.Put(syncable::PASSWORDS); | 365 types.Put(syncable::PASSWORDS); |
338 types.Put(syncable::NIGORI); | 366 types.Put(syncable::NIGORI); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
465 key.mac_key())) { | 493 key.mac_key())) { |
466 NOTREACHED(); | 494 NOTREACHED(); |
467 continue; | 495 continue; |
468 } | 496 } |
469 nigoris_[key.name()] = make_linked_ptr(new_nigori.release()); | 497 nigoris_[key.name()] = make_linked_ptr(new_nigori.release()); |
470 } | 498 } |
471 } | 499 } |
472 } | 500 } |
473 | 501 |
474 } // namespace browser_sync | 502 } // namespace browser_sync |
OLD | NEW |