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