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