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 14namespace browser_sync { 15class Cryptographer; 16} 17 18namespace syncable { 19 20class BaseTransaction; 21class ReadTransaction; 22class 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.. 27ModelTypeSet GetEncryptedDataTypes(BaseTransaction* const trans); 28 29// Extract the set of encrypted datatypes from a nigori node. 30ModelTypeSet GetEncryptedDataTypesFromNigori( 31 const sync_pb::NigoriSpecifics& nigori); 32 33// Set the encrypted datatypes on the nigori node. 34void 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. 43bool 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|. 49bool 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. 56bool 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