blob: 518b4829221b9d0de736ee3c2bee3c8145fd8052 [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>
Eric Shienbrood3e20a232012-02-16 11:35:56 -05006#include <base/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
14using std::string;
15using testing::Test;
16
17namespace shill {
18
19namespace {
20const char kTestKey[] = "12345678";
21const char kTestIV[] = "abcdefgh";
22const char kKeyMatterFile[] = "key-matter-file";
23const char kEmptyText[] = "";
24const char kPlainText[] = "This is a test!";
25const char kROT47Text[] = "rot47:%9:D :D 2 E6DEP";
26const char kDESCBCText[] = "des-cbc:02:bKlHDISdHMFc0teQd4mAVrXgwlSj6iA+";
27} // namespace {}
28
29class CryptoProviderTest : public Test {
30 public:
31 CryptoProviderTest() : provider_(&glib_) {}
32
33 protected:
34 FilePath InitKeyMatterFile(const FilePath &dir);
35
36 GLib glib_; // Use actual GLib for testing.
37 CryptoProvider provider_;
38};
39
40FilePath CryptoProviderTest::InitKeyMatterFile(const FilePath &dir) {
41 FilePath path = dir.Append(kKeyMatterFile);
42 string matter = string(kTestIV) + kTestKey;
43 file_util::WriteFile(path, matter.data(), matter.size());
44 return path;
45}
46
47TEST_F(CryptoProviderTest, Init) {
48 EXPECT_EQ(CryptoProvider::kKeyMatterFile, provider_.key_matter_file_.value());
49
50 provider_.set_key_matter_file(FilePath("/some/non/existent/file"));
51 provider_.Init();
Darin Petkovb2841fd2011-06-30 12:54:12 -070052 ASSERT_EQ(1, provider_.cryptos_.size());
Darin Petkov86964e02011-06-29 13:49:28 -070053 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[0]->GetID());
54
55 ScopedTempDir temp_dir;
56 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
57 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path()));
58 provider_.Init();
Darin Petkovb2841fd2011-06-30 12:54:12 -070059 ASSERT_EQ(2, provider_.cryptos_.size());
Darin Petkov86964e02011-06-29 13:49:28 -070060 EXPECT_EQ(CryptoDESCBC::kID, provider_.cryptos_[0]->GetID());
61 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[1]->GetID());
62
63 provider_.set_key_matter_file(FilePath("/other/missing/file"));
64 provider_.Init();
Darin Petkovb2841fd2011-06-30 12:54:12 -070065 ASSERT_EQ(1, provider_.cryptos_.size());
Darin Petkov86964e02011-06-29 13:49:28 -070066 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[0]->GetID());
67}
68
69TEST_F(CryptoProviderTest, Encrypt) {
70 EXPECT_EQ(kPlainText, provider_.Encrypt(kPlainText));
71 EXPECT_EQ(kEmptyText, provider_.Encrypt(kEmptyText));
72
73 provider_.Init();
74 EXPECT_EQ(kROT47Text, provider_.Encrypt(kPlainText));
75
76 ScopedTempDir temp_dir;
77 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
78 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path()));
79 provider_.Init();
Darin Petkov7326cd82012-03-30 11:02:01 +020080 EXPECT_EQ(kROT47Text, provider_.Encrypt(kPlainText));
Darin Petkov86964e02011-06-29 13:49:28 -070081}
82
83TEST_F(CryptoProviderTest, Decrypt) {
84 EXPECT_EQ(kPlainText, provider_.Decrypt(kPlainText));
85 EXPECT_EQ(kEmptyText, provider_.Decrypt(kEmptyText));
86
87 ScopedTempDir temp_dir;
88 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
89 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path()));
90 provider_.Init();
91 EXPECT_EQ(kPlainText, provider_.Decrypt(kROT47Text));
92 EXPECT_EQ(kPlainText, provider_.Decrypt(kDESCBCText));
93 EXPECT_EQ(kPlainText, provider_.Decrypt(kPlainText));
94 EXPECT_EQ(kEmptyText, provider_.Decrypt(kEmptyText));
95}
96
97} // namespace shill