1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright 2014 The Chromium Authors. All rights reserved.
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Use of this source code is governed by a BSD-style license that can be
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// found in the LICENSE file.
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "components/os_crypt/ie7_password_win.h"
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <windows.h>
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <vector>
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "testing/gtest/include/gtest/gtest.h"
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathTEST(IE7PasswordTest, GetUserPassword) {
147faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  // This is the unencrypted values of my keys under Storage2.
157faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  // The passwords have been manually changed to abcdef... but the size remains
167faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  // the same.
177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  const unsigned char kData1[] =
187faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x0c\x00\x00\x00\x38\x00\x00\x00\x2c\x00\x00\x00"
197faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00\x00\x00"
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x67\x00\x72\x00\x01\x00\x00\x00\x00\x00\x00\x00"
217faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x00\x00\x00\x00\x4e\xfa\x67\x76\x22\x94\xc8\x01"
227faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x08\x00\x00\x00\x12\x00\x00\x00\x4e\xfa\x67\x76"
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x22\x94\xc8\x01\x0c\x00\x00\x00\x61\x00\x62\x00"
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00"
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00"
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00"
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x6c\x00\x00\x00";
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
297faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  const unsigned char kData2[] =
307faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x0c\x00\x00\x00\x38\x00\x00\x00\x24\x00\x00\x00"
317faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00\x00\x00"
327faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x67\x00\x72\x00\x01\x00\x00\x00\x00\x00\x00\x00"
337faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x00\x00\x00\x00\xa8\xea\xf4\xe5\x9f\x9a\xc8\x01"
347faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x09\x00\x00\x00\x14\x00\x00\x00\xa8\xea\xf4\xe5"
357faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x9f\x9a\xc8\x01\x07\x00\x00\x00\x61\x00\x62\x00"
367faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00"
377faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x69\x00\x00\x00\x61\x00\x62\x00\x63\x00\x64\x00"
387faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez      "\x65\x00\x66\x00\x67\x00\x00\x00";
397faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
407faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  std::vector<unsigned char> decrypted_data1;
417faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  decrypted_data1.resize(arraysize(kData1));
427faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  memcpy(&decrypted_data1.front(), kData1, sizeof(kData1));
437faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
447faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  std::vector<unsigned char> decrypted_data2;
457faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  decrypted_data2.resize(arraysize(kData2));
467faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  memcpy(&decrypted_data2.front(), kData2, sizeof(kData2));
477faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
487faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  std::vector<ie7_password::DecryptedCredentials> credentials;
497faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data1, &credentials));
507faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  ASSERT_EQ(1u, credentials.size());
517faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  EXPECT_EQ(L"abcdefgh", credentials[0].username);
527faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez  EXPECT_EQ(L"abcdefghijkl", credentials[0].password);
537faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  credentials.clear();
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data2, &credentials));
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ASSERT_EQ(1u, credentials.size());
57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"abcdefghi", credentials[0].username);
58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"abcdefg", credentials[0].password);
59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathTEST(IE7PasswordTest, GetThreeUserPasswords) {
62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  // Unencrypted binary data holding 3 sets of credentials
63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  const unsigned char kData[] =
64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x0c\x00\x00\x00\x78\x00\x00\x00\x48\x00\x00\x00\x57\x49\x43\x4b\x18"
65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x00\x06\x00\x00\x00\x5c\x00\x55\x00\x01\x00\x00\x00\x00\x00"
66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x00\x00\x00\x00\xc3\xf2\x4b\xda\x1d\xc4\xce\x01\x04\x00\x00"
67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x0a\x00\x00\x00\xc3\xf2\x4b\xda\x1d\xc4\xce\x01\x06\x00\x00\x00"
68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x18\x00\x00\x00\xbe\x5e\xe9\xe1\x1d\xc4\xce\x01\x04\x00\x00\x00\x22"
69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x00\xbe\x5e\xe9\xe1\x1d\xc4\xce\x01\x06\x00\x00\x00\x30\x00"
70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x07\x50\x1f\xe6\x1d\xc4\xce\x01\x04\x00\x00\x00\x3a\x00\x00"
71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x07\x50\x1f\xe6\x1d\xc4\xce\x01\x06\x00\x00\x00\x71\x00\x77\x00"
72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x65\x00\x72\x00\x00\x00\x71\x00\x77\x00\x65\x00\x72\x00\x74\x00\x79"
73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x00\x61\x00\x73\x00\x64\x00\x66\x00\x00\x00\x61\x00\x73\x00"
74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x64\x00\x66\x00\x67\x00\x68\x00\x00\x00\x7a\x00\x78\x00\x63\x00\x76"
75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath      "\x00\x00\x00\x7a\x00\x78\x00\x63\x00\x76\x00\x62\x00\x6e\x00\x00\x00";
76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  std::vector<unsigned char> decrypted_data;
78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  decrypted_data.resize(arraysize(kData));
79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  memcpy(&decrypted_data.front(), kData, sizeof(kData));
80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  std::vector<ie7_password::DecryptedCredentials> credentials;
82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data, &credentials));
83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  ASSERT_EQ(3u, credentials.size());
84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"qwer", credentials[0].username);
85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"qwerty", credentials[0].password);
86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"asdf", credentials[1].username);
87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"asdfgh", credentials[1].password);
88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"zxcv", credentials[2].username);
89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  EXPECT_EQ(L"zxcvbn", credentials[2].password);
90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath