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