1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef COMPONENTS_OS_CRYPT_IE7_PASSWORD_WIN_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define COMPONENTS_OS_CRYPT_IE7_PASSWORD_WIN_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Contains the information read from the IE7/IE8 Storage2 key in the registry. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct IE7PasswordInfo { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hash of the url. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring url_hash; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Encrypted data containing the username, password and some more undocumented 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fields. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<unsigned char> encrypted_data; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the login was imported. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time date_created; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ie7_password { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)struct DecryptedCredentials { 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::wstring username; 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::wstring password; 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Parses a data structure to find passwords and usernames. 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// The collection of bytes in |data| is interpreted as a special PasswordEntry 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// structure. IE saves the login information as a binary dump of this structure. 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Credentials extracted from |data| end up in |credentials|. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GetUserPassFromData(const std::vector<unsigned char>& data, 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<DecryptedCredentials>* credentials); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Decrypts usernames and passwords for a given data vector using the url as 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the key. 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Output ends up in |credentials|. 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool DecryptPasswords(const std::wstring& url, 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::vector<unsigned char>& data, 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<DecryptedCredentials>* credentials); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the hash of a url. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::wstring GetUrlHash(const std::wstring& url); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ie7_password 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // COMPONENTS_OS_CRYPT_IE7_PASSWORD_WIN_H_ 55