| // Copyright (c) 2011 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. |
| |
| // Various utility methods for nigory-based multi-type encryption. |
| |
| #ifndef CHROME_BROWSER_SYNC_SYNCABLE_NIGORI_UTIL_H_ |
| #define CHROME_BROWSER_SYNC_SYNCABLE_NIGORI_UTIL_H_ |
| #pragma once |
| |
| #include "chrome/browser/sync/protocol/nigori_specifics.pb.h" |
| #include "chrome/browser/sync/syncable/model_type.h" |
| |
| namespace browser_sync { |
| class Cryptographer; |
| } |
| |
| namespace syncable { |
| |
| class BaseTransaction; |
| class ReadTransaction; |
| class WriteTransaction; |
| |
| // Returns the set of datatypes that require encryption as specified by the |
| // Sync DB's nigori node. This will never include passwords, as the encryption |
| // status of that is always on if passwords are enabled.. |
| ModelTypeSet GetEncryptedDataTypes(BaseTransaction* const trans); |
| |
| // Extract the set of encrypted datatypes from a nigori node. |
| ModelTypeSet GetEncryptedDataTypesFromNigori( |
| const sync_pb::NigoriSpecifics& nigori); |
| |
| // Set the encrypted datatypes on the nigori node. |
| void FillNigoriEncryptedTypes(const ModelTypeSet& types, |
| sync_pb::NigoriSpecifics* nigori); |
| |
| // Check if our unsyced changes are encrypted if they need to be based on |
| // |encrypted_types|. |
| // Returns: true if all unsynced data that should be encrypted is. |
| // false if some unsynced changes need to be encrypted. |
| // This method is similar to ProcessUnsyncedChangesForEncryption but does not |
| // modify the data and does not care if data is unnecessarily encrypted. |
| bool VerifyUnsyncedChangesAreEncrypted( |
| BaseTransaction* const trans, |
| const ModelTypeSet& encrypted_types); |
| |
| // Processes all unsynced changes and ensures they are appropriately encrypted |
| // or unencrypted, based on |encrypted_types|. |
| bool ProcessUnsyncedChangesForEncryption( |
| WriteTransaction* const trans, |
| const syncable::ModelTypeSet& encrypted_types, |
| browser_sync::Cryptographer* cryptographer); |
| |
| // Verifies all data of type |type| is encrypted if |is_encrypted| is true or is |
| // unencrypted otherwise. |
| bool VerifyDataTypeEncryption(BaseTransaction* const trans, |
| ModelType type, |
| bool is_encrypted); |
| |
| } // namespace syncable |
| |
| #endif // CHROME_BROWSER_SYNC_SYNCABLE_NIGORI_UTIL_H_ |