1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_PASSWORD_MANAGER_ENCRYPTOR_H__
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_PASSWORD_MANAGER_ENCRYPTOR_H__
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string16.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The Encryptor class gives access to simple encryption and decryption of
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// strings.  Note that on Mac, access to the system Keychain is required and
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// these calls can block the current thread to collect user input.
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Encryptor {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Encrypt a string16. The output (second argument) is
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // really an array of bytes, but we're passing it back
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // as a std::string
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool EncryptString16(const string16& plaintext,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              std::string* ciphertext);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Decrypt an array of bytes obtained with EncryptString16
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // back into a string16. Note that the input (first argument)
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is a std::string, so you need to first get your (binary)
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // data into a string.
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool DecryptString16(const std::string& ciphertext,
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              string16* plaintext);
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Encrypt a string.
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool EncryptString(const std::string& plaintext,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            std::string* ciphertext);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Decrypt an array of bytes obtained with EnctryptString
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // back into a string. Note that the input (first argument)
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is a std::string, so you need to first get your (binary)
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // data into a string.
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static bool DecryptString(const std::string& ciphertext,
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            std::string* plaintext);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX)
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // For unit testing purposes we instruct the Encryptor to use a mock Keychain
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // on the Mac.  The default is to use the real Keychain.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static void UseMockKeychain(bool use_mock);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_IMPLICIT_CONSTRUCTORS(Encryptor);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_PASSWORD_MANAGER_ENCRYPTOR_H__
53