1// 2// Copyright (C) 2011 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17#include "shill/crypto_provider.h" 18 19#include <string> 20 21#include <base/files/file_util.h> 22#include <base/files/scoped_temp_dir.h> 23#include <gtest/gtest.h> 24 25#include "shill/crypto_des_cbc.h" 26#include "shill/crypto_rot47.h" 27 28using base::FilePath; 29using base::ScopedTempDir; 30using std::string; 31using testing::Test; 32 33namespace shill { 34 35namespace { 36const char kTestKey[] = "12345678"; 37const char kTestIV[] = "abcdefgh"; 38const char kKeyMatterFile[] = "key-matter-file"; 39const char kEmptyText[] = ""; 40const char kPlainText[] = "This is a test!"; 41const char kROT47Text[] = "rot47:%9:D :D 2 E6DEP"; 42const char kDESCBCText[] = "des-cbc:02:bKlHDISdHMFc0teQd4mAVrXgwlSj6iA+"; 43} // namespace 44 45class CryptoProviderTest : public Test { 46 public: 47 CryptoProviderTest() {} 48 49 protected: 50 FilePath InitKeyMatterFile(const FilePath& dir); 51 52 CryptoProvider provider_; 53}; 54 55FilePath CryptoProviderTest::InitKeyMatterFile(const FilePath& dir) { 56 FilePath path = dir.Append(kKeyMatterFile); 57 string matter = string(kTestIV) + kTestKey; 58 base::WriteFile(path, matter.data(), matter.size()); 59 return path; 60} 61 62TEST_F(CryptoProviderTest, Init) { 63 EXPECT_EQ(CryptoProvider::kKeyMatterFile, provider_.key_matter_file_.value()); 64 65 provider_.set_key_matter_file(FilePath("/some/non/existent/file")); 66 provider_.Init(); 67 ASSERT_EQ(1, provider_.cryptos_.size()); 68 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[0]->GetID()); 69 70 ScopedTempDir temp_dir; 71 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 72 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path())); 73 provider_.Init(); 74 ASSERT_EQ(2, provider_.cryptos_.size()); 75 EXPECT_EQ(CryptoDESCBC::kID, provider_.cryptos_[0]->GetID()); 76 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[1]->GetID()); 77 78 provider_.set_key_matter_file(FilePath("/other/missing/file")); 79 provider_.Init(); 80 ASSERT_EQ(1, provider_.cryptos_.size()); 81 EXPECT_EQ(CryptoROT47::kID, provider_.cryptos_[0]->GetID()); 82} 83 84TEST_F(CryptoProviderTest, Encrypt) { 85 EXPECT_EQ(kPlainText, provider_.Encrypt(kPlainText)); 86 EXPECT_EQ(kEmptyText, provider_.Encrypt(kEmptyText)); 87 88 provider_.Init(); 89 EXPECT_EQ(kROT47Text, provider_.Encrypt(kPlainText)); 90 91 ScopedTempDir temp_dir; 92 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 93 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path())); 94 provider_.Init(); 95 EXPECT_EQ(kROT47Text, provider_.Encrypt(kPlainText)); 96} 97 98TEST_F(CryptoProviderTest, Decrypt) { 99 EXPECT_EQ(kPlainText, provider_.Decrypt(kPlainText)); 100 EXPECT_EQ(kEmptyText, provider_.Decrypt(kEmptyText)); 101 102 ScopedTempDir temp_dir; 103 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 104 provider_.set_key_matter_file(InitKeyMatterFile(temp_dir.path())); 105 provider_.Init(); 106 EXPECT_EQ(kPlainText, provider_.Decrypt(kROT47Text)); 107 EXPECT_EQ(kPlainText, provider_.Decrypt(kDESCBCText)); 108 EXPECT_EQ(kPlainText, provider_.Decrypt(kPlainText)); 109 EXPECT_EQ(kEmptyText, provider_.Decrypt(kEmptyText)); 110} 111 112} // namespace shill 113