OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 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 "chrome/browser/sync/util/nigori.h" | |
6 | |
7 #include <string> | |
8 | |
9 #include "base/memory/scoped_ptr.h" | |
10 #include "base/string_util.h" | |
11 #include "testing/gtest/include/gtest/gtest.h" | |
12 | |
13 namespace browser_sync { | |
14 namespace { | |
15 | |
16 TEST(SyncNigoriTest, Permute) { | |
17 Nigori nigori; | |
18 EXPECT_TRUE(nigori.InitByDerivation("example.com", "username", "password")); | |
19 | |
20 std::string permuted; | |
21 EXPECT_TRUE(nigori.Permute(Nigori::Password, "test name", | |
22 &permuted)); | |
23 | |
24 std::string expected = | |
25 "prewwdJj2PrGDczvmsHJEE5ndcCyVze8sY9kD5hjY/Tm" | |
26 "c5kOjXFK7zB3Ss4LlHjEDirMu+vh85JwHOnGrMVe+g=="; | |
27 EXPECT_EQ(expected, permuted); | |
28 } | |
29 | |
30 TEST(SyncNigoriTest, PermuteIsConstant) { | |
31 Nigori nigori1; | |
32 EXPECT_TRUE(nigori1.InitByDerivation("example.com", "username", "password")); | |
33 | |
34 std::string permuted1; | |
35 EXPECT_TRUE(nigori1.Permute(Nigori::Password, | |
36 "name", | |
37 &permuted1)); | |
38 | |
39 Nigori nigori2; | |
40 EXPECT_TRUE(nigori2.InitByDerivation("example.com", "username", "password")); | |
41 | |
42 std::string permuted2; | |
43 EXPECT_TRUE(nigori2.Permute(Nigori::Password, | |
44 "name", | |
45 &permuted2)); | |
46 | |
47 EXPECT_LT(0U, permuted1.size()); | |
48 EXPECT_EQ(permuted1, permuted2); | |
49 } | |
50 | |
51 TEST(SyncNigoriTest, EncryptDifferentIv) { | |
52 Nigori nigori; | |
53 EXPECT_TRUE(nigori.InitByDerivation("example.com", "username", "password")); | |
54 | |
55 std::string plaintext("value"); | |
56 | |
57 std::string encrypted1; | |
58 EXPECT_TRUE(nigori.Encrypt(plaintext, &encrypted1)); | |
59 | |
60 std::string encrypted2; | |
61 EXPECT_TRUE(nigori.Encrypt(plaintext, &encrypted2)); | |
62 | |
63 EXPECT_NE(encrypted1, encrypted2); | |
64 } | |
65 | |
66 TEST(SyncNigoriTest, Decrypt) { | |
67 Nigori nigori; | |
68 EXPECT_TRUE(nigori.InitByDerivation("example.com", "username", "password")); | |
69 | |
70 std::string encrypted = | |
71 "e7+JyS6ibj6F5qqvpseukNRTZ+oBpu5iuv2VYjOfrH1dNiFLNf7Ov0" | |
72 "kx/zicKFn0lJcbG1UmkNWqIuR4x+quDNVuLaZGbrJPhrJuj7cokCM="; | |
73 | |
74 std::string plaintext; | |
75 EXPECT_TRUE(nigori.Decrypt(encrypted, &plaintext)); | |
76 | |
77 std::string expected("test, test, 1, 2, 3"); | |
78 EXPECT_EQ(expected, plaintext); | |
79 } | |
80 | |
81 TEST(SyncNigoriTest, EncryptDecrypt) { | |
82 Nigori nigori; | |
83 EXPECT_TRUE(nigori.InitByDerivation("example.com", "username", "password")); | |
84 | |
85 std::string plaintext("value"); | |
86 | |
87 std::string encrypted; | |
88 EXPECT_TRUE(nigori.Encrypt(plaintext, &encrypted)); | |
89 | |
90 std::string decrypted; | |
91 EXPECT_TRUE(nigori.Decrypt(encrypted, &decrypted)); | |
92 | |
93 EXPECT_EQ(plaintext, decrypted); | |
94 } | |
95 | |
96 TEST(SyncNigoriTest, CorruptedIv) { | |
97 Nigori nigori; | |
98 EXPECT_TRUE(nigori.InitByDerivation("example.com", "username", "password")); | |
99 | |
100 std::string plaintext("test"); | |
101 | |
102 std::string encrypted; | |
103 EXPECT_TRUE(nigori.Encrypt(plaintext, &encrypted)); | |
104 | |
105 // Corrupt the IV by changing one of its byte. | |
106 encrypted[0] = (encrypted[0] == 'a' ? 'b' : 'a'); | |
107 | |
108 std::string decrypted; | |
109 EXPECT_TRUE(nigori.Decrypt(encrypted, &decrypted)); | |
110 | |
111 EXPECT_NE(plaintext, decrypted); | |
112 } | |
113 | |
114 TEST(SyncNigoriTest, CorruptedCiphertext) { | |
115 Nigori nigori; | |
116 EXPECT_TRUE(nigori.InitByDerivation("example.com", "username", "password")); | |
117 | |
118 std::string plaintext("test"); | |
119 | |
120 std::string encrypted; | |
121 EXPECT_TRUE(nigori.Encrypt(plaintext, &encrypted)); | |
122 | |
123 // Corrput the ciphertext by changing one of its bytes. | |
124 encrypted[Nigori::kIvSize + 10] = | |
125 (encrypted[Nigori::kIvSize + 10] == 'a' ? 'b' : 'a'); | |
126 | |
127 std::string decrypted; | |
128 EXPECT_FALSE(nigori.Decrypt(encrypted, &decrypted)); | |
129 | |
130 EXPECT_NE(plaintext, decrypted); | |
131 } | |
132 | |
133 // Crashes, Bug 55180. | |
134 #if defined(OS_WIN) | |
135 #define MAYBE_ExportImport DISABLED_ExportImport | |
136 #else | |
137 #define MAYBE_ExportImport ExportImport | |
138 #endif | |
139 TEST(SyncNigoriTest, MAYBE_ExportImport) { | |
140 Nigori nigori1; | |
141 EXPECT_TRUE(nigori1.InitByDerivation("example.com", "username", "password")); | |
142 | |
143 std::string user_key; | |
144 std::string encryption_key; | |
145 std::string mac_key; | |
146 EXPECT_TRUE(nigori1.ExportKeys(&user_key, &encryption_key, &mac_key)); | |
147 | |
148 Nigori nigori2; | |
149 EXPECT_TRUE(nigori2.InitByImport(user_key, encryption_key, mac_key)); | |
150 | |
151 std::string original("test"); | |
152 std::string plaintext; | |
153 std::string ciphertext; | |
154 | |
155 EXPECT_TRUE(nigori1.Encrypt(original, &ciphertext)); | |
156 EXPECT_TRUE(nigori2.Decrypt(ciphertext, &plaintext)); | |
157 EXPECT_EQ(original, plaintext); | |
158 | |
159 EXPECT_TRUE(nigori2.Encrypt(original, &ciphertext)); | |
160 EXPECT_TRUE(nigori1.Decrypt(ciphertext, &plaintext)); | |
161 EXPECT_EQ(original, plaintext); | |
162 | |
163 std::string permuted1, permuted2; | |
164 EXPECT_TRUE(nigori1.Permute(Nigori::Password, original, &permuted1)); | |
165 EXPECT_TRUE(nigori2.Permute(Nigori::Password, original, &permuted2)); | |
166 EXPECT_EQ(permuted1, permuted2); | |
167 } | |
168 | |
169 } // anonymous namespace | |
170 } // namespace browser_sync | |
OLD | NEW |