diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-15 01:35:45 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-15 01:35:45 +0000 |
commit | d330185b649cc66f60362c01cbead62e5b2545ba (patch) | |
tree | e71046177bf83524e11051db7698a0a588181eb2 /chrome/browser/password_manager/encryptor.cc | |
parent | 7236eb109ef090be1163c384584714c7d139ed98 (diff) | |
download | chromium_src-d330185b649cc66f60362c01cbead62e5b2545ba.zip chromium_src-d330185b649cc66f60362c01cbead62e5b2545ba.tar.gz chromium_src-d330185b649cc66f60362c01cbead62e5b2545ba.tar.bz2 |
Move password manager files into a subdir
Review URL: http://codereview.chromium.org/18259
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8066 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/password_manager/encryptor.cc')
-rw-r--r-- | chrome/browser/password_manager/encryptor.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/chrome/browser/password_manager/encryptor.cc b/chrome/browser/password_manager/encryptor.cc new file mode 100644 index 0000000..b5c0755 --- /dev/null +++ b/chrome/browser/password_manager/encryptor.cc @@ -0,0 +1,65 @@ +// Copyright (c) 2006-2008 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. + +#include "chrome/browser/password_manager/encryptor.h" + +#include <windows.h> +#include <wincrypt.h> +#include "base/string_util.h" + +#pragma comment(lib, "crypt32.lib") + +bool Encryptor::EncryptWideString(const std::wstring& plaintext, + std::string* ciphertext) { + return EncryptString(WideToUTF8(plaintext), ciphertext); +} + +bool Encryptor::DecryptWideString(const std::string& ciphertext, + std::wstring* plaintext){ + std::string utf8; + if (!DecryptString(ciphertext, &utf8)) + return false; + + *plaintext = UTF8ToWide(utf8); + return true; +} + +bool Encryptor::EncryptString(const std::string& plaintext, + std::string* ciphertext) { + DATA_BLOB input; + input.pbData = const_cast<BYTE*>( + reinterpret_cast<const BYTE*>(plaintext.data())); + input.cbData = static_cast<DWORD>(plaintext.length()); + + DATA_BLOB output; + BOOL result = CryptProtectData(&input, L"", NULL, NULL, NULL, + 0, &output); + if (!result) + return false; + + // this does a copy + ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbData), + output.cbData); + + LocalFree(output.pbData); + return true; +} + +bool Encryptor::DecryptString(const std::string& ciphertext, + std::string* plaintext){ + DATA_BLOB input; + input.pbData = const_cast<BYTE*>( + reinterpret_cast<const BYTE*>(ciphertext.data())); + input.cbData = static_cast<DWORD>(ciphertext.length()); + + DATA_BLOB output; + BOOL result = CryptUnprotectData(&input, NULL, NULL, NULL, NULL, + 0, &output); + if(!result) + return false; + + plaintext->assign(reinterpret_cast<char*>(output.pbData), output.cbData); + LocalFree(output.pbData); + return true; +} |