| // Copyright 2017 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. |
| // |
| // PCA interface classes for cert_provision library. |
| |
| #ifndef CRYPTOHOME_CERT_PROVISION_PCA_H_ |
| #define CRYPTOHOME_CERT_PROVISION_PCA_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include <brillo/http/http_utils.h> |
| #include <brillo/secure_blob.h> |
| |
| #include "cryptohome/cert_provision_util.h" |
| |
| namespace cert_provision { |
| |
| // Proxy for exchanging messages with a PCA over network. |
| class PCAProxy { |
| public: |
| explicit PCAProxy(const std::string& pca_url) : pca_url_(pca_url) {} |
| |
| virtual ~PCAProxy() {} |
| |
| // Sends |request| to the PCA, waits for the |response|. |action| is appended |
| // to the PCA base url to form the url for the POST request. |
| virtual OpResult MakeRequest(const std::string& action, |
| const brillo::SecureBlob& request, |
| brillo::SecureBlob* reply) = 0; |
| |
| // Returns a new scoped default PCAProxy implementation unless |
| // subst_obj is set. In that case, returns subst_obj. |
| static Scoped<PCAProxy> Create(const std::string& pca_url); |
| static PCAProxy* subst_obj; |
| |
| protected: |
| std::string pca_url_; |
| |
| private: |
| static std::unique_ptr<PCAProxy> GetDefault(const std::string& pca_url); |
| }; |
| |
| class PCAProxyImpl : public PCAProxy { |
| public: |
| explicit PCAProxyImpl(const std::string& pca_url); |
| OpResult MakeRequest(const std::string& action, |
| const brillo::SecureBlob& request, |
| brillo::SecureBlob* reply) override; |
| |
| private: |
| std::shared_ptr<brillo::http::Transport> http_transport_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PCAProxyImpl); |
| }; |
| |
| } // namespace cert_provision |
| |
| #endif // CRYPTOHOME_CERT_PROVISION_PCA_H_ |