1 // Copyright (c) 2006-2008 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 #include "components/webdata/encryptor/encryptor.h" 6 7 #include <windows.h> 8 #include <wincrypt.h> 9 #include "base/strings/utf_string_conversions.h" 10 11 #pragma comment(lib, "crypt32.lib") 12 13 bool Encryptor::EncryptString16(const base::string16& plaintext, 14 std::string* ciphertext) { 15 return EncryptString(UTF16ToUTF8(plaintext), ciphertext); 16 } 17 18 bool Encryptor::DecryptString16(const std::string& ciphertext, 19 base::string16* plaintext) { 20 std::string utf8; 21 if (!DecryptString(ciphertext, &utf8)) 22 return false; 23 24 *plaintext = UTF8ToUTF16(utf8); 25 return true; 26 } 27 28 bool Encryptor::EncryptString(const std::string& plaintext, 29 std::string* ciphertext) { 30 DATA_BLOB input; 31 input.pbData = const_cast<BYTE*>( 32 reinterpret_cast<const BYTE*>(plaintext.data())); 33 input.cbData = static_cast<DWORD>(plaintext.length()); 34 35 DATA_BLOB output; 36 BOOL result = CryptProtectData(&input, L"", NULL, NULL, NULL, 37 0, &output); 38 if (!result) 39 return false; 40 41 // this does a copy 42 ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbData), 43 output.cbData); 44 45 LocalFree(output.pbData); 46 return true; 47 } 48 49 bool Encryptor::DecryptString(const std::string& ciphertext, 50 std::string* plaintext) { 51 DATA_BLOB input; 52 input.pbData = const_cast<BYTE*>( 53 reinterpret_cast<const BYTE*>(ciphertext.data())); 54 input.cbData = static_cast<DWORD>(ciphertext.length()); 55 56 DATA_BLOB output; 57 BOOL result = CryptUnprotectData(&input, NULL, NULL, NULL, NULL, 58 0, &output); 59 if (!result) 60 return false; 61 62 plaintext->assign(reinterpret_cast<char*>(output.pbData), output.cbData); 63 LocalFree(output.pbData); 64 return true; 65 } 66