// 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_