| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef OOBE_CONFIG_LOAD_OOBE_CONFIG_USB_H_ |
| #define OOBE_CONFIG_LOAD_OOBE_CONFIG_USB_H_ |
| |
| #include "oobe_config/load_oobe_config_interface.h" |
| |
| #include <memory> |
| #include <string> |
| |
| #include <base/files/file_path.h> |
| #include <crypto/scoped_openssl_types.h> |
| #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| |
| namespace oobe_config { |
| |
| // An object of this class has the responsibility of loading the oobe config |
| // file from usb along with the enrollment domain. |
| class LoadOobeConfigUsb : public LoadOobeConfigInterface { |
| public: |
| LoadOobeConfigUsb(const base::FilePath& stateful_dir, |
| const base::FilePath& device_ids_dir, |
| const base::FilePath& store_dir); |
| ~LoadOobeConfigUsb() = default; |
| |
| bool GetOobeConfigJson(std::string* config, |
| std::string* enrollment_domain) override; |
| |
| // Store the loaded configs into /var/lib/oobe_config_restore. |
| virtual bool Store(); |
| |
| // Cleans up the oobe_auto_config directory on the device if it exists. |
| virtual void CleanupFilesOnDevice(); |
| |
| // Creates an instance of this object with default paths to stateful partition |
| // and device ids; |
| static std::unique_ptr<LoadOobeConfigUsb> CreateInstance(); |
| |
| protected: |
| // Loads the configs from USB drive, stateful, etc. |
| virtual bool Load(); |
| |
| // Checks and reads in all the files necessary for USB enrollment. |
| virtual bool ReadFiles(); |
| |
| // Verifies the hash of the public key on the stateful partition matches the |
| // one in the TPM. |
| virtual bool VerifyPublicKey(); |
| |
| // Locates the USB device using the device path's signature file. |
| virtual bool LocateUsbDevice(base::FilePath* device_id); |
| |
| // Mounts the stateful partition of the discovered USB device. |
| virtual bool MountUsbDevice(const base::FilePath& device_path, |
| const base::FilePath& mount_point); |
| |
| // Unmounts the USB device. |
| virtual bool UnmountUsbDevice(const base::FilePath& mount_point); |
| |
| private: |
| friend class LoadOobeConfigUsbTest; |
| FRIEND_TEST(LoadOobeConfigUsbTest, Simple); |
| |
| base::FilePath stateful_; |
| base::FilePath unencrypted_oobe_config_dir_; |
| base::FilePath pub_key_file_; |
| base::FilePath config_signature_file_; |
| base::FilePath enrollment_domain_signature_file_; |
| base::FilePath usb_device_path_signature_file_; |
| base::FilePath device_ids_dir_; |
| base::FilePath store_dir_; |
| |
| crypto::ScopedEVP_PKEY public_key_; |
| std::string config_signature_; |
| std::string enrollment_domain_signature_; |
| std::string usb_device_path_signature_; |
| |
| bool config_is_verified_; |
| std::string config_; |
| std::string enrollment_domain_; |
| |
| DISALLOW_COPY_AND_ASSIGN(LoadOobeConfigUsb); |
| }; |
| |
| } // namespace oobe_config |
| |
| #endif // OOBE_CONFIG_LOAD_OOBE_CONFIG_USB_H_ |