| Index: chrome/browser/sync/engine/nigori_util.cc
|
| diff --git a/chrome/browser/sync/engine/nigori_util.cc b/chrome/browser/sync/engine/nigori_util.cc
|
| deleted file mode 100644
|
| index b9791aba609a48418e97a5cc9dfb929b2f11fabe..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/sync/engine/nigori_util.cc
|
| +++ /dev/null
|
| @@ -1,157 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/sync/engine/nigori_util.h"
|
| -
|
| -#include <queue>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "chrome/browser/sync/engine/syncer_util.h"
|
| -#include "chrome/browser/sync/internal_api/write_node.h"
|
| -#include "chrome/browser/sync/syncable/syncable.h"
|
| -#include "chrome/browser/sync/util/cryptographer.h"
|
| -
|
| -namespace syncable {
|
| -
|
| -bool ProcessUnsyncedChangesForEncryption(
|
| - WriteTransaction* const trans,
|
| - browser_sync::Cryptographer* cryptographer) {
|
| - DCHECK(cryptographer->is_ready());
|
| - // Get list of all datatypes with unsynced changes. It's possible that our
|
| - // local changes need to be encrypted if encryption for that datatype was
|
| - // just turned on (and vice versa).
|
| - // Note: we do not attempt to re-encrypt data with a new key here as key
|
| - // changes in this code path are likely due to consistency issues (we have
|
| - // to be updated to a key we already have, e.g. an old key).
|
| - std::vector<int64> handles;
|
| - browser_sync::SyncerUtil::GetUnsyncedEntries(trans, &handles);
|
| - for (size_t i = 0; i < handles.size(); ++i) {
|
| - MutableEntry entry(trans, GET_BY_HANDLE, handles[i]);
|
| - const sync_pb::EntitySpecifics& specifics = entry.Get(SPECIFICS);
|
| - // Ignore types that don't need encryption or entries that are already
|
| - // encrypted.
|
| - if (!SpecificsNeedsEncryption(cryptographer->GetEncryptedTypes(),
|
| - specifics)) {
|
| - continue;
|
| - }
|
| - if (!sync_api::WriteNode::UpdateEntryWithEncryption(cryptographer,
|
| - specifics,
|
| - &entry)) {
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool VerifyUnsyncedChangesAreEncrypted(
|
| - BaseTransaction* const trans,
|
| - ModelTypeSet encrypted_types) {
|
| - std::vector<int64> handles;
|
| - browser_sync::SyncerUtil::GetUnsyncedEntries(trans, &handles);
|
| - for (size_t i = 0; i < handles.size(); ++i) {
|
| - Entry entry(trans, GET_BY_HANDLE, handles[i]);
|
| - if (!entry.good()) {
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| - if (EntryNeedsEncryption(encrypted_types, entry))
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool EntryNeedsEncryption(ModelTypeSet encrypted_types,
|
| - const Entry& entry) {
|
| - if (!entry.Get(UNIQUE_SERVER_TAG).empty())
|
| - return false; // We don't encrypt unique server nodes.
|
| - syncable::ModelType type = entry.GetModelType();
|
| - if (type == PASSWORDS || type == NIGORI)
|
| - return false;
|
| - // Checking NON_UNIQUE_NAME is not necessary for the correctness of encrypting
|
| - // the data, nor for determining if data is encrypted. We simply ensure it has
|
| - // been overwritten to avoid any possible leaks of sensitive data.
|
| - return SpecificsNeedsEncryption(encrypted_types, entry.Get(SPECIFICS)) ||
|
| - (encrypted_types.Has(type) &&
|
| - entry.Get(NON_UNIQUE_NAME) != kEncryptedString);
|
| -}
|
| -
|
| -bool SpecificsNeedsEncryption(ModelTypeSet encrypted_types,
|
| - const sync_pb::EntitySpecifics& specifics) {
|
| - const ModelType type = GetModelTypeFromSpecifics(specifics);
|
| - if (type == PASSWORDS || type == NIGORI)
|
| - return false; // These types have their own encryption schemes.
|
| - if (!encrypted_types.Has(type))
|
| - return false; // This type does not require encryption
|
| - return !specifics.has_encrypted();
|
| -}
|
| -
|
| -// Mainly for testing.
|
| -bool VerifyDataTypeEncryptionForTest(
|
| - BaseTransaction* const trans,
|
| - browser_sync::Cryptographer* cryptographer,
|
| - ModelType type,
|
| - bool is_encrypted) {
|
| - if (type == PASSWORDS || type == NIGORI) {
|
| - NOTREACHED();
|
| - return true;
|
| - }
|
| - std::string type_tag = ModelTypeToRootTag(type);
|
| - Entry type_root(trans, GET_BY_SERVER_TAG, type_tag);
|
| - if (!type_root.good()) {
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -
|
| - std::queue<Id> to_visit;
|
| - Id id_string;
|
| - if (!trans->directory()->GetFirstChildId(
|
| - trans, type_root.Get(ID), &id_string)) {
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| - to_visit.push(id_string);
|
| - while (!to_visit.empty()) {
|
| - id_string = to_visit.front();
|
| - to_visit.pop();
|
| - if (id_string.IsRoot())
|
| - continue;
|
| -
|
| - Entry child(trans, GET_BY_ID, id_string);
|
| - if (!child.good()) {
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| - if (child.Get(IS_DIR)) {
|
| - Id child_id_string;
|
| - if (!trans->directory()->GetFirstChildId(
|
| - trans, child.Get(ID), &child_id_string)) {
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| - // Traverse the children.
|
| - to_visit.push(child_id_string);
|
| - }
|
| - const sync_pb::EntitySpecifics& specifics = child.Get(SPECIFICS);
|
| - DCHECK_EQ(type, child.GetModelType());
|
| - DCHECK_EQ(type, GetModelTypeFromSpecifics(specifics));
|
| - // We don't encrypt the server's permanent items.
|
| - if (child.Get(UNIQUE_SERVER_TAG).empty()) {
|
| - if (specifics.has_encrypted() != is_encrypted)
|
| - return false;
|
| - if (specifics.has_encrypted()) {
|
| - if (child.Get(NON_UNIQUE_NAME) != kEncryptedString)
|
| - return false;
|
| - if (!cryptographer->CanDecryptUsingDefaultKey(specifics.encrypted()))
|
| - return false;
|
| - }
|
| - }
|
| - // Push the successor.
|
| - to_visit.push(child.Get(NEXT_ID));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace syncable
|
|
|