blob: e6aa8979890531c5846779979a51a75731720666 [file] [log] [blame]
Darin Petkov86964e02011-06-29 13:49:28 -07001// Copyright (c) 2011 The Chromium OS 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 <base/file_util.h>
Paul Stewart5ad16062013-02-21 18:10:48 -08006#include <base/files/scoped_temp_dir.h>
Darin Petkov86964e02011-06-29 13:49:28 -07007#include <gtest/gtest.h>
8
9#include "shill/crypto_des_cbc.h"
10#include "shill/crypto_provider.h"
11#include "shill/crypto_rot47.h"
12#include "shill/glib.h"
13
Albert Chaulk0e1cdea2013-02-27 15:32:55 -080014using base::FilePath;
Paul Stewart5ad16062013-02-21 18:10:48 -080015using base::ScopedTempDir;
Darin Petkov86964e02011-06-29 13:49:28 -070016using std::string;
17using testing::Test;
18
19namespace shill {
20
21namespace {
22const char kTestKey[] = "12345678";
23const char kTestIV[] = "abcdefgh";
24const char kKeyMatterFile[] = "key-matter-file";
25const char kEmptyText[] = "";
26const char kPlainText[] = "This is a test!";
27const char kROT47Text[] = "rot47:%9:D :D 2 E6DEP";
28const char kDESCBCText[] = "des-cbc:02:bKlHDISdHMFc0teQd4mAVrXgwlSj6iA+";
29} // namespace {}
30
31class CryptoProviderTest : public Test {
32 public:
33 CryptoProviderTest() : provider_(&glib_) {}
34
35 protected:
36 FilePath InitKeyMatterFile(const FilePath &dir);
37
38 GLib glib_; // Use actual GLib for testing.
39 CryptoProvider provider_;
40};
41
42FilePath CryptoProviderTest::InitKeyMatterFile(const FilePath &dir) {
43 FilePath path = dir.Append(kKeyMatterFile);
44 string matter = string(kTestIV) + kTestKey;
45 file_util::WriteFile(path, matter.data(), matter.size());
46 return path;
47}
48
49TEST_F(CryptoProviderTest, Init) {
50 EXPECT_EQ(CryptoProvider::kKeyMatterFile, provider_.key_matter_file_.value());
51
52 provider_.set_key_matter_file(FilePath("/some/non/existent/file"));
53 provider_.Init();
Darin Petkovb2841fd2011-06-30 12:54:12 -070054 ASSERT_EQ(1, provider_.cryptos_.size());
Darin Petkov86964e02011-06-29 13:49:28 -070055 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[0]->GetID());
56
57 ScopedTempDir temp_dir;
58 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
59 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path()));
60 provider_.Init();
Darin Petkovb2841fd2011-06-30 12:54:12 -070061 ASSERT_EQ(2, provider_.cryptos_.size());
Darin Petkov86964e02011-06-29 13:49:28 -070062 EXPECT_EQ(CryptoDESCBC::kID, provider_.cryptos_[0]->GetID());
63 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[1]->GetID());
64
65 provider_.set_key_matter_file(FilePath("/other/missing/file"));
66 provider_.Init();
Darin Petkovb2841fd2011-06-30 12:54:12 -070067 ASSERT_EQ(1, provider_.cryptos_.size());
Darin Petkov86964e02011-06-29 13:49:28 -070068 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[0]->GetID());
69}
70
71TEST_F(CryptoProviderTest, Encrypt) {
72 EXPECT_EQ(kPlainText, provider_.Encrypt(kPlainText));
73 EXPECT_EQ(kEmptyText, provider_.Encrypt(kEmptyText));
74
75 provider_.Init();
76 EXPECT_EQ(kROT47Text, provider_.Encrypt(kPlainText));
77
78 ScopedTempDir temp_dir;
79 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
80 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path()));
81 provider_.Init();
Darin Petkov7326cd82012-03-30 11:02:01 +020082 EXPECT_EQ(kROT47Text, provider_.Encrypt(kPlainText));
Darin Petkov86964e02011-06-29 13:49:28 -070083}
84
85TEST_F(CryptoProviderTest, Decrypt) {
86 EXPECT_EQ(kPlainText, provider_.Decrypt(kPlainText));
87 EXPECT_EQ(kEmptyText, provider_.Decrypt(kEmptyText));
88
89 ScopedTempDir temp_dir;
90 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
91 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path()));
92 provider_.Init();
93 EXPECT_EQ(kPlainText, provider_.Decrypt(kROT47Text));
94 EXPECT_EQ(kPlainText, provider_.Decrypt(kDESCBCText));
95 EXPECT_EQ(kPlainText, provider_.Decrypt(kPlainText));
96 EXPECT_EQ(kEmptyText, provider_.Decrypt(kEmptyText));
97}
98
99} // namespace shill