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.
5 #include "components/os_crypt/ie7_password_win.h"
11 #include "testing/gtest/include/gtest/gtest.h"
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
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"
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";
40 std::vector
<unsigned char> decrypted_data1
;
41 decrypted_data1
.resize(arraysize(kData1
));
42 memcpy(&decrypted_data1
.front(), kData1
, sizeof(kData1
));
44 std::vector
<unsigned char> decrypted_data2
;
45 decrypted_data2
.resize(arraysize(kData2
));
46 memcpy(&decrypted_data2
.front(), kData2
, sizeof(kData2
));
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
);
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
);
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";
77 std::vector
<unsigned char> decrypted_data
;
78 decrypted_data
.resize(arraysize(kData
));
79 memcpy(&decrypted_data
.front(), kData
, sizeof(kData
));
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
);