| // Copyright 2020 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 HWSEC_TEST_UTILS_FAKE_PCA_AGENT_PCA_BASE_H_ |
| #define HWSEC_TEST_UTILS_FAKE_PCA_AGENT_PCA_BASE_H_ |
| |
| #include <utility> |
| |
| #include "hwsec-test-utils/common/openssl_utility.h" |
| |
| namespace hwsec_test_utils { |
| namespace fake_pca_agent { |
| |
| // Provides 4-stage interfaces that accomplish a fake PCA request handling. They |
| // are: |
| // 1. Proprocess: process the |RequestType| into OpenSSL-friendly or |
| // TSS-library-friendly structure, or any other data conversion of which the |
| // product is used in the following stages. |
| // 2. Verify: Perform the crypto operations to verify if the coming |
| // |RequestType| provides legit proof. |
| // 3. Generate: Issue a fake certificate and convert it so the certificate is |
| // ready for output. |
| // 4. Write: write the generated data. |
| // |
| // The construction of this base class takes a instance of |RequestType| and |
| // during the write stage, the output is written to an output parameter of |
| // |ResponseType*| type. Note that this class itself or any subclass of it |
| // doesn't implement any complex program flow and the consumer is responsible |
| // for calling them in sequence. |
| template <typename RequestType, typename ResponseType> |
| class PcaBase { |
| public: |
| PcaBase() = delete; |
| explicit PcaBase(RequestType request) : request_(std::move(request)) { |
| InitializeOpenSSL(); |
| } |
| virtual ~PcaBase() = default; |
| |
| // Not copyable or movable. |
| PcaBase(const PcaBase&) = delete; |
| PcaBase& operator=(const PcaBase&) = delete; |
| PcaBase(PcaBase&&) = delete; |
| PcaBase& operator=(PcaBase&&) = delete; |
| |
| // 4-stage methods. |
| virtual bool Preprocess() = 0; |
| virtual bool Verify() = 0; |
| virtual bool Generate() = 0; |
| virtual bool Write(ResponseType* response) = 0; |
| |
| protected: |
| // Passed in from the constructor. |
| const RequestType request_; |
| }; |
| |
| } // namespace fake_pca_agent |
| } // namespace hwsec_test_utils |
| |
| #endif // HWSEC_TEST_UTILS_FAKE_PCA_AGENT_PCA_BASE_H_ |