Home | History | Annotate | Download | only in os_crypt
      1 // Copyright 2014 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/os_crypt/ie7_password_win.h"
      6 
      7 #include <windows.h>
      8 
      9 #include <vector>
     10 
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 TEST(IE7PasswordTest, GetUserPassword) {
     14   // This is the unencrypted values of my keys under Storage2.
     15   // The passwords have been manually changed to abcdef... but the size remains
     16   // the same.
     17   const unsigned char kData1[] =
     18       "\x0c\x00\x00\x00\x38\x00\x00\x00\x2c\x00\x00\x00"
     19       "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00\x00\x00"
     20       "\x67\x00\x72\x00\x01\x00\x00\x00\x00\x00\x00\x00"
     21       "\x00\x00\x00\x00\x4e\xfa\x67\x76\x22\x94\xc8\x01"
     22       "\x08\x00\x00\x00\x12\x00\x00\x00\x4e\xfa\x67\x76"
     23       "\x22\x94\xc8\x01\x0c\x00\x00\x00\x61\x00\x62\x00"
     24       "\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00"
     25       "\x00\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00"
     26       "\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00"
     27       "\x6c\x00\x00\x00";
     28 
     29   const unsigned char kData2[] =
     30       "\x0c\x00\x00\x00\x38\x00\x00\x00\x24\x00\x00\x00"
     31       "\x57\x49\x43\x4b\x18\x00\x00\x00\x02\x00\x00\x00"
     32       "\x67\x00\x72\x00\x01\x00\x00\x00\x00\x00\x00\x00"
     33       "\x00\x00\x00\x00\xa8\xea\xf4\xe5\x9f\x9a\xc8\x01"
     34       "\x09\x00\x00\x00\x14\x00\x00\x00\xa8\xea\xf4\xe5"
     35       "\x9f\x9a\xc8\x01\x07\x00\x00\x00\x61\x00\x62\x00"
     36       "\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00"
     37       "\x69\x00\x00\x00\x61\x00\x62\x00\x63\x00\x64\x00"
     38       "\x65\x00\x66\x00\x67\x00\x00\x00";
     39 
     40   std::vector<unsigned char> decrypted_data1;
     41   decrypted_data1.resize(arraysize(kData1));
     42   memcpy(&decrypted_data1.front(), kData1, sizeof(kData1));
     43 
     44   std::vector<unsigned char> decrypted_data2;
     45   decrypted_data2.resize(arraysize(kData2));
     46   memcpy(&decrypted_data2.front(), kData2, sizeof(kData2));
     47 
     48   std::vector<ie7_password::DecryptedCredentials> credentials;
     49   ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data1, &credentials));
     50   ASSERT_EQ(1u, credentials.size());
     51   EXPECT_EQ(L"abcdefgh", credentials[0].username);
     52   EXPECT_EQ(L"abcdefghijkl", credentials[0].password);
     53 
     54   credentials.clear();
     55   ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data2, &credentials));
     56   ASSERT_EQ(1u, credentials.size());
     57   EXPECT_EQ(L"abcdefghi", credentials[0].username);
     58   EXPECT_EQ(L"abcdefg", credentials[0].password);
     59 }
     60 
     61 TEST(IE7PasswordTest, GetThreeUserPasswords) {
     62   // Unencrypted binary data holding 3 sets of credentials
     63   const unsigned char kData[] =
     64       "\x0c\x00\x00\x00\x78\x00\x00\x00\x48\x00\x00\x00\x57\x49\x43\x4b\x18"
     65       "\x00\x00\x00\x06\x00\x00\x00\x5c\x00\x55\x00\x01\x00\x00\x00\x00\x00"
     66       "\x00\x00\x00\x00\x00\x00\xc3\xf2\x4b\xda\x1d\xc4\xce\x01\x04\x00\x00"
     67       "\x00\x0a\x00\x00\x00\xc3\xf2\x4b\xda\x1d\xc4\xce\x01\x06\x00\x00\x00"
     68       "\x18\x00\x00\x00\xbe\x5e\xe9\xe1\x1d\xc4\xce\x01\x04\x00\x00\x00\x22"
     69       "\x00\x00\x00\xbe\x5e\xe9\xe1\x1d\xc4\xce\x01\x06\x00\x00\x00\x30\x00"
     70       "\x00\x00\x07\x50\x1f\xe6\x1d\xc4\xce\x01\x04\x00\x00\x00\x3a\x00\x00"
     71       "\x00\x07\x50\x1f\xe6\x1d\xc4\xce\x01\x06\x00\x00\x00\x71\x00\x77\x00"
     72       "\x65\x00\x72\x00\x00\x00\x71\x00\x77\x00\x65\x00\x72\x00\x74\x00\x79"
     73       "\x00\x00\x00\x61\x00\x73\x00\x64\x00\x66\x00\x00\x00\x61\x00\x73\x00"
     74       "\x64\x00\x66\x00\x67\x00\x68\x00\x00\x00\x7a\x00\x78\x00\x63\x00\x76"
     75       "\x00\x00\x00\x7a\x00\x78\x00\x63\x00\x76\x00\x62\x00\x6e\x00\x00\x00";
     76 
     77   std::vector<unsigned char> decrypted_data;
     78   decrypted_data.resize(arraysize(kData));
     79   memcpy(&decrypted_data.front(), kData, sizeof(kData));
     80 
     81   std::vector<ie7_password::DecryptedCredentials> credentials;
     82   ASSERT_TRUE(ie7_password::GetUserPassFromData(decrypted_data, &credentials));
     83   ASSERT_EQ(3u, credentials.size());
     84   EXPECT_EQ(L"qwer", credentials[0].username);
     85   EXPECT_EQ(L"qwerty", credentials[0].password);
     86   EXPECT_EQ(L"asdf", credentials[1].username);
     87   EXPECT_EQ(L"asdfgh", credentials[1].password);
     88   EXPECT_EQ(L"zxcv", credentials[2].username);
     89   EXPECT_EQ(L"zxcvbn", credentials[2].password);
     90 }
     91