| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/crx_file/crx_creator.h" |
| #include "base/base64.h" |
| #include "base/base_paths.h" |
| #include "base/files/file_path.h" |
| #include "base/files/file_util.h" |
| #include "base/path_service.h" |
| #include "components/crx_file/crx_verifier.h" |
| #include "crypto/rsa_private_key.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| |
| base::FilePath TestFile(const std::string& file) { |
| base::FilePath path; |
| base::PathService::Get(base::DIR_SOURCE_ROOT, &path); |
| return path.AppendASCII("components") |
| .AppendASCII("test") |
| .AppendASCII("data") |
| .AppendASCII("crx_file") |
| .AppendASCII(file); |
| } |
| |
| } // namespace |
| |
| namespace crx_file { |
| |
| using CrxCreatorTest = testing::Test; |
| |
| TEST_F(CrxCreatorTest, Create) { |
| // Set up a signing key. |
| auto signing_key = crypto::RSAPrivateKey::Create(4096); |
| std::vector<uint8_t> public_key; |
| signing_key->ExportPublicKey(&public_key); |
| std::string expected_public_key; |
| base::Base64Encode(std::string(public_key.begin(), public_key.end()), |
| &expected_public_key); |
| |
| // Create a CRX File. |
| base::FilePath tempFile; |
| EXPECT_TRUE(base::CreateTemporaryFile(&tempFile)); |
| EXPECT_EQ(CreatorResult::OK, |
| Create(tempFile, TestFile("sample.zip"), signing_key.get())); |
| |
| // Test that the created file can be verified. |
| const std::vector<std::vector<uint8_t>> keys; |
| const std::vector<uint8_t> hash; |
| std::string public_key_in_crx; |
| EXPECT_EQ(VerifierResult::OK_FULL, |
| Verify(tempFile, VerifierFormat::CRX3, keys, hash, |
| &public_key_in_crx, nullptr)); |
| EXPECT_EQ(expected_public_key, public_key_in_crx); |
| |
| // Delete the file. |
| EXPECT_TRUE(base::DeleteFile(tempFile, false)); |
| } |
| |
| } // namespace crx_file |