1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Various utility methods for nigory-based multi-type encryption. 6 7 #ifndef CHROME_BROWSER_SYNC_SYNCABLE_NIGORI_UTIL_H_ 8 #define CHROME_BROWSER_SYNC_SYNCABLE_NIGORI_UTIL_H_ 9 #pragma once 10 11 #include "chrome/browser/sync/protocol/nigori_specifics.pb.h" 12 #include "chrome/browser/sync/syncable/model_type.h" 13 14 namespace browser_sync { 15 class Cryptographer; 16 } 17 18 namespace syncable { 19 20 class BaseTransaction; 21 class ReadTransaction; 22 class WriteTransaction; 23 24 // Returns the set of datatypes that require encryption as specified by the 25 // Sync DB's nigori node. This will never include passwords, as the encryption 26 // status of that is always on if passwords are enabled.. 27 ModelTypeSet GetEncryptedDataTypes(BaseTransaction* const trans); 28 29 // Extract the set of encrypted datatypes from a nigori node. 30 ModelTypeSet GetEncryptedDataTypesFromNigori( 31 const sync_pb::NigoriSpecifics& nigori); 32 33 // Set the encrypted datatypes on the nigori node. 34 void FillNigoriEncryptedTypes(const ModelTypeSet& types, 35 sync_pb::NigoriSpecifics* nigori); 36 37 // Check if our unsyced changes are encrypted if they need to be based on 38 // |encrypted_types|. 39 // Returns: true if all unsynced data that should be encrypted is. 40 // false if some unsynced changes need to be encrypted. 41 // This method is similar to ProcessUnsyncedChangesForEncryption but does not 42 // modify the data and does not care if data is unnecessarily encrypted. 43 bool VerifyUnsyncedChangesAreEncrypted( 44 BaseTransaction* const trans, 45 const ModelTypeSet& encrypted_types); 46 47 // Processes all unsynced changes and ensures they are appropriately encrypted 48 // or unencrypted, based on |encrypted_types|. 49 bool ProcessUnsyncedChangesForEncryption( 50 WriteTransaction* const trans, 51 const syncable::ModelTypeSet& encrypted_types, 52 browser_sync::Cryptographer* cryptographer); 53 54 // Verifies all data of type |type| is encrypted if |is_encrypted| is true or is 55 // unencrypted otherwise. 56 bool VerifyDataTypeEncryption(BaseTransaction* const trans, 57 ModelType type, 58 bool is_encrypted); 59 60 } // namespace syncable 61 62 #endif // CHROME_BROWSER_SYNC_SYNCABLE_NIGORI_UTIL_H_ 63