blob: 85a9947975872648947d46a99b64c98e7fae9078 [file]
// Copyright 2019 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.
#ifndef COMPONENTS_SYNC_NIGORI_CRYPTOGRAPHER_H_
#define COMPONENTS_SYNC_NIGORI_CRYPTOGRAPHER_H_
#include <memory>
#include <string>
#include "base/macros.h"
#include "components/sync/protocol/encryption.pb.h"
namespace syncer {
// Interface used to encrypt and decrypt sensitive sync data (eg. passwords).
class Cryptographer {
public:
Cryptographer();
virtual ~Cryptographer();
virtual std::unique_ptr<Cryptographer> Clone() const = 0;
// Returns whether this cryptographer is ready to encrypt data, using
// EncryptString(). This usually means that a default encryption key is
// available and there are no pending keys.
virtual bool CanEncrypt() const = 0;
// Returns whether this cryptographer can decrypt |encrypted| using any of
// the known keys.
virtual bool CanDecrypt(const sync_pb::EncryptedData& encrypted) const = 0;
// Returns a name that uniquely identifies the key used for encryption.
virtual std::string GetDefaultEncryptionKeyName() const = 0;
// Encrypted |decrypted| into |*encrypted|. |encrypted| must not be null.
// Returns false in case of error, which most notably includes the case
// where CanEncrypt() returns false.
virtual bool EncryptString(const std::string& decrypted,
sync_pb::EncryptedData* encrypted) const = 0;
// Decrypts |encrypted| as a plaintext decrypted data into |*decrypted|.
// |decrypted| must not be null. Returns false in case of error, which most
// notably includes the case where CanDecrypt() would have returned false.
virtual bool DecryptToString(const sync_pb::EncryptedData& encrypted,
std::string* decrypted) const = 0;
// Convenience function to deal with protocol buffers. It uses EncryptString()
// after serialization.
bool Encrypt(const ::google::protobuf::MessageLite& message,
sync_pb::EncryptedData* encrypted) const;
// Convenience function to deal with protocol buffers. After decryption, it
// parses the decrypted content into a protocol buffer.
bool Decrypt(const sync_pb::EncryptedData& encrypted,
::google::protobuf::MessageLite* message) const;
private:
DISALLOW_ASSIGN(Cryptographer);
};
} // namespace syncer
#endif // COMPONENTS_SYNC_NIGORI_CRYPTOGRAPHER_H_